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/14 17:38:12 UTC

[01/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 900a94779 -> 736088b30


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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..0a2f7ef 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="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="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 bcn;
+<a class="jxr_linenumber" name="31" href="#31">31</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.getBcn__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.setBcn(<span class="jxr_string">""</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="43" href="#43">43</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFilter__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="45" href="#45">45</a>        p_implData.setFilter(<span class="jxr_string">"general"</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="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="57" href="#57">57</a>      bcv = p_implData.getBcv();
+<a class="jxr_linenumber" name="58" href="#58">58</a>      bcn = p_implData.getBcn();
+<a class="jxr_linenumber" name="59" href="#59">59</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>


[04/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref/org/apache/hadoop/hbase/regionserver/StoreScanner.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/regionserver/StoreScanner.html b/xref/org/apache/hadoop/hbase/regionserver/StoreScanner.html
index 5e98b23..b6bfd3e 100644
--- a/xref/org/apache/hadoop/hbase/regionserver/StoreScanner.html
+++ b/xref/org/apache/hadoop/hbase/regionserver/StoreScanner.html
@@ -37,865 +37,885 @@
 <a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> java.util.NavigableSet;
 <a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
 <a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.CountDownLatch;
-<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> org.apache.commons.logging.Log;
-<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
-<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Cell;
-<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellComparator;
-<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellUtil;
-<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.DoNotRetryIOException;
-<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
-<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.KeyValue;
-<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.classification.InterfaceAudience;
-<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.IsolationLevel;
-<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
-<a class="jxr_linenumber" name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.executor.ExecutorService;
-<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.filter.Filter;
-<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode;
-<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;
-<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;
-<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;
-<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
-<a class="jxr_linenumber" name="49" href="#49">49</a>  
-<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> com.google.common.annotations.VisibleForTesting;
-<a class="jxr_linenumber" name="51" href="#51">51</a>  
-<a class="jxr_linenumber" name="52" href="#52">52</a>  <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="53" href="#53">53</a>  <em class="jxr_javadoccomment"> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream</em>
-<a class="jxr_linenumber" name="54" href="#54">54</a>  <em class="jxr_javadoccomment"> * into List&amp;lt;KeyValue&amp;gt; for a single row.</em>
-<a class="jxr_linenumber" name="55" href="#55">55</a>  <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="56" href="#56">56</a>  @InterfaceAudience.Private
-<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html">NonReversedNonLazyKeyValueScanner</a>
-<a class="jxr_linenumber" name="58" href="#58">58</a>      <strong class="jxr_keyword">implements</strong> KeyValueScanner, InternalScanner, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> {
-<a class="jxr_linenumber" name="59" href="#59">59</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(StoreScanner.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="60" href="#60">60</a>    <em class="jxr_comment">// In unit tests, the store could be null</em>
-<a class="jxr_linenumber" name="61" href="#61">61</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store;
-<a class="jxr_linenumber" name="62" href="#62">62</a>    <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher;
-<a class="jxr_linenumber" name="63" href="#63">63</a>    <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a> heap;
-<a class="jxr_linenumber" name="64" href="#64">64</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> cacheBlocks;
-<a class="jxr_linenumber" name="65" href="#65">65</a>  
-<a class="jxr_linenumber" name="66" href="#66">66</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> countPerRow = 0;
-<a class="jxr_linenumber" name="67" href="#67">67</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> storeLimit = -1;
-<a class="jxr_linenumber" name="68" href="#68">68</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> storeOffset = 0;
-<a class="jxr_linenumber" name="69" href="#69">69</a>  
-<a class="jxr_linenumber" name="70" href="#70">70</a>    <em class="jxr_comment">// Used to indicate that the scanner has closed (see HBASE-1107)</em>
-<a class="jxr_linenumber" name="71" href="#71">71</a>    <em class="jxr_comment">// Doesnt need to be volatile because it's always accessed via synchronized methods</em>
-<a class="jxr_linenumber" name="72" href="#72">72</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> closing = false;
-<a class="jxr_linenumber" name="73" href="#73">73</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> get;
-<a class="jxr_linenumber" name="74" href="#74">74</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> explicitColumnQuery;
-<a class="jxr_linenumber" name="75" href="#75">75</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> useRowColBloom;
-<a class="jxr_linenumber" name="76" href="#76">76</a>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="77" href="#77">77</a>  <em class="jxr_javadoccomment">   * A flag that enables StoreFileScanner parallel-seeking</em>
-<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>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> parallelSeekEnabled = false;
-<a class="jxr_linenumber" name="80" href="#80">80</a>    <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html">ExecutorService</a> executor;
-<a class="jxr_linenumber" name="81" href="#81">81</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan;
-<a class="jxr_linenumber" name="82" href="#82">82</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns;
-<a class="jxr_linenumber" name="83" href="#83">83</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> oldestUnexpiredTS;
-<a class="jxr_linenumber" name="84" href="#84">84</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> now;
-<a class="jxr_linenumber" name="85" href="#85">85</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> minVersions;
-<a class="jxr_linenumber" name="86" href="#86">86</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> maxRowSize;
-<a class="jxr_linenumber" name="87" href="#87">87</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> cellsPerHeartbeatCheck;
-<a class="jxr_linenumber" name="88" href="#88">88</a>  
-<a class="jxr_linenumber" name="89" href="#89">89</a>    <em class="jxr_comment">// Collects all the KVHeap that are eagerly getting closed during the</em>
-<a class="jxr_linenumber" name="90" href="#90">90</a>    <em class="jxr_comment">// course of a scan</em>
-<a class="jxr_linenumber" name="91" href="#91">91</a>    <strong class="jxr_keyword">protected</strong> Set&lt;KeyValueHeap&gt; heapsForDelayedClose = <strong class="jxr_keyword">new</strong> HashSet&lt;KeyValueHeap&gt;();
-<a class="jxr_linenumber" name="92" href="#92">92</a>  
-<a class="jxr_linenumber" name="93" href="#93">93</a>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="94" href="#94">94</a>  <em class="jxr_javadoccomment">   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not</em>
-<a class="jxr_linenumber" name="95" href="#95">95</a>  <em class="jxr_javadoccomment">   * KVs skipped via seeking to next row/column. TODO: estimate them?</em>
-<a class="jxr_linenumber" name="96" href="#96">96</a>  <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="97" href="#97">97</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> kvsScanned = 0;
-<a class="jxr_linenumber" name="98" href="#98">98</a>    <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> prevCell = <strong class="jxr_keyword">null</strong>;
-<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><em class="jxr_javadoccomment"> We don't ever expect to change this, the constant is just for clarity. */</em>
-<a class="jxr_linenumber" name="101" href="#101">101</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> LAZY_SEEK_ENABLED_BY_DEFAULT = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="102" href="#102">102</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String STORESCANNER_PARALLEL_SEEK_ENABLE =
-<a class="jxr_linenumber" name="103" href="#103">103</a>       <span class="jxr_string">"hbase.storescanner.parallel.seek.enable"</span>;
-<a class="jxr_linenumber" name="104" href="#104">104</a> 
-<a class="jxr_linenumber" name="105" href="#105">105</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Used during unit testing to ensure that lazy seek does save seek ops */</em>
-<a class="jxr_linenumber" name="106" href="#106">106</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> lazySeekEnabledGlobally =
-<a class="jxr_linenumber" name="107" href="#107">107</a>       LAZY_SEEK_ENABLED_BY_DEFAULT;
-<a class="jxr_linenumber" name="108" href="#108">108</a> 
-<a class="jxr_linenumber" name="109" href="#109">109</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="110" href="#110">110</a> <em class="jxr_javadoccomment">   * The number of cells scanned in between timeout checks. Specifying a larger value means that</em>
-<a class="jxr_linenumber" name="111" href="#111">111</a> <em class="jxr_javadoccomment">   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent</em>
-<a class="jxr_linenumber" name="112" href="#112">112</a> <em class="jxr_javadoccomment">   * timeout checks.</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">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =
-<a class="jxr_linenumber" name="115" href="#115">115</a>       <span class="jxr_string">"hbase.cells.scanned.per.heartbeat.check"</span>;
-<a class="jxr_linenumber" name="116" href="#116">116</a> 
-<a class="jxr_linenumber" name="117" href="#117">117</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="118" href="#118">118</a> <em class="jxr_javadoccomment">   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.</em>
-<a class="jxr_linenumber" name="119" href="#119">119</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="120" href="#120">120</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;
-<a class="jxr_linenumber" name="121" href="#121">121</a> 
-<a class="jxr_linenumber" name="122" href="#122">122</a>   <em class="jxr_comment">// if heap == null and lastTop != null, you need to reseek given the key below</em>
-<a class="jxr_linenumber" name="123" href="#123">123</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> lastTop = <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>   <em class="jxr_comment">// A flag whether use pread for scan</em>
-<a class="jxr_linenumber" name="126" href="#126">126</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> scanUsePread = false;
-<a class="jxr_linenumber" name="127" href="#127">127</a>   <em class="jxr_comment">// Indicates whether there was flush during the course of the scan</em>
-<a class="jxr_linenumber" name="128" href="#128">128</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">volatile</strong> <strong class="jxr_keyword">boolean</strong> flushed = false;
-<a class="jxr_linenumber" name="129" href="#129">129</a>   
-<a class="jxr_linenumber" name="130" href="#130">130</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> readPt;
-<a class="jxr_linenumber" name="131" href="#131">131</a> 
-<a class="jxr_linenumber" name="132" href="#132">132</a>   <em class="jxr_comment">// used by the injection framework to test race between StoreScanner construction and compaction</em>
-<a class="jxr_linenumber" name="133" href="#133">133</a>   enum <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScannerCompactionRace</a> {
-<a class="jxr_linenumber" name="134" href="#134">134</a>     BEFORE_SEEK,
-<a class="jxr_linenumber" name="135" href="#135">135</a>     AFTER_SEEK,
-<a class="jxr_linenumber" name="136" href="#136">136</a>     COMPACT_COMPLETE
-<a class="jxr_linenumber" name="137" href="#137">137</a>   }
+<a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.locks.ReentrantLock;
+<a class="jxr_linenumber" name="31" href="#31">31</a>  
+<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
+<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
+<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Cell;
+<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellComparator;
+<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellUtil;
+<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.DoNotRetryIOException;
+<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
+<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.KeyValue;
+<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.classification.InterfaceAudience;
+<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.IsolationLevel;
+<a class="jxr_linenumber" name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
+<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.executor.ExecutorService;
+<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.filter.Filter;
+<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode;
+<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;
+<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;
+<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;
+<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
+<a class="jxr_linenumber" name="50" href="#50">50</a>  
+<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> com.google.common.annotations.VisibleForTesting;
+<a class="jxr_linenumber" name="52" href="#52">52</a>  
+<a class="jxr_linenumber" name="53" href="#53">53</a>  <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="54" href="#54">54</a>  <em class="jxr_javadoccomment"> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream</em>
+<a class="jxr_linenumber" name="55" href="#55">55</a>  <em class="jxr_javadoccomment"> * into List&amp;lt;KeyValue&amp;gt; for a single row.</em>
+<a class="jxr_linenumber" name="56" href="#56">56</a>  <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="57" href="#57">57</a>  @InterfaceAudience.Private
+<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html">NonReversedNonLazyKeyValueScanner</a>
+<a class="jxr_linenumber" name="59" href="#59">59</a>      <strong class="jxr_keyword">implements</strong> KeyValueScanner, InternalScanner, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> {
+<a class="jxr_linenumber" name="60" href="#60">60</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(StoreScanner.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="61" href="#61">61</a>    <em class="jxr_comment">// In unit tests, the store could be null</em>
+<a class="jxr_linenumber" name="62" href="#62">62</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store;
+<a class="jxr_linenumber" name="63" href="#63">63</a>    <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher;
+<a class="jxr_linenumber" name="64" href="#64">64</a>    <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html">KeyValueHeap</a> heap;
+<a class="jxr_linenumber" name="65" href="#65">65</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> cacheBlocks;
+<a class="jxr_linenumber" name="66" href="#66">66</a>  
+<a class="jxr_linenumber" name="67" href="#67">67</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> countPerRow = 0;
+<a class="jxr_linenumber" name="68" href="#68">68</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> storeLimit = -1;
+<a class="jxr_linenumber" name="69" href="#69">69</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> storeOffset = 0;
+<a class="jxr_linenumber" name="70" href="#70">70</a>  
+<a class="jxr_linenumber" name="71" href="#71">71</a>    <em class="jxr_comment">// Used to indicate that the scanner has closed (see HBASE-1107)</em>
+<a class="jxr_linenumber" name="72" href="#72">72</a>    <em class="jxr_comment">// Doesnt need to be volatile because it's always accessed via synchronized methods</em>
+<a class="jxr_linenumber" name="73" href="#73">73</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> closing = false;
+<a class="jxr_linenumber" name="74" href="#74">74</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> get;
+<a class="jxr_linenumber" name="75" href="#75">75</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> explicitColumnQuery;
+<a class="jxr_linenumber" name="76" href="#76">76</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> useRowColBloom;
+<a class="jxr_linenumber" name="77" href="#77">77</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="78" href="#78">78</a>  <em class="jxr_javadoccomment">   * A flag that enables StoreFileScanner parallel-seeking</em>
+<a class="jxr_linenumber" name="79" href="#79">79</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="80" href="#80">80</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> parallelSeekEnabled = false;
+<a class="jxr_linenumber" name="81" href="#81">81</a>    <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html">ExecutorService</a> executor;
+<a class="jxr_linenumber" name="82" href="#82">82</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan;
+<a class="jxr_linenumber" name="83" href="#83">83</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns;
+<a class="jxr_linenumber" name="84" href="#84">84</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> oldestUnexpiredTS;
+<a class="jxr_linenumber" name="85" href="#85">85</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> now;
+<a class="jxr_linenumber" name="86" href="#86">86</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> minVersions;
+<a class="jxr_linenumber" name="87" href="#87">87</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> maxRowSize;
+<a class="jxr_linenumber" name="88" href="#88">88</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> cellsPerHeartbeatCheck;
+<a class="jxr_linenumber" name="89" href="#89">89</a>  
+<a class="jxr_linenumber" name="90" href="#90">90</a>    <em class="jxr_comment">// Collects all the KVHeap that are eagerly getting closed during the</em>
+<a class="jxr_linenumber" name="91" href="#91">91</a>    <em class="jxr_comment">// course of a scan</em>
+<a class="jxr_linenumber" name="92" href="#92">92</a>    <strong class="jxr_keyword">protected</strong> Set&lt;KeyValueHeap&gt; heapsForDelayedClose = <strong class="jxr_keyword">new</strong> HashSet&lt;KeyValueHeap&gt;();
+<a class="jxr_linenumber" name="93" href="#93">93</a>  
+<a class="jxr_linenumber" name="94" href="#94">94</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="95" href="#95">95</a>  <em class="jxr_javadoccomment">   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not</em>
+<a class="jxr_linenumber" name="96" href="#96">96</a>  <em class="jxr_javadoccomment">   * KVs skipped via seeking to next row/column. TODO: estimate them?</em>
+<a class="jxr_linenumber" name="97" href="#97">97</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="98" href="#98">98</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> kvsScanned = 0;
+<a class="jxr_linenumber" name="99" href="#99">99</a>    <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> prevCell = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="100" href="#100">100</a> 
+<a class="jxr_linenumber" name="101" href="#101">101</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> We don't ever expect to change this, the constant is just for clarity. */</em>
+<a class="jxr_linenumber" name="102" href="#102">102</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> LAZY_SEEK_ENABLED_BY_DEFAULT = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="103" href="#103">103</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String STORESCANNER_PARALLEL_SEEK_ENABLE =
+<a class="jxr_linenumber" name="104" href="#104">104</a>       <span class="jxr_string">"hbase.storescanner.parallel.seek.enable"</span>;
+<a class="jxr_linenumber" name="105" href="#105">105</a> 
+<a class="jxr_linenumber" name="106" href="#106">106</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Used during unit testing to ensure that lazy seek does save seek ops */</em>
+<a class="jxr_linenumber" name="107" href="#107">107</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> lazySeekEnabledGlobally =
+<a class="jxr_linenumber" name="108" href="#108">108</a>       LAZY_SEEK_ENABLED_BY_DEFAULT;
+<a class="jxr_linenumber" name="109" href="#109">109</a> 
+<a class="jxr_linenumber" name="110" href="#110">110</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="111" href="#111">111</a> <em class="jxr_javadoccomment">   * The number of cells scanned in between timeout checks. Specifying a larger value means that</em>
+<a class="jxr_linenumber" name="112" href="#112">112</a> <em class="jxr_javadoccomment">   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent</em>
+<a class="jxr_linenumber" name="113" href="#113">113</a> <em class="jxr_javadoccomment">   * timeout checks.</em>
+<a class="jxr_linenumber" name="114" href="#114">114</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="115" href="#115">115</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =
+<a class="jxr_linenumber" name="116" href="#116">116</a>       <span class="jxr_string">"hbase.cells.scanned.per.heartbeat.check"</span>;
+<a class="jxr_linenumber" name="117" href="#117">117</a> 
+<a class="jxr_linenumber" name="118" href="#118">118</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="119" href="#119">119</a> <em class="jxr_javadoccomment">   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.</em>
+<a class="jxr_linenumber" name="120" href="#120">120</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="121" href="#121">121</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;
+<a class="jxr_linenumber" name="122" href="#122">122</a> 
+<a class="jxr_linenumber" name="123" href="#123">123</a>   <em class="jxr_comment">// if heap == null and lastTop != null, you need to reseek given the key below</em>
+<a class="jxr_linenumber" name="124" href="#124">124</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> lastTop = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="125" href="#125">125</a> 
+<a class="jxr_linenumber" name="126" href="#126">126</a>   <em class="jxr_comment">// A flag whether use pread for scan</em>
+<a class="jxr_linenumber" name="127" href="#127">127</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> scanUsePread = false;
+<a class="jxr_linenumber" name="128" href="#128">128</a>   <em class="jxr_comment">// Indicates whether there was flush during the course of the scan</em>
+<a class="jxr_linenumber" name="129" href="#129">129</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">volatile</strong> <strong class="jxr_keyword">boolean</strong> flushed = false;
+<a class="jxr_linenumber" name="130" href="#130">130</a>   <em class="jxr_comment">// generally we get one file from a flush</em>
+<a class="jxr_linenumber" name="131" href="#131">131</a>   <strong class="jxr_keyword">protected</strong> List&lt;StoreFile&gt; flushedStoreFiles = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;(1);
+<a class="jxr_linenumber" name="132" href="#132">132</a>   <em class="jxr_comment">// The current list of scanners</em>
+<a class="jxr_linenumber" name="133" href="#133">133</a>   <strong class="jxr_keyword">protected</strong> List&lt;KeyValueScanner&gt; currentScanners = <strong class="jxr_keyword">new</strong> ArrayList&lt;KeyValueScanner&gt;();
+<a class="jxr_linenumber" name="134" href="#134">134</a>   <em class="jxr_comment">// flush update lock</em>
+<a class="jxr_linenumber" name="135" href="#135">135</a>   <strong class="jxr_keyword">private</strong> ReentrantLock flushLock = <strong class="jxr_keyword">new</strong> ReentrantLock();
+<a class="jxr_linenumber" name="136" href="#136">136</a>   
+<a class="jxr_linenumber" name="137" href="#137">137</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> readPt;
 <a class="jxr_linenumber" name="138" href="#138">138</a> 
-<a class="jxr_linenumber" name="139" href="#139">139</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> An internal constructor. */</em>
-<a class="jxr_linenumber" name="140" href="#140">140</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo,
-<a class="jxr_linenumber" name="141" href="#141">141</a>       <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns, <strong class="jxr_keyword">long</strong> readPt, <strong class="jxr_keyword">boolean</strong> cacheBlocks) {
-<a class="jxr_linenumber" name="142" href="#142">142</a>     <strong class="jxr_keyword">this</strong>.readPt = readPt;
-<a class="jxr_linenumber" name="143" href="#143">143</a>     <strong class="jxr_keyword">this</strong>.store = store;
-<a class="jxr_linenumber" name="144" href="#144">144</a>     <strong class="jxr_keyword">this</strong>.cacheBlocks = cacheBlocks;
-<a class="jxr_linenumber" name="145" href="#145">145</a>     get = scan.isGetScan();
-<a class="jxr_linenumber" name="146" href="#146">146</a>     <strong class="jxr_keyword">int</strong> numCol = columns == <strong class="jxr_keyword">null</strong> ? 0 : columns.size();
-<a class="jxr_linenumber" name="147" href="#147">147</a>     explicitColumnQuery = numCol &gt; 0;
-<a class="jxr_linenumber" name="148" href="#148">148</a>     <strong class="jxr_keyword">this</strong>.scan = scan;
-<a class="jxr_linenumber" name="149" href="#149">149</a>     <strong class="jxr_keyword">this</strong>.columns = columns;
-<a class="jxr_linenumber" name="150" href="#150">150</a>     <strong class="jxr_keyword">this</strong>.now = EnvironmentEdgeManager.currentTime();
-<a class="jxr_linenumber" name="151" href="#151">151</a>     <strong class="jxr_keyword">this</strong>.oldestUnexpiredTS = now - scanInfo.getTtl();
-<a class="jxr_linenumber" name="152" href="#152">152</a>     <strong class="jxr_keyword">this</strong>.minVersions = scanInfo.getMinVersions();
-<a class="jxr_linenumber" name="153" href="#153">153</a> 
-<a class="jxr_linenumber" name="154" href="#154">154</a>      <em class="jxr_comment">// We look up row-column Bloom filters for multi-column queries as part of</em>
-<a class="jxr_linenumber" name="155" href="#155">155</a>      <em class="jxr_comment">// the seek operation. However, we also look the row-column Bloom filter</em>
-<a class="jxr_linenumber" name="156" href="#156">156</a>      <em class="jxr_comment">// for multi-row (non-"get") scans because this is not done in</em>
-<a class="jxr_linenumber" name="157" href="#157">157</a>      <em class="jxr_comment">// StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).</em>
-<a class="jxr_linenumber" name="158" href="#158">158</a>      <strong class="jxr_keyword">this</strong>.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);
-<a class="jxr_linenumber" name="159" href="#159">159</a> 
-<a class="jxr_linenumber" name="160" href="#160">160</a>      <strong class="jxr_keyword">this</strong>.maxRowSize = scanInfo.getTableMaxRowSize();
-<a class="jxr_linenumber" name="161" href="#161">161</a>      <strong class="jxr_keyword">this</strong>.scanUsePread = scan.isSmall()? <strong class="jxr_keyword">true</strong>: scanInfo.isUsePread();
-<a class="jxr_linenumber" name="162" href="#162">162</a>      <strong class="jxr_keyword">this</strong>.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();
-<a class="jxr_linenumber" name="163" href="#163">163</a>      <em class="jxr_comment">// Parallel seeking is on if the config allows and more there is more than one store file.</em>
-<a class="jxr_linenumber" name="164" href="#164">164</a>      <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.store != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.store.getStorefilesCount() &gt; 1) {
-<a class="jxr_linenumber" name="165" href="#165">165</a>        <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html">RegionServerServices</a> rsService = ((HStore)store).getHRegion().getRegionServerServices();
-<a class="jxr_linenumber" name="166" href="#166">166</a>        <strong class="jxr_keyword">if</strong> (rsService != <strong class="jxr_keyword">null</strong> &amp;&amp; scanInfo.isParallelSeekEnabled()) {
-<a class="jxr_linenumber" name="167" href="#167">167</a>          <strong class="jxr_keyword">this</strong>.parallelSeekEnabled = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="168" href="#168">168</a>          <strong class="jxr_keyword">this</strong>.executor = rsService.getExecutorService();
-<a class="jxr_linenumber" name="169" href="#169">169</a>        }
-<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> 
-<a class="jxr_linenumber" name="173" href="#173">173</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="174" href="#174">174</a> <em class="jxr_javadoccomment">   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we</em>
-<a class="jxr_linenumber" name="175" href="#175">175</a> <em class="jxr_javadoccomment">   * are not in a compaction.</em>
-<a class="jxr_linenumber" name="176" href="#176">176</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="177" href="#177">177</a> <em class="jxr_javadoccomment">   * @param store who we scan</em>
-<a class="jxr_linenumber" name="178" href="#178">178</a> <em class="jxr_javadoccomment">   * @param scan the spec</em>
-<a class="jxr_linenumber" name="179" href="#179">179</a> <em class="jxr_javadoccomment">   * @param columns which columns we are scanning</em>
-<a class="jxr_linenumber" name="180" href="#180">180</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="181" href="#181">181</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="182" href="#182">182</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
-<a class="jxr_linenumber" name="183" href="#183">183</a>       <strong class="jxr_keyword">long</strong> readPt)
-<a class="jxr_linenumber" name="184" href="#184">184</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="185" href="#185">185</a>     <strong class="jxr_keyword">this</strong>(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks());
-<a class="jxr_linenumber" name="186" href="#186">186</a>     <strong class="jxr_keyword">if</strong> (columns != <strong class="jxr_keyword">null</strong> &amp;&amp; scan.isRaw()) {
-<a class="jxr_linenumber" name="187" href="#187">187</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html">DoNotRetryIOException</a>(<span class="jxr_string">"Cannot specify any column for a raw scan"</span>);
-<a class="jxr_linenumber" name="188" href="#188">188</a>     }
-<a class="jxr_linenumber" name="189" href="#189">189</a>     matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, columns,
-<a class="jxr_linenumber" name="190" href="#190">190</a>         ScanType.USER_SCAN, Long.MAX_VALUE, HConstants.LATEST_TIMESTAMP,
-<a class="jxr_linenumber" name="191" href="#191">191</a>         oldestUnexpiredTS, now, store.getCoprocessorHost());
-<a class="jxr_linenumber" name="192" href="#192">192</a> 
-<a class="jxr_linenumber" name="193" href="#193">193</a>     <strong class="jxr_keyword">this</strong>.store.addChangedReaderObserver(<strong class="jxr_keyword">this</strong>);
-<a class="jxr_linenumber" name="194" href="#194">194</a> 
-<a class="jxr_linenumber" name="195" href="#195">195</a>     <em class="jxr_comment">// Pass columns to try to filter out unnecessary StoreFiles.</em>
-<a class="jxr_linenumber" name="196" href="#196">196</a>     List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();
-<a class="jxr_linenumber" name="197" href="#197">197</a> 
-<a class="jxr_linenumber" name="198" href="#198">198</a>     <em class="jxr_comment">// Seek all scanners to the start of the Row (or if the exact matching row</em>
-<a class="jxr_linenumber" name="199" href="#199">199</a>     <em class="jxr_comment">// key does not exist, then to the start of the next matching Row).</em>
-<a class="jxr_linenumber" name="200" href="#200">200</a>     <em class="jxr_comment">// Always check bloom filter to optimize the top row seek for delete</em>
-<a class="jxr_linenumber" name="201" href="#201">201</a>     <em class="jxr_comment">// family marker.</em>
-<a class="jxr_linenumber" name="202" href="#202">202</a>     seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery
-<a class="jxr_linenumber" name="203" href="#203">203</a>         &amp;&amp; lazySeekEnabledGlobally, parallelSeekEnabled);
+<a class="jxr_linenumber" name="139" href="#139">139</a>   <em class="jxr_comment">// used by the injection framework to test race between StoreScanner construction and compaction</em>
+<a class="jxr_linenumber" name="140" href="#140">140</a>   enum <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScannerCompactionRace</a> {
+<a class="jxr_linenumber" name="141" href="#141">141</a>     BEFORE_SEEK,
+<a class="jxr_linenumber" name="142" href="#142">142</a>     AFTER_SEEK,
+<a class="jxr_linenumber" name="143" href="#143">143</a>     COMPACT_COMPLETE
+<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><em class="jxr_javadoccomment"> An internal constructor. */</em>
+<a class="jxr_linenumber" name="147" href="#147">147</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo,
+<a class="jxr_linenumber" name="148" href="#148">148</a>       <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns, <strong class="jxr_keyword">long</strong> readPt, <strong class="jxr_keyword">boolean</strong> cacheBlocks) {
+<a class="jxr_linenumber" name="149" href="#149">149</a>     <strong class="jxr_keyword">this</strong>.readPt = readPt;
+<a class="jxr_linenumber" name="150" href="#150">150</a>     <strong class="jxr_keyword">this</strong>.store = store;
+<a class="jxr_linenumber" name="151" href="#151">151</a>     <strong class="jxr_keyword">this</strong>.cacheBlocks = cacheBlocks;
+<a class="jxr_linenumber" name="152" href="#152">152</a>     get = scan.isGetScan();
+<a class="jxr_linenumber" name="153" href="#153">153</a>     <strong class="jxr_keyword">int</strong> numCol = columns == <strong class="jxr_keyword">null</strong> ? 0 : columns.size();
+<a class="jxr_linenumber" name="154" href="#154">154</a>     explicitColumnQuery = numCol &gt; 0;
+<a class="jxr_linenumber" name="155" href="#155">155</a>     <strong class="jxr_keyword">this</strong>.scan = scan;
+<a class="jxr_linenumber" name="156" href="#156">156</a>     <strong class="jxr_keyword">this</strong>.columns = columns;
+<a class="jxr_linenumber" name="157" href="#157">157</a>     <strong class="jxr_keyword">this</strong>.now = EnvironmentEdgeManager.currentTime();
+<a class="jxr_linenumber" name="158" href="#158">158</a>     <strong class="jxr_keyword">this</strong>.oldestUnexpiredTS = now - scanInfo.getTtl();
+<a class="jxr_linenumber" name="159" href="#159">159</a>     <strong class="jxr_keyword">this</strong>.minVersions = scanInfo.getMinVersions();
+<a class="jxr_linenumber" name="160" href="#160">160</a> 
+<a class="jxr_linenumber" name="161" href="#161">161</a>      <em class="jxr_comment">// We look up row-column Bloom filters for multi-column queries as part of</em>
+<a class="jxr_linenumber" name="162" href="#162">162</a>      <em class="jxr_comment">// the seek operation. However, we also look the row-column Bloom filter</em>
+<a class="jxr_linenumber" name="163" href="#163">163</a>      <em class="jxr_comment">// for multi-row (non-"get") scans because this is not done in</em>
+<a class="jxr_linenumber" name="164" href="#164">164</a>      <em class="jxr_comment">// StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).</em>
+<a class="jxr_linenumber" name="165" href="#165">165</a>      <strong class="jxr_keyword">this</strong>.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);
+<a class="jxr_linenumber" name="166" href="#166">166</a> 
+<a class="jxr_linenumber" name="167" href="#167">167</a>      <strong class="jxr_keyword">this</strong>.maxRowSize = scanInfo.getTableMaxRowSize();
+<a class="jxr_linenumber" name="168" href="#168">168</a>      <strong class="jxr_keyword">this</strong>.scanUsePread = scan.isSmall()? <strong class="jxr_keyword">true</strong>: scanInfo.isUsePread();
+<a class="jxr_linenumber" name="169" href="#169">169</a>      <strong class="jxr_keyword">this</strong>.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();
+<a class="jxr_linenumber" name="170" href="#170">170</a>      <em class="jxr_comment">// Parallel seeking is on if the config allows and more there is more than one store file.</em>
+<a class="jxr_linenumber" name="171" href="#171">171</a>      <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.store != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.store.getStorefilesCount() &gt; 1) {
+<a class="jxr_linenumber" name="172" href="#172">172</a>        <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html">RegionServerServices</a> rsService = ((HStore)store).getHRegion().getRegionServerServices();
+<a class="jxr_linenumber" name="173" href="#173">173</a>        <strong class="jxr_keyword">if</strong> (rsService != <strong class="jxr_keyword">null</strong> &amp;&amp; scanInfo.isParallelSeekEnabled()) {
+<a class="jxr_linenumber" name="174" href="#174">174</a>          <strong class="jxr_keyword">this</strong>.parallelSeekEnabled = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="175" href="#175">175</a>          <strong class="jxr_keyword">this</strong>.executor = rsService.getExecutorService();
+<a class="jxr_linenumber" name="176" href="#176">176</a>        }
+<a class="jxr_linenumber" name="177" href="#177">177</a>      }
+<a class="jxr_linenumber" name="178" href="#178">178</a>   }
+<a class="jxr_linenumber" name="179" href="#179">179</a> 
+<a class="jxr_linenumber" name="180" href="#180">180</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> addCurrentScanners(List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners) {
+<a class="jxr_linenumber" name="181" href="#181">181</a>     <strong class="jxr_keyword">this</strong>.currentScanners.addAll(scanners);
+<a class="jxr_linenumber" name="182" href="#182">182</a>   }
+<a class="jxr_linenumber" name="183" href="#183">183</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="184" href="#184">184</a> <em class="jxr_javadoccomment">   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we</em>
+<a class="jxr_linenumber" name="185" href="#185">185</a> <em class="jxr_javadoccomment">   * are not in a compaction.</em>
+<a class="jxr_linenumber" name="186" href="#186">186</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="187" href="#187">187</a> <em class="jxr_javadoccomment">   * @param store who we scan</em>
+<a class="jxr_linenumber" name="188" href="#188">188</a> <em class="jxr_javadoccomment">   * @param scan the spec</em>
+<a class="jxr_linenumber" name="189" href="#189">189</a> <em class="jxr_javadoccomment">   * @param columns which columns we are scanning</em>
+<a class="jxr_linenumber" name="190" href="#190">190</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<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>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
+<a class="jxr_linenumber" name="193" href="#193">193</a>       <strong class="jxr_keyword">long</strong> readPt)
+<a class="jxr_linenumber" name="194" href="#194">194</a>   <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="195" href="#195">195</a>     <strong class="jxr_keyword">this</strong>(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks());
+<a class="jxr_linenumber" name="196" href="#196">196</a>     <strong class="jxr_keyword">if</strong> (columns != <strong class="jxr_keyword">null</strong> &amp;&amp; scan.isRaw()) {
+<a class="jxr_linenumber" name="197" href="#197">197</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html">DoNotRetryIOException</a>(<span class="jxr_string">"Cannot specify any column for a raw scan"</span>);
+<a class="jxr_linenumber" name="198" href="#198">198</a>     }
+<a class="jxr_linenumber" name="199" href="#199">199</a>     matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, columns,
+<a class="jxr_linenumber" name="200" href="#200">200</a>         ScanType.USER_SCAN, Long.MAX_VALUE, HConstants.LATEST_TIMESTAMP,
+<a class="jxr_linenumber" name="201" href="#201">201</a>         oldestUnexpiredTS, now, store.getCoprocessorHost());
+<a class="jxr_linenumber" name="202" href="#202">202</a> 
+<a class="jxr_linenumber" name="203" href="#203">203</a>     <strong class="jxr_keyword">this</strong>.store.addChangedReaderObserver(<strong class="jxr_keyword">this</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">// set storeLimit</em>
-<a class="jxr_linenumber" name="206" href="#206">206</a>     <strong class="jxr_keyword">this</strong>.storeLimit = scan.getMaxResultsPerColumnFamily();
+<a class="jxr_linenumber" name="205" href="#205">205</a>     <em class="jxr_comment">// Pass columns to try to filter out unnecessary StoreFiles.</em>
+<a class="jxr_linenumber" name="206" href="#206">206</a>     List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();
 <a class="jxr_linenumber" name="207" href="#207">207</a> 
-<a class="jxr_linenumber" name="208" href="#208">208</a>     <em class="jxr_comment">// set rowOffset</em>
-<a class="jxr_linenumber" name="209" href="#209">209</a>     <strong class="jxr_keyword">this</strong>.storeOffset = scan.getRowOffsetPerColumnFamily();
-<a class="jxr_linenumber" name="210" href="#210">210</a> 
-<a class="jxr_linenumber" name="211" href="#211">211</a>     <em class="jxr_comment">// Combine all seeked scanners with a heap</em>
-<a class="jxr_linenumber" name="212" href="#212">212</a>     resetKVHeap(scanners, store.getComparator());
-<a class="jxr_linenumber" name="213" href="#213">213</a>   }
+<a class="jxr_linenumber" name="208" href="#208">208</a>     <em class="jxr_comment">// Seek all scanners to the start of the Row (or if the exact matching row</em>
+<a class="jxr_linenumber" name="209" href="#209">209</a>     <em class="jxr_comment">// key does not exist, then to the start of the next matching Row).</em>
+<a class="jxr_linenumber" name="210" href="#210">210</a>     <em class="jxr_comment">// Always check bloom filter to optimize the top row seek for delete</em>
+<a class="jxr_linenumber" name="211" href="#211">211</a>     <em class="jxr_comment">// family marker.</em>
+<a class="jxr_linenumber" name="212" href="#212">212</a>     seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery
+<a class="jxr_linenumber" name="213" href="#213">213</a>         &amp;&amp; lazySeekEnabledGlobally, parallelSeekEnabled);
 <a class="jxr_linenumber" name="214" href="#214">214</a> 
-<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">   * Used for compactions.&lt;p&gt;</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> <em class="jxr_javadoccomment">   * Opens a scanner across specified StoreFiles.</em>
-<a class="jxr_linenumber" name="219" href="#219">219</a> <em class="jxr_javadoccomment">   * @param store who we scan</em>
-<a class="jxr_linenumber" name="220" href="#220">220</a> <em class="jxr_javadoccomment">   * @param scan the spec</em>
-<a class="jxr_linenumber" name="221" href="#221">221</a> <em class="jxr_javadoccomment">   * @param scanners ancillary scanners</em>
-<a class="jxr_linenumber" name="222" href="#222">222</a> <em class="jxr_javadoccomment">   * @param smallestReadPoint the readPoint that we should use for tracking</em>
-<a class="jxr_linenumber" name="223" href="#223">223</a> <em class="jxr_javadoccomment">   *          versions</em>
-<a class="jxr_linenumber" name="224" href="#224">224</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="225" href="#225">225</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan,
-<a class="jxr_linenumber" name="226" href="#226">226</a>       List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType,
-<a class="jxr_linenumber" name="227" href="#227">227</a>       <strong class="jxr_keyword">long</strong> smallestReadPoint, <strong class="jxr_keyword">long</strong> earliestPutTs) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="228" href="#228">228</a>     <strong class="jxr_keyword">this</strong>(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="229" href="#229">229</a>   }
-<a class="jxr_linenumber" name="230" href="#230">230</a> 
-<a class="jxr_linenumber" name="231" href="#231">231</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="232" href="#232">232</a> <em class="jxr_javadoccomment">   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;</em>
-<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">   * Opens a scanner across specified StoreFiles.</em>
-<a class="jxr_linenumber" name="235" href="#235">235</a> <em class="jxr_javadoccomment">   * @param store who we scan</em>
-<a class="jxr_linenumber" name="236" href="#236">236</a> <em class="jxr_javadoccomment">   * @param scan the spec</em>
-<a class="jxr_linenumber" name="237" href="#237">237</a> <em class="jxr_javadoccomment">   * @param scanners ancillary scanners</em>
-<a class="jxr_linenumber" name="238" href="#238">238</a> <em class="jxr_javadoccomment">   * @param smallestReadPoint the readPoint that we should use for tracking versions</em>
-<a class="jxr_linenumber" name="239" href="#239">239</a> <em class="jxr_javadoccomment">   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.</em>
-<a class="jxr_linenumber" name="240" href="#240">240</a> <em class="jxr_javadoccomment">   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.</em>
-<a class="jxr_linenumber" name="241" href="#241">241</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="242" href="#242">242</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan,
-<a class="jxr_linenumber" name="243" href="#243">243</a>       List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners, <strong class="jxr_keyword">long</strong> smallestReadPoint, <strong class="jxr_keyword">long</strong> earliestPutTs,
-<a class="jxr_linenumber" name="244" href="#244">244</a>       byte[] dropDeletesFromRow, byte[] dropDeletesToRow) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="245" href="#245">245</a>     <strong class="jxr_keyword">this</strong>(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,
-<a class="jxr_linenumber" name="246" href="#246">246</a>         earliestPutTs, dropDeletesFromRow, dropDeletesToRow);
-<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>   <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan,
-<a class="jxr_linenumber" name="250" href="#250">250</a>       List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">long</strong> smallestReadPoint,
-<a class="jxr_linenumber" name="251" href="#251">251</a>       <strong class="jxr_keyword">long</strong> earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="252" href="#252">252</a>     <strong class="jxr_keyword">this</strong>(store, scan, scanInfo, <strong class="jxr_keyword">null</strong>,
-<a class="jxr_linenumber" name="253" href="#253">253</a>       ((<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html">HStore</a>)store).getHRegion().getReadpoint(IsolationLevel.READ_COMMITTED), false);
-<a class="jxr_linenumber" name="254" href="#254">254</a>     <strong class="jxr_keyword">if</strong> (dropDeletesFromRow == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="255" href="#255">255</a>       matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, <strong class="jxr_keyword">null</strong>, scanType, smallestReadPoint,
-<a class="jxr_linenumber" name="256" href="#256">256</a>           earliestPutTs, oldestUnexpiredTS, now, store.getCoprocessorHost());
-<a class="jxr_linenumber" name="257" href="#257">257</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="258" href="#258">258</a>       matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, <strong class="jxr_keyword">null</strong>, smallestReadPoint, earliestPutTs,
-<a class="jxr_linenumber" name="259" href="#259">259</a>           oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow, store.getCoprocessorHost());
-<a class="jxr_linenumber" name="260" href="#260">260</a>     }
-<a class="jxr_linenumber" name="261" href="#261">261</a> 
-<a class="jxr_linenumber" name="262" href="#262">262</a>     <em class="jxr_comment">// Filter the list of scanners using Bloom filters, time range, TTL, etc.</em>
-<a class="jxr_linenumber" name="263" href="#263">263</a>     scanners = selectScannersFrom(scanners);
-<a class="jxr_linenumber" name="264" href="#264">264</a> 
-<a class="jxr_linenumber" name="265" href="#265">265</a>     <em class="jxr_comment">// Seek all scanners to the initial key</em>
-<a class="jxr_linenumber" name="266" href="#266">266</a>     seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);
-<a class="jxr_linenumber" name="267" href="#267">267</a> 
-<a class="jxr_linenumber" name="268" href="#268">268</a>     <em class="jxr_comment">// Combine all seeked scanners with a heap</em>
-<a class="jxr_linenumber" name="269" href="#269">269</a>     resetKVHeap(scanners, store.getComparator());
-<a class="jxr_linenumber" name="270" href="#270">270</a>   }
+<a class="jxr_linenumber" name="215" href="#215">215</a>     <em class="jxr_comment">// set storeLimit</em>
+<a class="jxr_linenumber" name="216" href="#216">216</a>     <strong class="jxr_keyword">this</strong>.storeLimit = scan.getMaxResultsPerColumnFamily();
+<a class="jxr_linenumber" name="217" href="#217">217</a> 
+<a class="jxr_linenumber" name="218" href="#218">218</a>     <em class="jxr_comment">// set rowOffset</em>
+<a class="jxr_linenumber" name="219" href="#219">219</a>     <strong class="jxr_keyword">this</strong>.storeOffset = scan.getRowOffsetPerColumnFamily();
+<a class="jxr_linenumber" name="220" href="#220">220</a>     addCurrentScanners(scanners);
+<a class="jxr_linenumber" name="221" href="#221">221</a>     <em class="jxr_comment">// Combine all seeked scanners with a heap</em>
+<a class="jxr_linenumber" name="222" href="#222">222</a>     resetKVHeap(scanners, store.getComparator());
+<a class="jxr_linenumber" name="223" href="#223">223</a>   }
+<a class="jxr_linenumber" name="224" href="#224">224</a> 
+<a class="jxr_linenumber" name="225" href="#225">225</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="226" href="#226">226</a> <em class="jxr_javadoccomment">   * Used for compactions.&lt;p&gt;</em>
+<a class="jxr_linenumber" name="227" href="#227">227</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="228" href="#228">228</a> <em class="jxr_javadoccomment">   * Opens a scanner across specified StoreFiles.</em>
+<a class="jxr_linenumber" name="229" href="#229">229</a> <em class="jxr_javadoccomment">   * @param store who we scan</em>
+<a class="jxr_linenumber" name="230" href="#230">230</a> <em class="jxr_javadoccomment">   * @param scan the spec</em>
+<a class="jxr_linenumber" name="231" href="#231">231</a> <em class="jxr_javadoccomment">   * @param scanners ancillary scanners</em>
+<a class="jxr_linenumber" name="232" href="#232">232</a> <em class="jxr_javadoccomment">   * @param smallestReadPoint the readPoint that we should use for tracking</em>
+<a class="jxr_linenumber" name="233" href="#233">233</a> <em class="jxr_javadoccomment">   *          versions</em>
+<a class="jxr_linenumber" name="234" href="#234">234</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="235" href="#235">235</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan,
+<a class="jxr_linenumber" name="236" href="#236">236</a>       List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType,
+<a class="jxr_linenumber" name="237" href="#237">237</a>       <strong class="jxr_keyword">long</strong> smallestReadPoint, <strong class="jxr_keyword">long</strong> earliestPutTs) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="238" href="#238">238</a>     <strong class="jxr_keyword">this</strong>(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="239" href="#239">239</a>   }
+<a class="jxr_linenumber" name="240" href="#240">240</a> 
+<a class="jxr_linenumber" name="241" href="#241">241</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="242" href="#242">242</a> <em class="jxr_javadoccomment">   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;</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> <em class="jxr_javadoccomment">   * Opens a scanner across specified StoreFiles.</em>
+<a class="jxr_linenumber" name="245" href="#245">245</a> <em class="jxr_javadoccomment">   * @param store who we scan</em>
+<a class="jxr_linenumber" name="246" href="#246">246</a> <em class="jxr_javadoccomment">   * @param scan the spec</em>
+<a class="jxr_linenumber" name="247" href="#247">247</a> <em class="jxr_javadoccomment">   * @param scanners ancillary scanners</em>
+<a class="jxr_linenumber" name="248" href="#248">248</a> <em class="jxr_javadoccomment">   * @param smallestReadPoint the readPoint that we should use for tracking versions</em>
+<a class="jxr_linenumber" name="249" href="#249">249</a> <em class="jxr_javadoccomment">   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.</em>
+<a class="jxr_linenumber" name="250" href="#250">250</a> <em class="jxr_javadoccomment">   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.</em>
+<a class="jxr_linenumber" name="251" href="#251">251</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="252" href="#252">252</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan,
+<a class="jxr_linenumber" name="253" href="#253">253</a>       List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners, <strong class="jxr_keyword">long</strong> smallestReadPoint, <strong class="jxr_keyword">long</strong> earliestPutTs,
+<a class="jxr_linenumber" name="254" href="#254">254</a>       byte[] dropDeletesFromRow, byte[] dropDeletesToRow) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="255" href="#255">255</a>     <strong class="jxr_keyword">this</strong>(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,
+<a class="jxr_linenumber" name="256" href="#256">256</a>         earliestPutTs, dropDeletesFromRow, dropDeletesToRow);
+<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>   <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> store, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo, <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan,
+<a class="jxr_linenumber" name="260" href="#260">260</a>       List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">long</strong> smallestReadPoint,
+<a class="jxr_linenumber" name="261" href="#261">261</a>       <strong class="jxr_keyword">long</strong> earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="262" href="#262">262</a>     <strong class="jxr_keyword">this</strong>(store, scan, scanInfo, <strong class="jxr_keyword">null</strong>,
+<a class="jxr_linenumber" name="263" href="#263">263</a>       ((<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html">HStore</a>)store).getHRegion().getReadpoint(IsolationLevel.READ_COMMITTED), false);
+<a class="jxr_linenumber" name="264" href="#264">264</a>     <strong class="jxr_keyword">if</strong> (dropDeletesFromRow == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="265" href="#265">265</a>       matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, <strong class="jxr_keyword">null</strong>, scanType, smallestReadPoint,
+<a class="jxr_linenumber" name="266" href="#266">266</a>           earliestPutTs, oldestUnexpiredTS, now, store.getCoprocessorHost());
+<a class="jxr_linenumber" name="267" href="#267">267</a>     } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="268" href="#268">268</a>       matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, <strong class="jxr_keyword">null</strong>, smallestReadPoint, earliestPutTs,
+<a class="jxr_linenumber" name="269" href="#269">269</a>           oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow, store.getCoprocessorHost());
+<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>   @VisibleForTesting
-<a class="jxr_linenumber" name="273" href="#273">273</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo,
-<a class="jxr_linenumber" name="274" href="#274">274</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
-<a class="jxr_linenumber" name="275" href="#275">275</a>       <strong class="jxr_keyword">final</strong> List&lt;KeyValueScanner&gt; scanners) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="276" href="#276">276</a>     <strong class="jxr_keyword">this</strong>(scan, scanInfo, scanType, columns, scanners,
-<a class="jxr_linenumber" name="277" href="#277">277</a>         HConstants.LATEST_TIMESTAMP,
-<a class="jxr_linenumber" name="278" href="#278">278</a>         <em class="jxr_comment">// 0 is passed as readpoint because the test bypasses Store</em>
-<a class="jxr_linenumber" name="279" href="#279">279</a>         0);
+<a class="jxr_linenumber" name="272" href="#272">272</a>     <em class="jxr_comment">// Filter the list of scanners using Bloom filters, time range, TTL, etc.</em>
+<a class="jxr_linenumber" name="273" href="#273">273</a>     scanners = selectScannersFrom(scanners);
+<a class="jxr_linenumber" name="274" href="#274">274</a> 
+<a class="jxr_linenumber" name="275" href="#275">275</a>     <em class="jxr_comment">// Seek all scanners to the initial key</em>
+<a class="jxr_linenumber" name="276" href="#276">276</a>     seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);
+<a class="jxr_linenumber" name="277" href="#277">277</a>     addCurrentScanners(scanners);
+<a class="jxr_linenumber" name="278" href="#278">278</a>     <em class="jxr_comment">// Combine all seeked scanners with a heap</em>
+<a class="jxr_linenumber" name="279" href="#279">279</a>     resetKVHeap(scanners, store.getComparator());
 <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>   @VisibleForTesting
 <a class="jxr_linenumber" name="283" href="#283">283</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo,
-<a class="jxr_linenumber" name="284" href="#284">284</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
-<a class="jxr_linenumber" name="285" href="#285">285</a>     <strong class="jxr_keyword">final</strong> List&lt;KeyValueScanner&gt; scanners, <strong class="jxr_keyword">long</strong> earliestPutTs)
-<a class="jxr_linenumber" name="286" href="#286">286</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="287" href="#287">287</a>     <strong class="jxr_keyword">this</strong>(scan, scanInfo, scanType, columns, scanners, earliestPutTs,
-<a class="jxr_linenumber" name="288" href="#288">288</a>       <em class="jxr_comment">// 0 is passed as readpoint because the test bypasses Store</em>
-<a class="jxr_linenumber" name="289" href="#289">289</a>       0);
+<a class="jxr_linenumber" name="284" href="#284">284</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
+<a class="jxr_linenumber" name="285" href="#285">285</a>       <strong class="jxr_keyword">final</strong> List&lt;KeyValueScanner&gt; scanners) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="286" href="#286">286</a>     <strong class="jxr_keyword">this</strong>(scan, scanInfo, scanType, columns, scanners,
+<a class="jxr_linenumber" name="287" href="#287">287</a>         HConstants.LATEST_TIMESTAMP,
+<a class="jxr_linenumber" name="288" href="#288">288</a>         <em class="jxr_comment">// 0 is passed as readpoint because the test bypasses Store</em>
+<a class="jxr_linenumber" name="289" href="#289">289</a>         0);
 <a class="jxr_linenumber" name="290" href="#290">290</a>   }
 <a class="jxr_linenumber" name="291" href="#291">291</a> 
-<a class="jxr_linenumber" name="292" href="#292">292</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo,
-<a class="jxr_linenumber" name="293" href="#293">293</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
-<a class="jxr_linenumber" name="294" href="#294">294</a>       <strong class="jxr_keyword">final</strong> List&lt;KeyValueScanner&gt; scanners, <strong class="jxr_keyword">long</strong> earliestPutTs, <strong class="jxr_keyword">long</strong> readPt)
-<a class="jxr_linenumber" name="295" href="#295">295</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="296" href="#296">296</a>     <strong class="jxr_keyword">this</strong>(<strong class="jxr_keyword">null</strong>, scan, scanInfo, columns, readPt, scan.getCacheBlocks());
-<a class="jxr_linenumber" name="297" href="#297">297</a>     <strong class="jxr_keyword">this</strong>.matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, columns, scanType,
-<a class="jxr_linenumber" name="298" href="#298">298</a>         Long.MAX_VALUE, earliestPutTs, oldestUnexpiredTS, now, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="299" href="#299">299</a> 
-<a class="jxr_linenumber" name="300" href="#300">300</a>     <em class="jxr_comment">// In unit tests, the store could be null</em>
-<a class="jxr_linenumber" name="301" href="#301">301</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.store != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="302" href="#302">302</a>       <strong class="jxr_keyword">this</strong>.store.addChangedReaderObserver(<strong class="jxr_keyword">this</strong>);
-<a class="jxr_linenumber" name="303" href="#303">303</a>     }
-<a class="jxr_linenumber" name="304" href="#304">304</a>     <em class="jxr_comment">// Seek all scanners to the initial key</em>
-<a class="jxr_linenumber" name="305" href="#305">305</a>     seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);
-<a class="jxr_linenumber" name="306" href="#306">306</a>     resetKVHeap(scanners, scanInfo.getComparator());
-<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">   * Get a filtered list of scanners. Assumes we are not in a compaction.</em>
-<a class="jxr_linenumber" name="311" href="#311">311</a> <em class="jxr_javadoccomment">   * @return list of scanners to seek</em>
-<a class="jxr_linenumber" name="312" href="#312">312</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="313" href="#313">313</a>   <strong class="jxr_keyword">protected</strong> List&lt;KeyValueScanner&gt; getScannersNoCompaction() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="314" href="#314">314</a>     <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isCompaction = false;
-<a class="jxr_linenumber" name="315" href="#315">315</a>     <strong class="jxr_keyword">boolean</strong> usePread = get || scanUsePread;
-<a class="jxr_linenumber" name="316" href="#316">316</a>     <strong class="jxr_keyword">return</strong> selectScannersFrom(store.getScanners(cacheBlocks, get, usePread,
-<a class="jxr_linenumber" name="317" href="#317">317</a>         isCompaction, matcher, scan.getStartRow(), scan.getStopRow(), <strong class="jxr_keyword">this</strong>.readPt));
+<a class="jxr_linenumber" name="292" href="#292">292</a>   @VisibleForTesting
+<a class="jxr_linenumber" name="293" href="#293">293</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo,
+<a class="jxr_linenumber" name="294" href="#294">294</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
+<a class="jxr_linenumber" name="295" href="#295">295</a>     <strong class="jxr_keyword">final</strong> List&lt;KeyValueScanner&gt; scanners, <strong class="jxr_keyword">long</strong> earliestPutTs)
+<a class="jxr_linenumber" name="296" href="#296">296</a>         <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="297" href="#297">297</a>     <strong class="jxr_keyword">this</strong>(scan, scanInfo, scanType, columns, scanners, earliestPutTs,
+<a class="jxr_linenumber" name="298" href="#298">298</a>       <em class="jxr_comment">// 0 is passed as readpoint because the test bypasses Store</em>
+<a class="jxr_linenumber" name="299" href="#299">299</a>       0);
+<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>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html">StoreScanner</a>(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html">Scan</a> scan, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> scanInfo,
+<a class="jxr_linenumber" name="303" href="#303">303</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html">ScanType</a> scanType, <strong class="jxr_keyword">final</strong> NavigableSet&lt;byte[]&gt; columns,
+<a class="jxr_linenumber" name="304" href="#304">304</a>       <strong class="jxr_keyword">final</strong> List&lt;KeyValueScanner&gt; scanners, <strong class="jxr_keyword">long</strong> earliestPutTs, <strong class="jxr_keyword">long</strong> readPt)
+<a class="jxr_linenumber" name="305" href="#305">305</a>   <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="306" href="#306">306</a>     <strong class="jxr_keyword">this</strong>(<strong class="jxr_keyword">null</strong>, scan, scanInfo, columns, readPt, scan.getCacheBlocks());
+<a class="jxr_linenumber" name="307" href="#307">307</a>     <strong class="jxr_keyword">this</strong>.matcher = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a>(scan, scanInfo, columns, scanType,
+<a class="jxr_linenumber" name="308" href="#308">308</a>         Long.MAX_VALUE, earliestPutTs, oldestUnexpiredTS, now, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="309" href="#309">309</a> 
+<a class="jxr_linenumber" name="310" href="#310">310</a>     <em class="jxr_comment">// In unit tests, the store could be null</em>
+<a class="jxr_linenumber" name="311" href="#311">311</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.store != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="312" href="#312">312</a>       <strong class="jxr_keyword">this</strong>.store.addChangedReaderObserver(<strong class="jxr_keyword">this</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">// Seek all scanners to the initial key</em>
+<a class="jxr_linenumber" name="315" href="#315">315</a>     seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);
+<a class="jxr_linenumber" name="316" href="#316">316</a>     addCurrentScanners(scanners);
+<a class="jxr_linenumber" name="317" href="#317">317</a>     resetKVHeap(scanners, scanInfo.getComparator());
 <a class="jxr_linenumber" name="318" href="#318">318</a>   }
 <a class="jxr_linenumber" name="319" href="#319">319</a> 
 <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> <em class="jxr_javadoccomment">   * Seek the specified scanners with the given key</em>
-<a class="jxr_linenumber" name="322" href="#322">322</a> <em class="jxr_javadoccomment">   * @param scanners</em>
-<a class="jxr_linenumber" name="323" href="#323">323</a> <em class="jxr_javadoccomment">   * @param seekKey</em>
-<a class="jxr_linenumber" name="324" href="#324">324</a> <em class="jxr_javadoccomment">   * @param isLazy true if using lazy seek</em>
-<a class="jxr_linenumber" name="325" href="#325">325</a> <em class="jxr_javadoccomment">   * @param isParallelSeek true if using parallel seek</em>
-<a class="jxr_linenumber" name="326" href="#326">326</a> <em class="jxr_javadoccomment">   * @throws IOException</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>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> seekScanners(List&lt;? <strong class="jxr_keyword">extends</strong> KeyValueScanner&gt; scanners,
-<a class="jxr_linenumber" name="329" href="#329">329</a>       <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> seekKey, <strong class="jxr_keyword">boolean</strong> isLazy, <strong class="jxr_keyword">boolean</strong> isParallelSeek)
-<a 

<TRUNCATED>

[18/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
index 9640466..93346d6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
@@ -929,524 +929,656 @@
 <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>  @Test<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    HTable table = null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    try {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      latch = new CountDownLatch(1);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      exceptionLatch = new CountDownLatch(1);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      // Create KV that will give you two blocks<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      // Create a table with block size as 1024<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      // get the block cache and region<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      RegionLocator locator = table.getRegionLocator();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionName);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      Store store = region.getStores().iterator().next();<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      cacheConf.setEvictOnClose(true);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      // insert data. 2 Rows are added<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      insertData(table);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      // flush the data<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      System.out.println("Flushing cache");<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      // Should create one Hfile with 2 blocks<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      region.flush(true);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      // The block would have been decremented for the scan case as it was<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      // wrapped<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // before even the postNext hook gets executed.<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // giving some time for the block to be decremented<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      Thread.sleep(100);<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      boolean usedBlocksFound = false;<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      int refCount = 0;<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      while (iterator.hasNext()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        CachedBlock next = iterator.next();<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (cache instanceof BucketCache) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          continue;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        if (refCount != 0) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // Blocks will be with count 3<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          usedBlocksFound = true;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      assertTrue(usedBlocksFound);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      exceptionLatch.countDown();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // countdown the latch<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      for (ScanThread thread : scanThreads) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        thread.join();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      iterator = cache.iterator();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      usedBlocksFound = false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      refCount = 0;<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      while (iterator.hasNext()) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        CachedBlock next = iterator.next();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        if (cache instanceof BucketCache) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        } else {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          continue;<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        if (refCount != 0) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>          // Blocks will be with count 3<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          usedBlocksFound = true;<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      }<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      assertTrue(usedBlocksFound);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Thread.sleep(5100);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      iterator = cache.iterator();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      refCount = 0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      while (iterator.hasNext()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        CachedBlock next = iterator.next();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (cache instanceof BucketCache) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>          continue;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        assertEquals(0, refCount);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    } finally {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      if (table != null) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        table.close();<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    int refCount;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    while (iterator.hasNext()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      CachedBlock next = iterator.next();<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (cache instanceof BucketCache) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      } else {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        continue;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      assertEquals(0, refCount);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  private void insertData(HTable table) throws IOException {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    Put put = new Put(ROW);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    table.put(put);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    put = new Put(ROW1);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    table.put(put);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    put = new Put(ROW);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    table.put(put);<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>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      InterruptedException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    for (ScanThread thread : scanThreads) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      thread.start();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return scanThreads;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      throws IOException, InterruptedException {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    for (GetThread thread : getThreads) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      thread.start();<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    return getThreads;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      throws IOException, InterruptedException {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      thread.start();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    return multiGetThreads;<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    int counter = NO_OF_THREADS;<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      counter = counter - 1;<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        Thread.sleep(100);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } else {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        Thread.sleep(100);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    int refCount = 0;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    while (iterator.hasNext()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      CachedBlock next = iterator.next();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (cache instanceof BucketCache) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      } else {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        if (expectOnlyZero) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          assertTrue(refCount == 0);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (refCount != 0) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          // Because the scan would have also touched up on these blocks but<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          // it<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>          // would have touched<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>          // all 3<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>          if (getClosed) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>            // If get has closed only the scan's blocks would be available<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          } else {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      } else {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // Because the get would have also touched up on these blocks but it<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // would have touched<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        // upon only 2 additionally<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        if (expectOnlyZero) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          assertTrue(refCount == 0);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        if (refCount != 0) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (getLatch == null || wrappedCp) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          } else {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private static class MultiGetThread extends Thread {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private final HTable table;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    public MultiGetThread(HTable table) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      this.table = table;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    @Override<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    public void run() {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      gets.add(new Get(ROW));<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      gets.add(new Get(ROW1));<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      try {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        Result[] r = table.get(gets);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (IOException e) {<a name="line.1169"></a>
+<span class="sourceLineNo">924</span>  public void testBlockEvictionAfterHBASE13082WithCompactionAndFlush()<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      throws IOException, InterruptedException {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    // do flush and scan in parallel<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    HTable table = null;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    try {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      latch = new CountDownLatch(1);<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      compactionLatch = new CountDownLatch(1);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      TableName tableName =<a name="line.931"></a>
+<span class="sourceLineNo">932</span>          TableName.valueOf("testBlockEvictionAfterHBASE13082WithCompactionAndFlush");<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      // Create a table with block size as 1024<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      // get the block cache and region<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      RegionLocator locator = table.getRegionLocator();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.939"></a>
+<span class="sourceLineNo">940</span>          regionName);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      Store store = region.getStores().iterator().next();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      cacheConf.setEvictOnClose(true);<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>      // insert data. 2 Rows are added<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      Put put = new Put(ROW);<a name="line.948"></a>
+<span class="sourceLineNo">949</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      table.put(put);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put = new Put(ROW1);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      table.put(put);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // Should create one Hfile with 2 blocks<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      region.flush(true);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      // read the data and expect same blocks, one new hit, no misses<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      int refCount = 0;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      // Check how this miss is happening<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // insert a second column, read the row, no new blocks, 3 new hits<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      byte[] data2 = Bytes.add(data, data);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      put = new Put(ROW);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      table.put(put);<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // flush, one new block<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      System.out.println("Flushing cache");<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      region.flush(true);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      iterateBlockCache(cache, iterator);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      // Create three sets of scan<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Thread.sleep(100);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      iterator = cache.iterator();<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      boolean usedBlocksFound = false;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      while (iterator.hasNext()) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        CachedBlock next = iterator.next();<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.978"></a>
+<span class="sourceLineNo">979</span>        if (cache instanceof BucketCache) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        } else {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          continue;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        if (refCount != 0) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>          // Blocks will be with count 3<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          usedBlocksFound = true;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        }<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      // Make a put and do a flush<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>      data2 = Bytes.add(data, data);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      put = new Put(ROW1);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      table.put(put);<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      // flush, one new block<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      System.out.println("Flushing cache");<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      region.flush(true);<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      usedBlocksFound = false;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      System.out.println("Compacting");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      assertEquals(3, store.getStorefilesCount());<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      store.triggerMajorCompaction();<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      region.compact(true);<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      assertEquals(1, store.getStorefilesCount());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      // Even after compaction is done we will have some blocks that cannot<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // be evicted this is because the scan is still referencing them<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      iterator = cache.iterator();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      while (iterator.hasNext()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        CachedBlock next = iterator.next();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        if (cache instanceof BucketCache) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        } else {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          continue;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        }<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (refCount != 0) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // Blocks will be with count 3 as they are not yet cleared<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          usedBlocksFound = true;<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>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      // Should not throw exception<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      compactionLatch.countDown();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      latch.countDown();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      for (ScanThread thread : scanThreads) {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        thread.join();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      // by this time all blocks should have been evicted<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      iterator = cache.iterator();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // Since a flush and compaction happened after a scan started<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // we need to ensure that all the original blocks of the compacted file<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // is also removed.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      iterateBlockCache(cache, iterator);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      Result r = table.get(new Get(ROW));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      // The gets would be working on new blocks<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>      iterator = cache.iterator();<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      iterateBlockCache(cache, iterator);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    } finally {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      if (table != null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        table.close();<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><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  @Test<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    HTable table = null;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      latch = new CountDownLatch(1);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      exceptionLatch = new CountDownLatch(1);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      // Create KV that will give you two blocks<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      // Create a table with block size as 1024<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      // get the block cache and region<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      RegionLocator locator = table.getRegionLocator();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          regionName);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      Store store = region.getStores().iterator().next();<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      cacheConf.setEvictOnClose(true);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      // insert data. 2 Rows are added<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      insertData(table);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      // flush the data<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      System.out.println("Flushing cache");<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // Should create one Hfile with 2 blocks<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      region.flush(true);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      // The block would have been decremented for the scan case as it was<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      // wrapped<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // before even the postNext hook gets executed.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      // giving some time for the block to be decremented<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      Thread.sleep(100);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      boolean usedBlocksFound = false;<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      int refCount = 0;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      while (iterator.hasNext()) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        CachedBlock next = iterator.next();<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        if (cache instanceof BucketCache) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        } else {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>          continue;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>        if (refCount != 0) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>          // Blocks will be with count 3<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          usedBlocksFound = true;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      assertTrue(usedBlocksFound);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      exceptionLatch.countDown();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // countdown the latch<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      for (ScanThread thread : scanThreads) {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        thread.join();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      iterator = cache.iterator();<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      usedBlocksFound = false;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      refCount = 0;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      while (iterator.hasNext()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        CachedBlock next = iterator.next();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        if (cache instanceof BucketCache) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        } else {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>          continue;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        if (refCount != 0) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>          // Blocks will be with count 3<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          usedBlocksFound = true;<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>        }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(usedBlocksFound);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      Thread.sleep(5100);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      iterator = cache.iterator();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      refCount = 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      while (iterator.hasNext()) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>        CachedBlock next = iterator.next();<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        if (cache instanceof BucketCache) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        } else {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>          continue;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        assertEquals(0, refCount);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      }<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    } finally {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      if (table != null) {<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>        table.close();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    int refCount;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    while (iterator.hasNext()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      CachedBlock next = iterator.next();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      if (cache instanceof BucketCache) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      } else {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        continue;<a name="line.1169"></a>
 <span class="sourceLineNo">1170</span>      }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    }<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  private static class GetThread extends Thread {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    private final HTable table;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    private final boolean tracker;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    private final boolean multipleCFs;<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      this.table = table;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      this.tracker = tracker;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      this.multipleCFs = multipleCFs;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span><a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    @Override<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    public void run() {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>        initiateGet(table);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      } catch (IOException e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        // do nothing<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    private void initiateGet(HTable table) throws IOException {<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      Get get = new Get(ROW);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      if (tracker) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>        // Change this<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        if (!multipleCFs) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 3));<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 8));<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 9));<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          // Unknown key<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 900));<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>        } else {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          get.addColumn(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3));<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          get.addColumn(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9));<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>          // Unknown key<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 900));<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>        }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      Result r = table.get(get);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      System.out.println(r);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (!tracker) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        if (!multipleCFs) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 3)), data2));<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 8)), data2));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 9)), data2));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        } else {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>          assertTrue(Bytes.equals(<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>              r.getValue(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3)),<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>              data2));<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          assertTrue(Bytes.equals(<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              r.getValue(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8)),<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>              data2));<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          assertTrue(Bytes.equals(<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>              r.getValue(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9)),<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>              data2));<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span><a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  private static class ScanThread extends Thread {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    private final HTable table;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    private final boolean reverse;<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    public ScanThread(HTable table, boolean reverse) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      this.table = table;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      this.reverse = reverse;<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span><a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    @Override<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    public void run() {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      try {<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        initiateScan(table);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      } catch (IOException e) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        // do nothing<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    private void initiateScan(HTable table) throws IOException {<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      Scan scan = new Scan();<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      if (reverse) {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>        scan.setReversed(true);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      ResultScanner resScanner = table.getScanner(scan);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      int i = (reverse ? ROWS.length - 1 : 0);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      boolean resultFound = false;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      for (Result result : resScanner) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        resultFound = true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        System.out.println(result);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        if (!reverse) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          i++;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>        } else {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>          i--;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      assertTrue(resultFound);<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  private void waitForStoreFileCount(Store store, int count, int timeout)<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      throws InterruptedException {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    long start = System.currentTimeMillis();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    while (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      Thread.sleep(100);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    System.out.println("start=" + start + ", now=" + System.currentTimeMillis() + ", cur="<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        + store.getStorefilesCount());<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  private static class CustomScanner implements RegionScanner {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    private RegionScanner delegate;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    public CustomScanner(RegionScanner delegate) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      this.delegate = delegate;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    public boolean next(List&lt;Cell&gt; results) throws IOException {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      return delegate.next(results);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    @Override<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext scannerContext) throws IOException {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return delegate.next(result, scannerContext);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public boolean nextRaw(List&lt;Cell&gt; result) throws IOException {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return delegate.nextRaw(result);<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    public boolean nextRaw(List&lt;Cell&gt; result, ScannerContext context) throws IOException {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      boolean nextRaw = delegate.nextRaw(result, context);<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      if (compactionLatch != null &amp;&amp; compactionLatch.getCount() &gt; 0) {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        try {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          compactionLatch.await();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        } catch (InterruptedException ie) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      if (CustomInnerRegionObserver.throwException.get()) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (exceptionLatch.getCount() &gt; 0) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          try {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            exceptionLatch.await();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          } catch (InterruptedException e) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>          throw new IOException("throw exception");<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        }<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      return nextRaw;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    @Override<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    public void close() throws IOException {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      delegate.close();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    @Override<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    public HRegionInfo getRegionInfo() {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      return delegate.getRegionInfo();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    }<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    @Override<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    public boolean isFilterDone() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return delegate.isFilterDone();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    public boolean reseek(byte[] row) throws IOException {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      return false;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span><a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    public long getMaxResultSize() {<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      return delegate.getMaxResultSize();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    public long getMvccReadPoint() {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      return delegate.getMvccReadPoint();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span><a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    @Override<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    public int getBatch() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      return delegate.getBatch();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    @Override<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    public void shipped() throws IOException {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      this.delegate.shipped();<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>  public static class CustomInnerRegionObserverWrapper extends CustomInnerRegionObserver {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    @Override<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    public RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        Scan scan, RegionScanner s) throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      return new CustomScanner(s);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>  }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  public static class CustomInnerRegionObserver extends BaseRegionObserver {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    static final AtomicLong sleepTime = new AtomicLong(0);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    static final AtomicBoolean slowDownNext = new AtomicBoolean(false);<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    static final AtomicInteger countOfNext = new AtomicInteger(0);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    static final AtomicInteger countOfGets = new AtomicInteger(0);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    static final AtomicBoolean waitForGets = new AtomicBoolean(false);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    static final AtomicBoolean throwException = new AtomicBoolean(false);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    private static final AtomicReference&lt;CountDownLatch&gt; cdl = new AtomicReference&lt;CountDownLatch&gt;(<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        new CountDownLatch(0));<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        InternalScanner s, List&lt;Result&gt; results, int limit, boolean hasMore) throws IOException {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      slowdownCode(e, false);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      if (getLatch != null &amp;&amp; getLatch.getCount() &gt; 0) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>          getLatch.await();<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        } catch (InterruptedException e1) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      return super.postScannerNext(e, s, results, limit, hasMore);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>    public void postGetOp(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Get get,<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        List&lt;Cell&gt; results) throws IOException {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      slowdownCode(e, true);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      super.postGetOp(e, get, results);<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    public static AtomicReference&lt;CountDownLatch&gt; getCdl() {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      return cdl;<a name="line.1416"></a>
+<span class="sourceLineNo">1171</span>      assertEquals(0, refCount);<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  private void insertData(HTable table) throws IOException {<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    Put put = new Put(ROW);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    table.put(put);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    put = new Put(ROW1);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    table.put(put);<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    put = new Put(ROW);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    table.put(put);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span><a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      InterruptedException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    for (ScanThread thread : scanThreads) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      thread.start();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return scanThreads;<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      throws IOException, InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    for (GetThread thread : getThreads) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      thread.start();<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    return getThreads;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      throws IOException, InterruptedException {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      thread.start();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    return multiGetThreads;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span><a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    int counter = NO_OF_THREADS;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      counter = counter - 1;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>        Thread.sleep(100);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    } else {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        Thread.sleep(100);<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    int refCount = 0;<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    while (iterator.hasNext()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      CachedBlock next = iterator.next();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      if (cache instanceof BucketCache) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        continue;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        if (expectOnlyZero) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>          assertTrue(refCount == 0);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>        if (refCount != 0) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>          // Because the scan would have also touched up on these blocks but<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>          // it<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>          // would have touched<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>          // all 3<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>          if (getClosed) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>            // If get has closed only the scan's blocks would be available<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          } else {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>        // Because the get would have also touched up on these blocks but it<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>        // would have touched<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        // upon only 2 additionally<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        if (expectOnlyZero) {<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>          assertTrue(refCount == 0);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        if (refCount != 0) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          if (getLatch == null || wrappedCp) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          } else {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span><a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  private static class MultiGetThread extends Thread {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    private final HTable table;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    public MultiGetThread(HTable table) {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      this.table = table;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    @Override<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    public void run() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      gets.add(new Get(ROW));<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      gets.add(new Get(ROW1));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      try {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        Result[] r = table.get(gets);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      } catch (IOException e) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  private static class GetThread extends Thread {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    private final HTable table;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    private final boolean tracker;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    private final boolean multipleCFs;<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      this.table = table;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      this.tracker = tracker;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      this.multipleCFs = multipleCFs;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    @Override<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    public void run() {<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      try {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        initiateGet(table);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      } catch (IOException e) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>        // do nothing<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      }<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    }<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="line.1

<TRUNCATED>

[12/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html b/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
index 58d8f10..1d60c2d 100644
--- a/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
+++ b/xref-test/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
@@ -931,524 +931,656 @@
 <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>   @Test
-<a class="jxr_linenumber" name="924" href="#924">924</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testScanWithException() <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="925" href="#925">925</a>     HTable table = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="926" href="#926">926</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="927" href="#927">927</a>       latch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
-<a class="jxr_linenumber" name="928" href="#928">928</a>       exceptionLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
-<a class="jxr_linenumber" name="929" href="#929">929</a>       TableName tableName = TableName.valueOf(<span class="jxr_string">"testScanWithException"</span>);
-<a class="jxr_linenumber" name="930" href="#930">930</a>       <em class="jxr_comment">// Create KV that will give you two blocks</em>
-<a class="jxr_linenumber" name="931" href="#931">931</a>       <em class="jxr_comment">// Create a table with block size as 1024</em>
-<a class="jxr_linenumber" name="932" href="#932">932</a>       table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,
-<a class="jxr_linenumber" name="933" href="#933">933</a>           CustomInnerRegionObserverWrapper.<strong class="jxr_keyword">class</strong>.getName());
-<a class="jxr_linenumber" name="934" href="#934">934</a>       <em class="jxr_comment">// get the block cache and region</em>
-<a class="jxr_linenumber" name="935" href="#935">935</a>       RegionLocator locator = table.getRegionLocator();
-<a class="jxr_linenumber" name="936" href="#936">936</a>       String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();
-<a class="jxr_linenumber" name="937" href="#937">937</a>       Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(
-<a class="jxr_linenumber" name="938" href="#938">938</a>           regionName);
-<a class="jxr_linenumber" name="939" href="#939">939</a>       Store store = region.getStores().iterator().next();
-<a class="jxr_linenumber" name="940" href="#940">940</a>       CacheConfig cacheConf = store.getCacheConfig();
-<a class="jxr_linenumber" name="941" href="#941">941</a>       cacheConf.setCacheDataOnWrite(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="942" href="#942">942</a>       cacheConf.setEvictOnClose(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="943" href="#943">943</a>       BlockCache cache = cacheConf.getBlockCache();
-<a class="jxr_linenumber" name="944" href="#944">944</a>       <em class="jxr_comment">// insert data. 2 Rows are added</em>
-<a class="jxr_linenumber" name="945" href="#945">945</a>       insertData(table);
-<a class="jxr_linenumber" name="946" href="#946">946</a>       <em class="jxr_comment">// flush the data</em>
-<a class="jxr_linenumber" name="947" href="#947">947</a>       System.out.println(<span class="jxr_string">"Flushing cache"</span>);
-<a class="jxr_linenumber" name="948" href="#948">948</a>       <em class="jxr_comment">// Should create one Hfile with 2 blocks</em>
-<a class="jxr_linenumber" name="949" href="#949">949</a>       region.flush(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="950" href="#950">950</a>       <em class="jxr_comment">// CustomInnerRegionObserver.sleepTime.set(5000);</em>
-<a class="jxr_linenumber" name="951" href="#951">951</a>       CustomInnerRegionObserver.throwException.set(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="952" href="#952">952</a>       <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = initiateScan(table, false);
-<a class="jxr_linenumber" name="953" href="#953">953</a>       <em class="jxr_comment">// The block would have been decremented for the scan case as it was</em>
-<a class="jxr_linenumber" name="954" href="#954">954</a>       <em class="jxr_comment">// wrapped</em>
-<a class="jxr_linenumber" name="955" href="#955">955</a>       <em class="jxr_comment">// before even the postNext hook gets executed.</em>
-<a class="jxr_linenumber" name="956" href="#956">956</a>       <em class="jxr_comment">// giving some time for the block to be decremented</em>
-<a class="jxr_linenumber" name="957" href="#957">957</a>       Thread.sleep(100);
-<a class="jxr_linenumber" name="958" href="#958">958</a>       Iterator&lt;CachedBlock&gt; iterator = cache.iterator();
-<a class="jxr_linenumber" name="959" href="#959">959</a>       <strong class="jxr_keyword">boolean</strong> usedBlocksFound = false;
-<a class="jxr_linenumber" name="960" href="#960">960</a>       <strong class="jxr_keyword">int</strong> refCount = 0;
-<a class="jxr_linenumber" name="961" href="#961">961</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="962" href="#962">962</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="963" href="#963">963</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="964" href="#964">964</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="965" href="#965">965</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="966" href="#966">966</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="967" href="#967">967</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="968" href="#968">968</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="969" href="#969">969</a>           <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="970" href="#970">970</a>         }
-<a class="jxr_linenumber" name="971" href="#971">971</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="972" href="#972">972</a>           <em class="jxr_comment">// Blocks will be with count 3</em>
-<a class="jxr_linenumber" name="973" href="#973">973</a>           assertEquals(NO_OF_THREADS, refCount);
-<a class="jxr_linenumber" name="974" href="#974">974</a>           usedBlocksFound = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="975" href="#975">975</a>         }
-<a class="jxr_linenumber" name="976" href="#976">976</a>       }
-<a class="jxr_linenumber" name="977" href="#977">977</a>       assertTrue(usedBlocksFound);
-<a class="jxr_linenumber" name="978" href="#978">978</a>       exceptionLatch.countDown();
-<a class="jxr_linenumber" name="979" href="#979">979</a>       <em class="jxr_comment">// countdown the latch</em>
-<a class="jxr_linenumber" name="980" href="#980">980</a>       CustomInnerRegionObserver.getCdl().get().countDown();
-<a class="jxr_linenumber" name="981" href="#981">981</a>       <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
-<a class="jxr_linenumber" name="982" href="#982">982</a>         thread.join();
-<a class="jxr_linenumber" name="983" href="#983">983</a>       }
-<a class="jxr_linenumber" name="984" href="#984">984</a>       iterator = cache.iterator();
-<a class="jxr_linenumber" name="985" href="#985">985</a>       usedBlocksFound = false;
-<a class="jxr_linenumber" name="986" href="#986">986</a>       refCount = 0;
-<a class="jxr_linenumber" name="987" href="#987">987</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="988" href="#988">988</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="989" href="#989">989</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="990" href="#990">990</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="991" href="#991">991</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="992" href="#992">992</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="993" href="#993">993</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="994" href="#994">994</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="995" href="#995">995</a>           <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="996" href="#996">996</a>         }
-<a class="jxr_linenumber" name="997" href="#997">997</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="998" href="#998">998</a>           <em class="jxr_comment">// Blocks will be with count 3</em>
-<a class="jxr_linenumber" name="999" href="#999">999</a>           assertEquals(NO_OF_THREADS, refCount);
-<a class="jxr_linenumber" name="1000" href="#1000">1000</a>           usedBlocksFound = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1001" href="#1001">1001</a>         }
-<a class="jxr_linenumber" name="1002" href="#1002">1002</a>       }
-<a class="jxr_linenumber" name="1003" href="#1003">1003</a>       assertTrue(usedBlocksFound);
-<a class="jxr_linenumber" name="1004" href="#1004">1004</a>       <em class="jxr_comment">// Sleep till the scan lease would expire? Can we reduce this value?</em>
-<a class="jxr_linenumber" name="1005" href="#1005">1005</a>       Thread.sleep(5100);
-<a class="jxr_linenumber" name="1006" href="#1006">1006</a>       iterator = cache.iterator();
-<a class="jxr_linenumber" name="1007" href="#1007">1007</a>       refCount = 0;
-<a class="jxr_linenumber" name="1008" href="#1008">1008</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="1009" href="#1009">1009</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="1010" href="#1010">1010</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="1011" href="#1011">1011</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="1012" href="#1012">1012</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1013" href="#1013">1013</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="1014" href="#1014">1014</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1015" href="#1015">1015</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1016" href="#1016">1016</a>           <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="1017" href="#1017">1017</a>         }
-<a class="jxr_linenumber" name="1018" href="#1018">1018</a>         assertEquals(0, refCount);
-<a class="jxr_linenumber" name="1019" href="#1019">1019</a>       }
-<a class="jxr_linenumber" name="1020" href="#1020">1020</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1021" href="#1021">1021</a>       <strong class="jxr_keyword">if</strong> (table != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1022" href="#1022">1022</a>         table.close();
-<a class="jxr_linenumber" name="1023" href="#1023">1023</a>       }
-<a class="jxr_linenumber" name="1024" href="#1024">1024</a>     }
-<a class="jxr_linenumber" name="1025" href="#1025">1025</a>   }
-<a class="jxr_linenumber" name="1026" href="#1026">1026</a> 
-<a class="jxr_linenumber" name="1027" href="#1027">1027</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {
-<a class="jxr_linenumber" name="1028" href="#1028">1028</a>     <strong class="jxr_keyword">int</strong> refCount;
-<a class="jxr_linenumber" name="1029" href="#1029">1029</a>     <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="1030" href="#1030">1030</a>       <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="1031" href="#1031">1031</a>       BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="1032" href="#1032">1032</a>       <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="1033" href="#1033">1033</a>         refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1034" href="#1034">1034</a>       } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="1035" href="#1035">1035</a>         refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1036" href="#1036">1036</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1037" href="#1037">1037</a>         <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="1038" href="#1038">1038</a>       }
-<a class="jxr_linenumber" name="1039" href="#1039">1039</a>       assertEquals(0, refCount);
-<a class="jxr_linenumber" name="1040" href="#1040">1040</a>     }
-<a class="jxr_linenumber" name="1041" href="#1041">1041</a>   }
-<a class="jxr_linenumber" name="1042" href="#1042">1042</a> 
-<a class="jxr_linenumber" name="1043" href="#1043">1043</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> insertData(HTable table) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1044" href="#1044">1044</a>     Put put = <strong class="jxr_keyword">new</strong> Put(ROW);
-<a class="jxr_linenumber" name="1045" href="#1045">1045</a>     put.addColumn(FAMILY, QUALIFIER, data);
-<a class="jxr_linenumber" name="1046" href="#1046">1046</a>     table.put(put);
-<a class="jxr_linenumber" name="1047" href="#1047">1047</a>     put = <strong class="jxr_keyword">new</strong> Put(ROW1);
-<a class="jxr_linenumber" name="1048" href="#1048">1048</a>     put.addColumn(FAMILY, QUALIFIER, data);
-<a class="jxr_linenumber" name="1049" href="#1049">1049</a>     table.put(put);
-<a class="jxr_linenumber" name="1050" href="#1050">1050</a>     byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);
-<a class="jxr_linenumber" name="1051" href="#1051">1051</a>     put = <strong class="jxr_keyword">new</strong> Put(ROW);
-<a class="jxr_linenumber" name="1052" href="#1052">1052</a>     put.addColumn(FAMILY, QUALIFIER2, data2);
-<a class="jxr_linenumber" name="1053" href="#1053">1053</a>     table.put(put);
-<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">private</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] initiateScan(HTable table, <strong class="jxr_keyword">boolean</strong> reverse) <strong class="jxr_keyword">throws</strong> IOException,
-<a class="jxr_linenumber" name="1057" href="#1057">1057</a>       InterruptedException {
-<a class="jxr_linenumber" name="1058" href="#1058">1058</a>     <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[NO_OF_THREADS];
-<a class="jxr_linenumber" name="1059" href="#1059">1059</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; NO_OF_THREADS; i++) {
-<a class="jxr_linenumber" name="1060" href="#1060">1060</a>       scanThreads[i] = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>(table, reverse);
-<a class="jxr_linenumber" name="1061" href="#1061">1061</a>     }
-<a class="jxr_linenumber" name="1062" href="#1062">1062</a>     <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
-<a class="jxr_linenumber" name="1063" href="#1063">1063</a>       thread.start();
-<a class="jxr_linenumber" name="1064" href="#1064">1064</a>     }
-<a class="jxr_linenumber" name="1065" href="#1065">1065</a>     <strong class="jxr_keyword">return</strong> scanThreads;
-<a class="jxr_linenumber" name="1066" href="#1066">1066</a>   }
-<a class="jxr_linenumber" name="1067" href="#1067">1067</a> 
-<a class="jxr_linenumber" name="1068" href="#1068">1068</a>   <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>[] initiateGet(HTable table, <strong class="jxr_keyword">boolean</strong> tracker, <strong class="jxr_keyword">boolean</strong> multipleCFs)
-<a class="jxr_linenumber" name="1069" href="#1069">1069</a>       <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="1070" href="#1070">1070</a>     <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>[] getThreads = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>[NO_OF_THREADS];
-<a class="jxr_linenumber" name="1071" href="#1071">1071</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; NO_OF_THREADS; i++) {
-<a class="jxr_linenumber" name="1072" href="#1072">1072</a>       getThreads[i] = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>(table, tracker, multipleCFs);
-<a class="jxr_linenumber" name="1073" href="#1073">1073</a>     }
-<a class="jxr_linenumber" name="1074" href="#1074">1074</a>     <strong class="jxr_keyword">for</strong> (GetThread thread : getThreads) {
-<a class="jxr_linenumber" name="1075" href="#1075">1075</a>       thread.start();
-<a class="jxr_linenumber" name="1076" href="#1076">1076</a>     }
-<a class="jxr_linenumber" name="1077" href="#1077">1077</a>     <strong class="jxr_keyword">return</strong> getThreads;
-<a class="jxr_linenumber" name="1078" href="#1078">1078</a>   }
-<a class="jxr_linenumber" name="1079" href="#1079">1079</a> 
-<a class="jxr_linenumber" name="1080" href="#1080">1080</a>   <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>[] initiateMultiGet(HTable table)
-<a class="jxr_linenumber" name="1081" href="#1081">1081</a>       <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="1082" href="#1082">1082</a>     <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>[] multiGetThreads = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>[NO_OF_THREADS];
-<a class="jxr_linenumber" name="1083" href="#1083">1083</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; NO_OF_THREADS; i++) {
-<a class="jxr_linenumber" name="1084" href="#1084">1084</a>       multiGetThreads[i] = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>(table);
-<a class="jxr_linenumber" name="1085" href="#1085">1085</a>     }
-<a class="jxr_linenumber" name="1086" href="#1086">1086</a>     <strong class="jxr_keyword">for</strong> (MultiGetThread thread : multiGetThreads) {
-<a class="jxr_linenumber" name="1087" href="#1087">1087</a>       thread.start();
-<a class="jxr_linenumber" name="1088" href="#1088">1088</a>     }
-<a class="jxr_linenumber" name="1089" href="#1089">1089</a>     <strong class="jxr_keyword">return</strong> multiGetThreads;
-<a class="jxr_linenumber" name="1090" href="#1090">1090</a>   }
-<a class="jxr_linenumber" name="1091" href="#1091">1091</a> 
-<a class="jxr_linenumber" name="1092" href="#1092">1092</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> checkForBlockEviction(BlockCache cache, <strong class="jxr_keyword">boolean</strong> getClosed, <strong class="jxr_keyword">boolean</strong> expectOnlyZero,
-<a class="jxr_linenumber" name="1093" href="#1093">1093</a>       <strong class="jxr_keyword">boolean</strong> wrappedCp) <strong class="jxr_keyword">throws</strong> InterruptedException {
-<a class="jxr_linenumber" name="1094" href="#1094">1094</a>     <strong class="jxr_keyword">int</strong> counter = NO_OF_THREADS;
-<a class="jxr_linenumber" name="1095" href="#1095">1095</a>     <strong class="jxr_keyword">if</strong> (CustomInnerRegionObserver.waitForGets.get()) {
-<a class="jxr_linenumber" name="1096" href="#1096">1096</a>       <em class="jxr_comment">// Because only one row is selected, it has only 2 blocks</em>
-<a class="jxr_linenumber" name="1097" href="#1097">1097</a>       counter = counter - 1;
-<a class="jxr_linenumber" name="1098" href="#1098">1098</a>       <strong class="jxr_keyword">while</strong> (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {
-<a class="jxr_linenumber" name="1099" href="#1099">1099</a>         Thread.sleep(100);
-<a class="jxr_linenumber" name="1100" href="#1100">1100</a>       }
-<a class="jxr_linenumber" name="1101" href="#1101">1101</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1102" href="#1102">1102</a>       <strong class="jxr_keyword">while</strong> (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {
-<a class="jxr_linenumber" name="1103" href="#1103">1103</a>         Thread.sleep(100);
-<a class="jxr_linenumber" name="1104" href="#1104">1104</a>       }
-<a class="jxr_linenumber" name="1105" href="#1105">1105</a>     }
-<a class="jxr_linenumber" name="1106" href="#1106">1106</a>     Iterator&lt;CachedBlock&gt; iterator = cache.iterator();
-<a class="jxr_linenumber" name="1107" href="#1107">1107</a>     <strong class="jxr_keyword">int</strong> refCount = 0;
-<a class="jxr_linenumber" name="1108" href="#1108">1108</a>     <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
-<a class="jxr_linenumber" name="1109" href="#1109">1109</a>       <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
-<a class="jxr_linenumber" name="1110" href="#1110">1110</a>       BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
-<a class="jxr_linenumber" name="1111" href="#1111">1111</a>       <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
-<a class="jxr_linenumber" name="1112" href="#1112">1112</a>         refCount = ((BucketCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1113" href="#1113">1113</a>       } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
-<a class="jxr_linenumber" name="1114" href="#1114">1114</a>         refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-<a class="jxr_linenumber" name="1115" href="#1115">1115</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1116" href="#1116">1116</a>         <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="1117" href="#1117">1117</a>       }
-<a class="jxr_linenumber" name="1118" href="#1118">1118</a>       System.out.println(<span class="jxr_string">" the refcount is "</span> + refCount + <span class="jxr_string">" block is "</span> + cacheKey);
-<a class="jxr_linenumber" name="1119" href="#1119">1119</a>       <strong class="jxr_keyword">if</strong> (CustomInnerRegionObserver.waitForGets.get()) {
-<a class="jxr_linenumber" name="1120" href="#1120">1120</a>         <strong class="jxr_keyword">if</strong> (expectOnlyZero) {
-<a class="jxr_linenumber" name="1121" href="#1121">1121</a>           assertTrue(refCount == 0);
-<a class="jxr_linenumber" name="1122" href="#1122">1122</a>         }
-<a class="jxr_linenumber" name="1123" href="#1123">1123</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="1124" href="#1124">1124</a>           <em class="jxr_comment">// Because the scan would have also touched up on these blocks but</em>
-<a class="jxr_linenumber" name="1125" href="#1125">1125</a>           <em class="jxr_comment">// it</em>
-<a class="jxr_linenumber" name="1126" href="#1126">1126</a>           <em class="jxr_comment">// would have touched</em>
-<a class="jxr_linenumber" name="1127" href="#1127">1127</a>           <em class="jxr_comment">// all 3</em>
-<a class="jxr_linenumber" name="1128" href="#1128">1128</a>           <strong class="jxr_keyword">if</strong> (getClosed) {
-<a class="jxr_linenumber" name="1129" href="#1129">1129</a>             <em class="jxr_comment">// If get has closed only the scan's blocks would be available</em>
-<a class="jxr_linenumber" name="1130" href="#1130">1130</a>             assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());
-<a class="jxr_linenumber" name="1131" href="#1131">1131</a>           } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1132" href="#1132">1132</a>               assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));
-<a class="jxr_linenumber" name="1133" href="#1133">1133</a>           }
-<a class="jxr_linenumber" name="1134" href="#1134">1134</a>         }
-<a class="jxr_linenumber" name="1135" href="#1135">1135</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1136" href="#1136">1136</a>         <em class="jxr_comment">// Because the get would have also touched up on these blocks but it</em>
-<a class="jxr_linenumber" name="1137" href="#1137">1137</a>         <em class="jxr_comment">// would have touched</em>
-<a class="jxr_linenumber" name="1138" href="#1138">1138</a>         <em class="jxr_comment">// upon only 2 additionally</em>
-<a class="jxr_linenumber" name="1139" href="#1139">1139</a>         <strong class="jxr_keyword">if</strong> (expectOnlyZero) {
-<a class="jxr_linenumber" name="1140" href="#1140">1140</a>           assertTrue(refCount == 0);
-<a class="jxr_linenumber" name="1141" href="#1141">1141</a>         }
-<a class="jxr_linenumber" name="1142" href="#1142">1142</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
-<a class="jxr_linenumber" name="1143" href="#1143">1143</a>           <strong class="jxr_keyword">if</strong> (getLatch == <strong class="jxr_keyword">null</strong> || wrappedCp) {
-<a class="jxr_linenumber" name="1144" href="#1144">1144</a>             assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());
-<a class="jxr_linenumber" name="1145" href="#1145">1145</a>           } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1146" href="#1146">1146</a>             assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));
-<a class="jxr_linenumber" name="1147" href="#1147">1147</a>           }
-<a class="jxr_linenumber" name="1148" href="#1148">1148</a>         }
-<a class="jxr_linenumber" name="1149" href="#1149">1149</a>       }
-<a class="jxr_linenumber" name="1150" href="#1150">1150</a>     }
-<a class="jxr_linenumber" name="1151" href="#1151">1151</a>     CustomInnerRegionObserver.getCdl().get().countDown();
-<a class="jxr_linenumber" name="1152" href="#1152">1152</a>   }
-<a class="jxr_linenumber" name="1153" href="#1153">1153</a> 
-<a class="jxr_linenumber" name="1154" href="#1154">1154</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/client/TestBlockEvictionFromClient.html">MultiGetThread</a> <strong class="jxr_keyword">extends</strong> Thread {
-<a class="jxr_linenumber" name="1155" href="#1155">1155</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HTable table;
-<a class="jxr_linenumber" name="1156" href="#1156">1156</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;Get&gt; gets = <strong class="jxr_keyword">new</strong> ArrayList&lt;Get&gt;();
-<a class="jxr_linenumber" name="1157" href="#1157">1157</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">MultiGetThread</a>(HTable table) {
-<a class="jxr_linenumber" name="1158" href="#1158">1158</a>       <strong class="jxr_keyword">this</strong>.table = table;
-<a class="jxr_linenumber" name="1159" href="#1159">1159</a>     }
-<a class="jxr_linenumber" name="1160" href="#1160">1160</a>     @Override
-<a class="jxr_linenumber" name="1161" href="#1161">1161</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="1162" href="#1162">1162</a>       gets.add(<strong class="jxr_keyword">new</strong> Get(ROW));
-<a class="jxr_linenumber" name="1163" href="#1163">1163</a>       gets.add(<strong class="jxr_keyword">new</strong> Get(ROW1));
-<a class="jxr_linenumber" name="1164" href="#1164">1164</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1165" href="#1165">1165</a>         CustomInnerRegionObserver.getCdl().set(latch);
-<a class="jxr_linenumber" name="1166" href="#1166">1166</a>         Result[] r = table.get(gets);
-<a class="jxr_linenumber" name="1167" href="#1167">1167</a>         assertTrue(Bytes.equals(r[0].getRow(), ROW));
-<a class="jxr_linenumber" name="1168" href="#1168">1168</a>         assertTrue(Bytes.equals(r[1].getRow(), ROW1));
-<a class="jxr_linenumber" name="1169" href="#1169">1169</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="924" href="#924">924</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBlockEvictionAfterHBASE13082WithCompactionAndFlush()
+<a class="jxr_linenumber" name="925" href="#925">925</a>       <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="926" href="#926">926</a>     <em class="jxr_comment">// do flush and scan in parallel</em>
+<a class="jxr_linenumber" name="927" href="#927">927</a>     HTable table = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="928" href="#928">928</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="929" href="#929">929</a>       latch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="930" href="#930">930</a>       compactionLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="931" href="#931">931</a>       TableName tableName =
+<a class="jxr_linenumber" name="932" href="#932">932</a>           TableName.valueOf(<span class="jxr_string">"testBlockEvictionAfterHBASE13082WithCompactionAndFlush"</span>);
+<a class="jxr_linenumber" name="933" href="#933">933</a>       <em class="jxr_comment">// Create a table with block size as 1024</em>
+<a class="jxr_linenumber" name="934" href="#934">934</a>       table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,
+<a class="jxr_linenumber" name="935" href="#935">935</a>           CustomInnerRegionObserverWrapper.<strong class="jxr_keyword">class</strong>.getName());
+<a class="jxr_linenumber" name="936" href="#936">936</a>       <em class="jxr_comment">// get the block cache and region</em>
+<a class="jxr_linenumber" name="937" href="#937">937</a>       RegionLocator locator = table.getRegionLocator();
+<a class="jxr_linenumber" name="938" href="#938">938</a>       String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();
+<a class="jxr_linenumber" name="939" href="#939">939</a>       Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(
+<a class="jxr_linenumber" name="940" href="#940">940</a>           regionName);
+<a class="jxr_linenumber" name="941" href="#941">941</a>       Store store = region.getStores().iterator().next();
+<a class="jxr_linenumber" name="942" href="#942">942</a>       CacheConfig cacheConf = store.getCacheConfig();
+<a class="jxr_linenumber" name="943" href="#943">943</a>       cacheConf.setCacheDataOnWrite(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="944" href="#944">944</a>       cacheConf.setEvictOnClose(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="945" href="#945">945</a>       BlockCache cache = cacheConf.getBlockCache();
+<a class="jxr_linenumber" name="946" href="#946">946</a> 
+<a class="jxr_linenumber" name="947" href="#947">947</a>       <em class="jxr_comment">// insert data. 2 Rows are added</em>
+<a class="jxr_linenumber" name="948" href="#948">948</a>       Put put = <strong class="jxr_keyword">new</strong> Put(ROW);
+<a class="jxr_linenumber" name="949" href="#949">949</a>       put.addColumn(FAMILY, QUALIFIER, data);
+<a class="jxr_linenumber" name="950" href="#950">950</a>       table.put(put);
+<a class="jxr_linenumber" name="951" href="#951">951</a>       put = <strong class="jxr_keyword">new</strong> Put(ROW1);
+<a class="jxr_linenumber" name="952" href="#952">952</a>       put.addColumn(FAMILY, QUALIFIER, data);
+<a class="jxr_linenumber" name="953" href="#953">953</a>       table.put(put);
+<a class="jxr_linenumber" name="954" href="#954">954</a>       assertTrue(Bytes.equals(table.get(<strong class="jxr_keyword">new</strong> Get(ROW)).value(), data));
+<a class="jxr_linenumber" name="955" href="#955">955</a>       <em class="jxr_comment">// Should create one Hfile with 2 blocks</em>
+<a class="jxr_linenumber" name="956" href="#956">956</a>       region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="957" href="#957">957</a>       <em class="jxr_comment">// read the data and expect same blocks, one new hit, no misses</em>
+<a class="jxr_linenumber" name="958" href="#958">958</a>       <strong class="jxr_keyword">int</strong> refCount = 0;
+<a class="jxr_linenumber" name="959" href="#959">959</a>       <em class="jxr_comment">// Check how this miss is happening</em>
+<a class="jxr_linenumber" name="960" href="#960">960</a>       <em class="jxr_comment">// insert a second column, read the row, no new blocks, 3 new hits</em>
+<a class="jxr_linenumber" name="961" href="#961">961</a>       byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);
+<a class="jxr_linenumber" name="962" href="#962">962</a>       byte[] data2 = Bytes.add(data, data);
+<a class="jxr_linenumber" name="963" href="#963">963</a>       put = <strong class="jxr_keyword">new</strong> Put(ROW);
+<a class="jxr_linenumber" name="964" href="#964">964</a>       put.addColumn(FAMILY, QUALIFIER2, data2);
+<a class="jxr_linenumber" name="965" href="#965">965</a>       table.put(put);
+<a class="jxr_linenumber" name="966" href="#966">966</a>       <em class="jxr_comment">// flush, one new block</em>
+<a class="jxr_linenumber" name="967" href="#967">967</a>       System.out.println(<span class="jxr_string">"Flushing cache"</span>);
+<a class="jxr_linenumber" name="968" href="#968">968</a>       region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="969" href="#969">969</a>       Iterator&lt;CachedBlock&gt; iterator = cache.iterator();
+<a class="jxr_linenumber" name="970" href="#970">970</a>       iterateBlockCache(cache, iterator);
+<a class="jxr_linenumber" name="971" href="#971">971</a>       <em class="jxr_comment">// Create three sets of scan</em>
+<a class="jxr_linenumber" name="972" href="#972">972</a>       <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = initiateScan(table, false);
+<a class="jxr_linenumber" name="973" href="#973">973</a>       Thread.sleep(100);
+<a class="jxr_linenumber" name="974" href="#974">974</a>       iterator = cache.iterator();
+<a class="jxr_linenumber" name="975" href="#975">975</a>       <strong class="jxr_keyword">boolean</strong> usedBlocksFound = false;
+<a class="jxr_linenumber" name="976" href="#976">976</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="977" href="#977">977</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="978" href="#978">978</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="979" href="#979">979</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="980" href="#980">980</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="981" href="#981">981</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="982" href="#982">982</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="983" href="#983">983</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="984" href="#984">984</a>           <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="985" href="#985">985</a>         }
+<a class="jxr_linenumber" name="986" href="#986">986</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="987" href="#987">987</a>           <em class="jxr_comment">// Blocks will be with count 3</em>
+<a class="jxr_linenumber" name="988" href="#988">988</a>           assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="989" href="#989">989</a>           usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="990" href="#990">990</a>         }
+<a class="jxr_linenumber" name="991" href="#991">991</a>       }
+<a class="jxr_linenumber" name="992" href="#992">992</a>       <em class="jxr_comment">// Make a put and do a flush</em>
+<a class="jxr_linenumber" name="993" href="#993">993</a>       QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);
+<a class="jxr_linenumber" name="994" href="#994">994</a>       data2 = Bytes.add(data, data);
+<a class="jxr_linenumber" name="995" href="#995">995</a>       put = <strong class="jxr_keyword">new</strong> Put(ROW1);
+<a class="jxr_linenumber" name="996" href="#996">996</a>       put.addColumn(FAMILY, QUALIFIER2, data2);
+<a class="jxr_linenumber" name="997" href="#997">997</a>       table.put(put);
+<a class="jxr_linenumber" name="998" href="#998">998</a>       <em class="jxr_comment">// flush, one new block</em>
+<a class="jxr_linenumber" name="999" href="#999">999</a>       System.out.println(<span class="jxr_string">"Flushing cache"</span>);
+<a class="jxr_linenumber" name="1000" href="#1000">1000</a>       region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1001" href="#1001">1001</a>       assertTrue(<span class="jxr_string">"Blocks with non zero ref count should be found "</span>, usedBlocksFound);
+<a class="jxr_linenumber" name="1002" href="#1002">1002</a>       usedBlocksFound = false;
+<a class="jxr_linenumber" name="1003" href="#1003">1003</a>       System.out.println(<span class="jxr_string">"Compacting"</span>);
+<a class="jxr_linenumber" name="1004" href="#1004">1004</a>       assertEquals(3, store.getStorefilesCount());
+<a class="jxr_linenumber" name="1005" href="#1005">1005</a>       store.triggerMajorCompaction();
+<a class="jxr_linenumber" name="1006" href="#1006">1006</a>       region.compact(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1007" href="#1007">1007</a>       waitForStoreFileCount(store, 1, 10000); <em class="jxr_comment">// wait 10 seconds max</em>
+<a class="jxr_linenumber" name="1008" href="#1008">1008</a>       assertEquals(1, store.getStorefilesCount());
+<a class="jxr_linenumber" name="1009" href="#1009">1009</a>       <em class="jxr_comment">// Even after compaction is done we will have some blocks that cannot</em>
+<a class="jxr_linenumber" name="1010" href="#1010">1010</a>       <em class="jxr_comment">// be evicted this is because the scan is still referencing them</em>
+<a class="jxr_linenumber" name="1011" href="#1011">1011</a>       iterator = cache.iterator();
+<a class="jxr_linenumber" name="1012" href="#1012">1012</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1013" href="#1013">1013</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1014" href="#1014">1014</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1015" href="#1015">1015</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1016" href="#1016">1016</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1017" href="#1017">1017</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1018" href="#1018">1018</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1019" href="#1019">1019</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1020" href="#1020">1020</a>           <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1021" href="#1021">1021</a>         }
+<a class="jxr_linenumber" name="1022" href="#1022">1022</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="1023" href="#1023">1023</a>           <em class="jxr_comment">// Blocks will be with count 3 as they are not yet cleared</em>
+<a class="jxr_linenumber" name="1024" href="#1024">1024</a>           assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="1025" href="#1025">1025</a>           usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<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>       assertTrue(<span class="jxr_string">"Blocks with non zero ref count should be found "</span>, usedBlocksFound);
+<a class="jxr_linenumber" name="1029" href="#1029">1029</a>       <em class="jxr_comment">// Should not throw exception</em>
+<a class="jxr_linenumber" name="1030" href="#1030">1030</a>       compactionLatch.countDown();
+<a class="jxr_linenumber" name="1031" href="#1031">1031</a>       latch.countDown();
+<a class="jxr_linenumber" name="1032" href="#1032">1032</a>       <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
+<a class="jxr_linenumber" name="1033" href="#1033">1033</a>         thread.join();
+<a class="jxr_linenumber" name="1034" href="#1034">1034</a>       }
+<a class="jxr_linenumber" name="1035" href="#1035">1035</a>       <em class="jxr_comment">// by this time all blocks should have been evicted</em>
+<a class="jxr_linenumber" name="1036" href="#1036">1036</a>       iterator = cache.iterator();
+<a class="jxr_linenumber" name="1037" href="#1037">1037</a>       <em class="jxr_comment">// Since a flush and compaction happened after a scan started</em>
+<a class="jxr_linenumber" name="1038" href="#1038">1038</a>       <em class="jxr_comment">// we need to ensure that all the original blocks of the compacted file</em>
+<a class="jxr_linenumber" name="1039" href="#1039">1039</a>       <em class="jxr_comment">// is also removed.</em>
+<a class="jxr_linenumber" name="1040" href="#1040">1040</a>       iterateBlockCache(cache, iterator);
+<a class="jxr_linenumber" name="1041" href="#1041">1041</a>       Result r = table.get(<strong class="jxr_keyword">new</strong> Get(ROW));
+<a class="jxr_linenumber" name="1042" href="#1042">1042</a>       assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));
+<a class="jxr_linenumber" name="1043" href="#1043">1043</a>       assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));
+<a class="jxr_linenumber" name="1044" href="#1044">1044</a>       <em class="jxr_comment">// The gets would be working on new blocks</em>
+<a class="jxr_linenumber" name="1045" href="#1045">1045</a>       iterator = cache.iterator();
+<a class="jxr_linenumber" name="1046" href="#1046">1046</a>       iterateBlockCache(cache, iterator);
+<a class="jxr_linenumber" name="1047" href="#1047">1047</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1048" href="#1048">1048</a>       <strong class="jxr_keyword">if</strong> (table != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1049" href="#1049">1049</a>         table.close();
+<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> 
+<a class="jxr_linenumber" name="1054" href="#1054">1054</a> 
+<a class="jxr_linenumber" name="1055" href="#1055">1055</a>   @Test
+<a class="jxr_linenumber" name="1056" href="#1056">1056</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testScanWithException() <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="1057" href="#1057">1057</a>     HTable table = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1058" href="#1058">1058</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1059" href="#1059">1059</a>       latch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="1060" href="#1060">1060</a>       exceptionLatch = <strong class="jxr_keyword">new</strong> CountDownLatch(1);
+<a class="jxr_linenumber" name="1061" href="#1061">1061</a>       TableName tableName = TableName.valueOf(<span class="jxr_string">"testScanWithException"</span>);
+<a class="jxr_linenumber" name="1062" href="#1062">1062</a>       <em class="jxr_comment">// Create KV that will give you two blocks</em>
+<a class="jxr_linenumber" name="1063" href="#1063">1063</a>       <em class="jxr_comment">// Create a table with block size as 1024</em>
+<a class="jxr_linenumber" name="1064" href="#1064">1064</a>       table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,
+<a class="jxr_linenumber" name="1065" href="#1065">1065</a>           CustomInnerRegionObserverWrapper.<strong class="jxr_keyword">class</strong>.getName());
+<a class="jxr_linenumber" name="1066" href="#1066">1066</a>       <em class="jxr_comment">// get the block cache and region</em>
+<a class="jxr_linenumber" name="1067" href="#1067">1067</a>       RegionLocator locator = table.getRegionLocator();
+<a class="jxr_linenumber" name="1068" href="#1068">1068</a>       String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();
+<a class="jxr_linenumber" name="1069" href="#1069">1069</a>       Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(
+<a class="jxr_linenumber" name="1070" href="#1070">1070</a>           regionName);
+<a class="jxr_linenumber" name="1071" href="#1071">1071</a>       Store store = region.getStores().iterator().next();
+<a class="jxr_linenumber" name="1072" href="#1072">1072</a>       CacheConfig cacheConf = store.getCacheConfig();
+<a class="jxr_linenumber" name="1073" href="#1073">1073</a>       cacheConf.setCacheDataOnWrite(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1074" href="#1074">1074</a>       cacheConf.setEvictOnClose(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1075" href="#1075">1075</a>       BlockCache cache = cacheConf.getBlockCache();
+<a class="jxr_linenumber" name="1076" href="#1076">1076</a>       <em class="jxr_comment">// insert data. 2 Rows are added</em>
+<a class="jxr_linenumber" name="1077" href="#1077">1077</a>       insertData(table);
+<a class="jxr_linenumber" name="1078" href="#1078">1078</a>       <em class="jxr_comment">// flush the data</em>
+<a class="jxr_linenumber" name="1079" href="#1079">1079</a>       System.out.println(<span class="jxr_string">"Flushing cache"</span>);
+<a class="jxr_linenumber" name="1080" href="#1080">1080</a>       <em class="jxr_comment">// Should create one Hfile with 2 blocks</em>
+<a class="jxr_linenumber" name="1081" href="#1081">1081</a>       region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1082" href="#1082">1082</a>       <em class="jxr_comment">// CustomInnerRegionObserver.sleepTime.set(5000);</em>
+<a class="jxr_linenumber" name="1083" href="#1083">1083</a>       CustomInnerRegionObserver.throwException.set(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="1084" href="#1084">1084</a>       <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>[] scanThreads = initiateScan(table, false);
+<a class="jxr_linenumber" name="1085" href="#1085">1085</a>       <em class="jxr_comment">// The block would have been decremented for the scan case as it was</em>
+<a class="jxr_linenumber" name="1086" href="#1086">1086</a>       <em class="jxr_comment">// wrapped</em>
+<a class="jxr_linenumber" name="1087" href="#1087">1087</a>       <em class="jxr_comment">// before even the postNext hook gets executed.</em>
+<a class="jxr_linenumber" name="1088" href="#1088">1088</a>       <em class="jxr_comment">// giving some time for the block to be decremented</em>
+<a class="jxr_linenumber" name="1089" href="#1089">1089</a>       Thread.sleep(100);
+<a class="jxr_linenumber" name="1090" href="#1090">1090</a>       Iterator&lt;CachedBlock&gt; iterator = cache.iterator();
+<a class="jxr_linenumber" name="1091" href="#1091">1091</a>       <strong class="jxr_keyword">boolean</strong> usedBlocksFound = false;
+<a class="jxr_linenumber" name="1092" href="#1092">1092</a>       <strong class="jxr_keyword">int</strong> refCount = 0;
+<a class="jxr_linenumber" name="1093" href="#1093">1093</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1094" href="#1094">1094</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1095" href="#1095">1095</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1096" href="#1096">1096</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1097" href="#1097">1097</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1098" href="#1098">1098</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1099" href="#1099">1099</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1100" href="#1100">1100</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1101" href="#1101">1101</a>           <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1102" href="#1102">1102</a>         }
+<a class="jxr_linenumber" name="1103" href="#1103">1103</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="1104" href="#1104">1104</a>           <em class="jxr_comment">// Blocks will be with count 3</em>
+<a class="jxr_linenumber" name="1105" href="#1105">1105</a>           assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="1106" href="#1106">1106</a>           usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="1107" href="#1107">1107</a>         }
+<a class="jxr_linenumber" name="1108" href="#1108">1108</a>       }
+<a class="jxr_linenumber" name="1109" href="#1109">1109</a>       assertTrue(usedBlocksFound);
+<a class="jxr_linenumber" name="1110" href="#1110">1110</a>       exceptionLatch.countDown();
+<a class="jxr_linenumber" name="1111" href="#1111">1111</a>       <em class="jxr_comment">// countdown the latch</em>
+<a class="jxr_linenumber" name="1112" href="#1112">1112</a>       CustomInnerRegionObserver.getCdl().get().countDown();
+<a class="jxr_linenumber" name="1113" href="#1113">1113</a>       <strong class="jxr_keyword">for</strong> (ScanThread thread : scanThreads) {
+<a class="jxr_linenumber" name="1114" href="#1114">1114</a>         thread.join();
+<a class="jxr_linenumber" name="1115" href="#1115">1115</a>       }
+<a class="jxr_linenumber" name="1116" href="#1116">1116</a>       iterator = cache.iterator();
+<a class="jxr_linenumber" name="1117" href="#1117">1117</a>       usedBlocksFound = false;
+<a class="jxr_linenumber" name="1118" href="#1118">1118</a>       refCount = 0;
+<a class="jxr_linenumber" name="1119" href="#1119">1119</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1120" href="#1120">1120</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1121" href="#1121">1121</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1122" href="#1122">1122</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1123" href="#1123">1123</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1124" href="#1124">1124</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1125" href="#1125">1125</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1126" href="#1126">1126</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1127" href="#1127">1127</a>           <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1128" href="#1128">1128</a>         }
+<a class="jxr_linenumber" name="1129" href="#1129">1129</a>         <strong class="jxr_keyword">if</strong> (refCount != 0) {
+<a class="jxr_linenumber" name="1130" href="#1130">1130</a>           <em class="jxr_comment">// Blocks will be with count 3</em>
+<a class="jxr_linenumber" name="1131" href="#1131">1131</a>           assertEquals(NO_OF_THREADS, refCount);
+<a class="jxr_linenumber" name="1132" href="#1132">1132</a>           usedBlocksFound = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="1133" href="#1133">1133</a>         }
+<a class="jxr_linenumber" name="1134" href="#1134">1134</a>       }
+<a class="jxr_linenumber" name="1135" href="#1135">1135</a>       assertTrue(usedBlocksFound);
+<a class="jxr_linenumber" name="1136" href="#1136">1136</a>       <em class="jxr_comment">// Sleep till the scan lease would expire? Can we reduce this value?</em>
+<a class="jxr_linenumber" name="1137" href="#1137">1137</a>       Thread.sleep(5100);
+<a class="jxr_linenumber" name="1138" href="#1138">1138</a>       iterator = cache.iterator();
+<a class="jxr_linenumber" name="1139" href="#1139">1139</a>       refCount = 0;
+<a class="jxr_linenumber" name="1140" href="#1140">1140</a>       <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1141" href="#1141">1141</a>         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1142" href="#1142">1142</a>         BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1143" href="#1143">1143</a>         <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1144" href="#1144">1144</a>           refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1145" href="#1145">1145</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1146" href="#1146">1146</a>           refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1147" href="#1147">1147</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1148" href="#1148">1148</a>           <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="1149" href="#1149">1149</a>         }
+<a class="jxr_linenumber" name="1150" href="#1150">1150</a>         assertEquals(0, refCount);
+<a class="jxr_linenumber" name="1151" href="#1151">1151</a>       }
+<a class="jxr_linenumber" name="1152" href="#1152">1152</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1153" href="#1153">1153</a>       <strong class="jxr_keyword">if</strong> (table != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1154" href="#1154">1154</a>         table.close();
+<a class="jxr_linenumber" name="1155" href="#1155">1155</a>       }
+<a class="jxr_linenumber" name="1156" href="#1156">1156</a>     }
+<a class="jxr_linenumber" name="1157" href="#1157">1157</a>   }
+<a class="jxr_linenumber" name="1158" href="#1158">1158</a> 
+<a class="jxr_linenumber" name="1159" href="#1159">1159</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {
+<a class="jxr_linenumber" name="1160" href="#1160">1160</a>     <strong class="jxr_keyword">int</strong> refCount;
+<a class="jxr_linenumber" name="1161" href="#1161">1161</a>     <strong class="jxr_keyword">while</strong> (iterator.hasNext()) {
+<a class="jxr_linenumber" name="1162" href="#1162">1162</a>       <a href="../../../../../org/apache/hadoop/hbase/io/hfile/TestCachedBlockQueue.html">CachedBlock</a> next = iterator.next();
+<a class="jxr_linenumber" name="1163" href="#1163">1163</a>       BlockCacheKey cacheKey = <strong class="jxr_keyword">new</strong> BlockCacheKey(next.getFilename(), next.getOffset());
+<a class="jxr_linenumber" name="1164" href="#1164">1164</a>       <strong class="jxr_keyword">if</strong> (cache instanceof BucketCache) {
+<a class="jxr_linenumber" name="1165" href="#1165">1165</a>         refCount = ((BucketCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1166" href="#1166">1166</a>       } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (cache instanceof CombinedBlockCache) {
+<a class="jxr_linenumber" name="1167" href="#1167">1167</a>         refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="1168" href="#1168">1168</a>       } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1169" href="#1169">1169</a>         <strong class="jxr_keyword">continue</strong>;
 <a class="jxr_linenumber" name="1170" href="#1170">1170</a>       }
-<a class="jxr_linenumber" name="1171" href="#1171">1171</a>     }
-<a class="jxr_linenumber" name="1172" href="#1172">1172</a>   }
-<a class="jxr_linenumber" name="1173" href="#1173">1173</a> 
-<a class="jxr_linenumber" name="1174" href="#1174">1174</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/client/TestBlockEvictionFromClient.html">GetThread</a> <strong class="jxr_keyword">extends</strong> Thread {
-<a class="jxr_linenumber" name="1175" href="#1175">1175</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HTable table;
-<a class="jxr_linenumber" name="1176" href="#1176">1176</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> tracker;
-<a class="jxr_linenumber" name="1177" href="#1177">1177</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> multipleCFs;
-<a class="jxr_linenumber" name="1178" href="#1178">1178</a> 
-<a class="jxr_linenumber" name="1179" href="#1179">1179</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">GetThread</a>(HTable table, <strong class="jxr_keyword">boolean</strong> tracker, <strong class="jxr_keyword">boolean</strong> multipleCFs) {
-<a class="jxr_linenumber" name="1180" href="#1180">1180</a>       <strong class="jxr_keyword">this</strong>.table = table;
-<a class="jxr_linenumber" name="1181" href="#1181">1181</a>       <strong class="jxr_keyword">this</strong>.tracker = tracker;
-<a class="jxr_linenumber" name="1182" href="#1182">1182</a>       <strong class="jxr_keyword">this</strong>.multipleCFs = multipleCFs;
-<a class="jxr_linenumber" name="1183" href="#1183">1183</a>     }
-<a class="jxr_linenumber" name="1184" href="#1184">1184</a> 
-<a class="jxr_linenumber" name="1185" href="#1185">1185</a>     @Override
-<a class="jxr_linenumber" name="1186" href="#1186">1186</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="1187" href="#1187">1187</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1188" href="#1188">1188</a>         initiateGet(table);
-<a class="jxr_linenumber" name="1189" href="#1189">1189</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="1190" href="#1190">1190</a>         <em class="jxr_comment">// do nothing</em>
-<a class="jxr_linenumber" name="1191" href="#1191">1191</a>       }
-<a class="jxr_linenumber" name="1192" href="#1192">1192</a>     }
-<a class="jxr_linenumber" name="1193" href="#1193">1193</a> 
-<a class="jxr_linenumber" name="1194" href="#1194">1194</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> initiateGet(HTable table) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1195" href="#1195">1195</a>       Get get = <strong class="jxr_keyword">new</strong> Get(ROW);
-<a class="jxr_linenumber" name="1196" href="#1196">1196</a>       <strong class="jxr_keyword">if</strong> (tracker) {
-<a class="jxr_linenumber" name="1197" href="#1197">1197</a>         <em class="jxr_comment">// Change this</em>
-<a class="jxr_linenumber" name="1198" href="#1198">1198</a>         <strong class="jxr_keyword">if</strong> (!multipleCFs) {
-<a class="jxr_linenumber" name="1199" href="#1199">1199</a>           get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3));
-<a class="jxr_linenumber" name="1200" href="#1200">1200</a>           get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8));
-<a class="jxr_linenumber" name="1201" href="#1201">1201</a>           get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9));
-<a class="jxr_linenumber" name="1202" href="#1202">1202</a>           <em class="jxr_comment">// Unknown key</em>
-<a class="jxr_linenumber" name="1203" href="#1203">1203</a>           get.addColumn(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 900));
-<a class="jxr_linenumber" name="1204" href="#1204">1204</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1205" href="#1205">1205</a>           get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 3), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3));
-<a class="jxr_linenumber" name="1206" href="#1206">1206</a>           get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 8), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8));
-<a class="jxr_linenumber" name="1207" href="#1207">1207</a>           get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 9), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9));
-<a class="jxr_linenumber" name="1208" href="#1208">1208</a>           <em class="jxr_comment">// Unknown key</em>
-<a class="jxr_linenumber" name="1209" href="#1209">1209</a>           get.addColumn(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 9), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 900));
-<a class="jxr_linenumber" name="1210" href="#1210">1210</a>         }
-<a class="jxr_linenumber" name="1211" href="#1211">1211</a>       }
-<a class="jxr_linenumber" name="1212" href="#1212">1212</a>       CustomInnerRegionObserver.getCdl().set(latch);
-<a class="jxr_linenumber" name="1213" href="#1213">1213</a>       Result r = table.get(get);
-<a class="jxr_linenumber" name="1214" href="#1214">1214</a>       System.out.println(r);
-<a class="jxr_linenumber" name="1215" href="#1215">1215</a>       <strong class="jxr_keyword">if</strong> (!tracker) {
-<a class="jxr_linenumber" name="1216" href="#1216">1216</a>         assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));
-<a class="jxr_linenumber" name="1217" href="#1217">1217</a>         assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));
-<a class="jxr_linenumber" name="1218" href="#1218">1218</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1219" href="#1219">1219</a>         <strong class="jxr_keyword">if</strong> (!multipleCFs) {
-<a class="jxr_linenumber" name="1220" href="#1220">1220</a>           assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3)), data2));
-<a class="jxr_linenumber" name="1221" href="#1221">1221</a>           assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8)), data2));
-<a class="jxr_linenumber" name="1222" href="#1222">1222</a>           assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9)), data2));
-<a class="jxr_linenumber" name="1223" href="#1223">1223</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1224" href="#1224">1224</a>           assertTrue(Bytes.equals(
-<a class="jxr_linenumber" name="1225" href="#1225">1225</a>               r.getValue(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 3), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 3)),
-<a class="jxr_linenumber" name="1226" href="#1226">1226</a>               data2));
-<a class="jxr_linenumber" name="1227" href="#1227">1227</a>           assertTrue(Bytes.equals(
-<a class="jxr_linenumber" name="1228" href="#1228">1228</a>               r.getValue(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 8), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 8)),
-<a class="jxr_linenumber" name="1229" href="#1229">1229</a>               data2));
-<a class="jxr_linenumber" name="1230" href="#1230">1230</a>           assertTrue(Bytes.equals(
-<a class="jxr_linenumber" name="1231" href="#1231">1231</a>               r.getValue(Bytes.toBytes(<span class="jxr_string">"testFamily"</span> + 9), Bytes.toBytes(<span class="jxr_string">"testQualifier"</span> + 9)),
-<a class="jxr_linenumber" name="1232" href="#1232">1232</a>               data2));
-<a class="jxr_linenumber" name="1233" href="#1233">1233</a>         }
-<a class="jxr_linenumber" name="1234" href="#1234">1234</a>       }
-<a class="jxr_linenumber" name="1235" href="#1235">1235</a>     }
-<a class="jxr_linenumber" name="1236" href="#1236">1236</a>   }
-<a class="jxr_linenumber" name="1237" href="#1237">1237</a> 
-<a class="jxr_linenumber" name="1238" href="#1238">1238</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/client/TestBlockEvictionFromClient.html">ScanThread</a> <strong class="jxr_keyword">extends</strong> Thread {
-<a class="jxr_linenumber" name="1239" href="#1239">1239</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HTable table;
-<a class="jxr_linenumber" name="1240" href="#1240">1240</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> reverse;
-<a class="jxr_linenumber" name="1241" href="#1241">1241</a> 
-<a class="jxr_linenumber" name="1242" href="#1242">1242</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">ScanThread</a>(HTable table, <strong class="jxr_keyword">boolean</strong> reverse) {
-<a class="jxr_linenumber" name="1243" href="#1243">1243</a>       <strong class="jxr_keyword">this</strong>.table = table;
-<a class="jxr_linenumber" name="1244" href="#1244">1244</a>       <strong class="jxr_keyword">this</strong>.reverse = reverse;
-<a class="jxr_linenumber" name="1245" href="#1245">1245</a>     }
-<a class="jxr_linenumber" name="1246" href="#1246">1246</a> 
-<a class="jxr_linenumber" name="1247" href="#1247">1247</a>     @Override
-<a class="jxr_linenumber" name="1248" href="#1248">1248</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="1249" href="#1249">1249</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1250" href="#1250">1250</a>         initiateScan(table);
-<a class="jxr_linenumber" name="1251" href="#1251">1251</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="1252" href="#1252">1252</a>         <em class="jxr_comment">// do nothing</em>
-<a class="jxr_linenumber" name="1253" href="#1253">1253</a>       }
-<a class="jxr_linenumber" name="1254" href="#1254">1254</a>     }
-<a class="jxr_linenumber" name="1255" href="#1255">1255</a> 
-<a class="jxr_linenumber" name="1256" href="#1256">1256</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> initiateScan(HTable table) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1257" href="#1257">1257</a>       Scan scan = <strong class="jxr_keyword">new</strong> Scan();
-<a class="jxr_linenumber" name="1258" href="#1258">1258</a>       <strong class="jxr_keyword">if</strong> (reverse) {
-<a class="jxr_linenumber" name="1259" href="#1259">1259</a>         scan.setReversed(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="1260" href="#1260">1260</a>       }
-<a class="jxr_linenumber" name="1261" href="#1261">1261</a>       CustomInnerRegionObserver.getCdl().set(latch);
-<a class="jxr_linenumber" name="1262" href="#1262">1262</a>       ResultScanner resScanner = table.getScanner(scan);
-<a class="jxr_linenumber" name="1263" href="#1263">1263</a>       <strong class="jxr_keyword">int</strong> i = (reverse ? ROWS.length - 1 : 0);
-<a class="jxr_linenumber" name="1264" href="#1264">1264</a>       <strong class="jxr_keyword">boolean</strong> resultFound = false;
-<a class="jxr_linenumber" name="1265" href="#1265">1265</a>       <strong class="jxr_keyword">for</strong> (Result result : resScanner) {
-<a class="jxr_linenumber" name="1266" href="#1266">1266</a>         resultFound = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1267" href="#1267">1267</a>         System.out.println(result);
-<a class="jxr_linenumber" name="1268" href="#1268">1268</a>         <strong class="jxr_keyword">if</strong> (!reverse) {
-<a class="jxr_linenumber" name="1269" href="#1269">1269</a>           assertTrue(Bytes.equals(result.getRow(), ROWS[i]));
-<a class="jxr_linenumber" name="1270" href="#1270">1270</a>           i++;
-<a class="jxr_linenumber" name="1271" href="#1271">1271</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1272" href="#1272">1272</a>           assertTrue(Bytes.equals(result.getRow(), ROWS[i]));
-<a class="jxr_linenumber" name="1273" href="#1273">1273</a>           i--;
-<a class="jxr_linenumber" name="1274" href="#1274">1274</a>         }
-<a class="jxr_linenumber" name="1275" href="#1275">1275</a>       }
-<a class="jxr_linenumber" name="1276" href="#1276">1276</a>       assertTrue(resultFound);
-<a class="jxr_linenumber" name="1277" href="#1277">1277</a>     }
-<a class="jxr_linenumber" name="1278" href="#1278">1278</a>   }
-<a class="jxr_linenumber" name="1279" href="#1279">1279</a> 
-<a class="jxr_linenumber" name="1280" href="#1280">1280</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> waitForStoreFileCount(Store store, <strong class="jxr_keyword">int</strong> count, <strong class="jxr_keyword">int</strong> timeout)
-<a class="jxr_linenumber" name="1281" href="#1281">1281</a>       <strong class="jxr_keyword">throws</strong> InterruptedException {
-<a class="jxr_linenumber" name="1282" href="#1282">1282</a>     <strong class="jxr_keyword">long</strong> start = System.currentTimeMillis();
-<a class="jxr_linenumber" name="1283" href="#1283">1283</a>     <strong class="jxr_keyword">while</strong> (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {
-<a class="jxr_linenumber" name="1284" href="#1284">1284</a>       Thread.sleep(100);
-<a class="jxr_linenumber" name="1285" href="#1285">1285</a>     }
-<a class="jxr_linenumber" name="1286" href="#1286">1286</a>     System.out.println(<span class="jxr_string">"start="</span> + start + <span class="jxr_string">", now="</span> + System.currentTimeMillis() + <span class="jxr_string">", cur="</span>
-<a class="jxr_linenumber" name="1287" href="#1287">1287</a>         + store.getStorefilesCount());
-<a class="jxr_linenumber" name="1288" href="#1288">1288</a>     assertEquals(count, store.getStorefilesCount());
-<a class="jxr_linenumber" name="1289" href="#1289">1289</a>   }
-<a class="jxr_linenumber" name="1290" href="#1290">1290</a> 
-<a class="jxr_linenumber" name="1291" href="#1291">1291</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/coprocessor/TestCoprocessorInterface.html">CustomScanner</a> <strong class="jxr_keyword">implements</strong> RegionScanner {
-<a class="jxr_linenumber" name="1292" href="#1292">1292</a> 
-<a class="jxr_linenumber" name="1293" href="#1293">1293</a>     <strong class="jxr_keyword">private</strong> RegionScanner delegate;
-<a class="jxr_linenumber" name="1294" href="#1294">1294</a> 
-<a class="jxr_linenumber" name="1295" href="#1295">1295</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html">CustomScanner</a>(RegionScanner delegate) {
-<a class="jxr_linenumber" name="1296" href="#1296">1296</a>       <strong class="jxr_keyword">this</strong>.delegate = delegate;
-<a class="jxr_linenumber" name="1297" href="#1297">1297</a>     }
-<a class="jxr_linenumber" name="1298" href="#1298">1298</a> 
-<a class="jxr_linenumber" name="1299" href="#1299">1299</a>     @Override
-<a class="jxr_linenumber" name="1300" href="#1300">1300</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> next(List&lt;Cell&gt; results) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1301" href="#1301">1301</a>       <strong class="jxr_keyword">return</strong> delegate.next(results);
-<a class="jxr_linenumber" name="1302" href="#1302">1302</a>     }
-<a class="jxr_linenumber" name="1303" href="#1303">1303</a> 
-<a class="jxr_linenumber" name="1304" href="#1304">1304</a>     @Override
-<a class="jxr_linenumber" name="1305" href="#1305">1305</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> next(List&lt;Cell&gt; result, ScannerContext scannerContext) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1306" href="#1306">1306</a>       <strong class="jxr_keyword">return</strong> delegate.next(result, scannerContext);
-<a class="jxr_linenumber" name="1307" href="#1307">1307</a>     }
-<a class="jxr_linenumber" name="1308" href="#1308">1308</a> 
-<a class="jxr_linenumber" name="1309" href="#1309">1309</a>     @Override
-<a class="jxr_linenumber" name="1310" href="#1310">1310</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> nextRaw(List&lt;Cell&gt; result) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1311" href="#1311">1311</a>       <strong class="jxr_keyword">return</strong> delegate.nextRaw(result);
-<a class="jxr_linenumber" name="1312" href="#1312">1312</a>     }
-<a class="jxr_linenumber" name="1313" href="#1313">1313</a> 
-<a class="jxr_linenumber" name="1314" href="#1314">1314</a>     @Override
-<a class="jxr_linenumber" name="1315" href="#1315">1315</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> nextRaw(List&lt;Cell&gt; result, ScannerContext context) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1316" href="#1316">1316</a>       <strong class="jxr_keyword">boolean</strong> nextRaw = delegate.nextRaw(result, context);
-<a class="jxr_linenumber" name="1317" href="#1317">1317</a>       <strong class="jxr_keyword">if</strong> (compactionLatch != <strong class="jxr_keyword">null</strong> &amp;&amp; compactionLatch.getCount() &gt; 0) {
-<a class="jxr_linenumber" name="1318" href="#1318">1318</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1319" href="#1319">1319</a>           compactionLatch.await();
-<a class="jxr_linenumber" name="1320" href="#1320">1320</a>         } <strong class="jxr_keyword">catch</strong> (InterruptedException ie) {
-<a class="jxr_linenumber" name="1321" href="#1321">1321</a>         }
-<a class="jxr_linenumber" name="1322" href="#1322">1322</a>       }
-<a class="jxr_linenumber" name="1323" href="#1323">1323</a> 
-<a class="jxr_linenumber" name="1324" href="#1324">1324</a>       <strong class="jxr_keyword">if</strong> (CustomInnerRegionObserver.throwException.get()) {
-<a class="jxr_linenumber" name="1325" href="#1325">1325</a>         <strong class="jxr_keyword">if</strong> (exceptionLatch.getCount() &gt; 0) {
-<a class="jxr_linenumber" name="1326" href="#1326">1326</a>           <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1327" href="#1327">1327</a>             exceptionLatch.await();
-<a class="jxr_linenumber" name="1328" href="#1328">1328</a>           } <strong class="jxr_keyword">catch</strong> (InterruptedException e) {
-<a class="jxr_linenumber" name="1329" href="#1329">1329</a>           }
-<a class="jxr_linenumber" name="1330" href="#1330">1330</a>           <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"throw exception"</span>);
-<a class="jxr_linenumber" name="1331" href="#1331">1331</a>         }
-<a class="jxr_linenumber" name="1332" href="#1332">1332</a>       }
-<a class="jxr_linenumber" name="1333" href="#1333">1333</a>       <strong class="jxr_keyword">return</strong> nextRaw;
-<a class="jxr_linenumber" name="1334" href="#1334">1334</a>     }
-<a class="jxr_linenumber" name="1335" href="#1335">1335</a> 
-<a class="jxr_linenumber" name="1336" href="#1336">1336</a>     @Override
-<a class="jxr_linenumber" name="1337" href="#1337">1337</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> close() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1338" href="#1338">1338</a>       delegate.close();
-<a class="jxr_linenumber" name="1339" href="#1339">1339</a>     }
-<a class="jxr_linenumber" name="1340" href="#1340">1340</a> 
-<a class="jxr_linenumber" name="1341" href="#1341">1341</a>     @Override
-<a class="jxr_linenumber" name="1342" href="#1342">1342</a>     <strong class="jxr_keyword">public</strong> HRegionInfo getRegionInfo() {
-<a class="jxr_linenumber" name="1343" href="#1343">1343</a>       <strong class="jxr_keyword">return</strong> delegate.getRegionInfo();
-<a class="jxr_linenumber" name="1344" href="#1344">1344</a>     }
-<a class="jxr_linenumber" name="1345" href="#1345">1345</a> 
-<a class="jxr_linenumber" name="1346" href="#1346">1346</a>     @Override
-<a class="jxr_linenumber" name="1347" href="#1347">1347</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isFilterDone() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1348" href="#1348">1348</a>       <strong class="jxr_keyword">return</strong> delegate.isFilterDone();
-<a class="jxr_linenumber" name="1349" href="#1349">1349</a>     }
-<a class="jxr_linenumber" name="1350" href="#1350">1350</a> 
-<a class="jxr_linenumber" name="1351" href="#1351">1351</a>     @Override
-<a class="jxr_linenumber" name="1352" href="#1352">1352</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> reseek(byte[] row) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1353" href="#1353">1353</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1354" href="#1354">1354</a>     }
-<a class="jxr_linenumber" name="1355" href="#1355">1355</a> 
-<a class="jxr_linenumber" name="1356" href="#1356">1356</a>     @Override
-<a class="jxr_linenumber" name="1357" href="#1357">1357</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getMaxResultSize() {
-<a class="jxr_linenumber" name="1358" href="#1358">1358</a>       <strong class="jxr_keyword">return</strong> delegate.getMaxResultSize();
-<a class="jxr_linenumber" name="1359" href="#1359">1359</a>     }
-<a class="jxr_linenumber" name="1360" href="#1360">1360</a> 
-<a class="jxr_linenumber" name="1361" href="#1361">1361</a>     @Override
-<a class="jxr_linenumber" name="1362" href="#1362">1362</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getMvccReadPoint() {
-<a class="jxr_linenumber" name="1363" href="#1363">1363</a>       <strong class="jxr_keyword">return</strong> delegate.getMvccReadPoint();
-<a class="jxr_linenumber" name="1364" href="#1364">1364</a>     }
-<a class="jxr_linenumber" name="1365" href="#1365">1365</a> 
-<a class="jxr_linenumber" name="1366" href="#1366">1366</a>     @Override
-<a class="jxr_linenumber" name="1367" href="#1367">1367</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getBatch() {
-<a class="jxr_linenumber" name="1368" href="#1368">1368</a>       <strong class="jxr_keyword">return</strong> delegate.getBatch();
-<a class="jxr_linenumber" name="1369" href="#1369">1369</a>     }
-<a class="jxr_linenumber" name="1370" href="#1370">1370</a> 
-<a class="jxr_linenumber" name="1371" href="#1371">1371</a>     @Override
-<a class="jxr_linenumber" name="1372" href="#1372">1372</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> shipped() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1373" href="#1373">1373</a>       <strong class="jxr_keyword">this</strong>.delegate.shipped();
-<a class="jxr_linenumber" name="1374" href="#1374">1374</a>     }
-<a class="jxr_linenumber" name="1375" href="#1375">1375</a>   }
-<a class="jxr_linenumber" name="1376" href="#1376">1376</a> 
-<a class="jxr_linenumber" name="1377" href="#1377">1377</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/client/TestBlockEvictionFromClient.html">CustomInnerRegionObserverWrapper</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html">CustomInnerRegionObserver</a> {
-<a class="jxr_linenumber" name="1378" href="#1378">1378</a>     @Override
-<a class="jxr_linenumber" name="1379" href="#1379">1379</a>     <strong class="jxr_keyword">public</strong> RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,
-<a class="jxr_linenumber" name="1380" href="#1380">1380</a>         Scan scan, RegionScanner s) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1381" href="#1381">1381</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html">CustomScanner</a>(s);
-<a class="jxr_linenumber" name="1382" href="#1382">1382</a>     }
-<a class="jxr_linenumber" name="1383" href="#1383">1383</a>   }
-<a class="jxr_linenumber" na

<TRUNCATED>

[21/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 7ba7576..82b96c4 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -1906,6 +1906,7 @@
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="strong">TestColumnPrefixFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestColumnRangeFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="strong">TestColumnRangeFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestColumnSeeking.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">TestColumnSeeking</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCombinedBlockCache</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/TestCompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver.compactions"><span class="strong">TestCompactedHFilesDischarger</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestCompaction.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">TestCompaction</span></a>
 <ul>


[29/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
index 606c077..0f3725c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
@@ -35,865 +35,885 @@
 <span class="sourceLineNo">027</span>import java.util.NavigableSet;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Set;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.concurrent.CountDownLatch;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Cell;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HConstants;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.IsolationLevel;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.executor.ExecutorService;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import com.google.common.annotations.VisibleForTesting;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * into List&amp;lt;KeyValue&amp;gt; for a single row.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>@InterfaceAudience.Private<a name="line.56"></a>
-<span class="sourceLineNo">057</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  // In unit tests, the store could be null<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected final Store store;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  protected ScanQueryMatcher matcher;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  protected KeyValueHeap heap;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  protected boolean cacheBlocks;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  protected int countPerRow = 0;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  protected int storeLimit = -1;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  protected int storeOffset = 0;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  // Doesnt need to be volatile because it's always accessed via synchronized methods<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  protected boolean closing = false;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  protected final boolean get;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  protected final boolean explicitColumnQuery;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  protected final boolean useRowColBloom;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  /**<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  protected boolean parallelSeekEnabled = false;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  protected ExecutorService executor;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  protected final Scan scan;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected final NavigableSet&lt;byte[]&gt; columns;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected final long oldestUnexpiredTS;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  protected final long now;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected final int minVersions;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  protected final long maxRowSize;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected final long cellsPerHeartbeatCheck;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // Collects all the KVHeap that are eagerly getting closed during the<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  // course of a scan<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected Set&lt;KeyValueHeap&gt; heapsForDelayedClose = new HashSet&lt;KeyValueHeap&gt;();<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private long kvsScanned = 0;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private Cell prevCell = null;<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected static boolean lazySeekEnabledGlobally =<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      LAZY_SEEK_ENABLED_BY_DEFAULT;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * timeout checks.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  // if heap == null and lastTop != null, you need to reseek given the key below<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  protected Cell lastTop = null;<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  // A flag whether use pread for scan<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private boolean scanUsePread = false;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // Indicates whether there was flush during the course of the scan<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  protected volatile boolean flushed = false;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  <a name="line.129"></a>
-<span class="sourceLineNo">130</span>  protected final long readPt;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  enum StoreScannerCompactionRace {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    BEFORE_SEEK,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    AFTER_SEEK,<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    COMPACT_COMPLETE<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.IsolationLevel;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.executor.ExecutorService;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import com.google.common.annotations.VisibleForTesting;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * into List&amp;lt;KeyValue&amp;gt; for a single row.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>@InterfaceAudience.Private<a name="line.57"></a>
+<span class="sourceLineNo">058</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // In unit tests, the store could be null<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  protected final Store store;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  protected ScanQueryMatcher matcher;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected KeyValueHeap heap;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  protected boolean cacheBlocks;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  protected int countPerRow = 0;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  protected int storeLimit = -1;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  protected int storeOffset = 0;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  // Doesnt need to be volatile because it's always accessed via synchronized methods<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  protected boolean closing = false;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected final boolean get;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  protected final boolean explicitColumnQuery;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  protected final boolean useRowColBloom;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  /**<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  protected boolean parallelSeekEnabled = false;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  protected ExecutorService executor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  protected final Scan scan;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected final NavigableSet&lt;byte[]&gt; columns;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected final long oldestUnexpiredTS;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected final long now;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected final int minVersions;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected final long maxRowSize;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected final long cellsPerHeartbeatCheck;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  // Collects all the KVHeap that are eagerly getting closed during the<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  // course of a scan<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected Set&lt;KeyValueHeap&gt; heapsForDelayedClose = new HashSet&lt;KeyValueHeap&gt;();<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private long kvsScanned = 0;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private Cell prevCell = null;<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  protected static boolean lazySeekEnabledGlobally =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      LAZY_SEEK_ENABLED_BY_DEFAULT;<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>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * timeout checks.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  // if heap == null and lastTop != null, you need to reseek given the key below<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  protected Cell lastTop = null;<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  // A flag whether use pread for scan<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private boolean scanUsePread = false;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  // Indicates whether there was flush during the course of the scan<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  protected volatile boolean flushed = false;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // generally we get one file from a flush<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  protected List&lt;StoreFile&gt; flushedStoreFiles = new ArrayList&lt;StoreFile&gt;(1);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // The current list of scanners<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  protected List&lt;KeyValueScanner&gt; currentScanners = new ArrayList&lt;KeyValueScanner&gt;();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // flush update lock<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private ReentrantLock flushLock = new ReentrantLock();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  <a name="line.136"></a>
+<span class="sourceLineNo">137</span>  protected final long readPt;<a name="line.137"></a>
 <span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  /** An internal constructor. */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  protected StoreScanner(Store store, Scan scan, final ScanInfo scanInfo,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      final NavigableSet&lt;byte[]&gt; columns, long readPt, boolean cacheBlocks) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    this.readPt = readPt;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    this.store = store;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this.cacheBlocks = cacheBlocks;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    get = scan.isGetScan();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    int numCol = columns == null ? 0 : columns.size();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    explicitColumnQuery = numCol &gt; 0;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    this.scan = scan;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    this.columns = columns;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.now = EnvironmentEdgeManager.currentTime();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    this.oldestUnexpiredTS = now - scanInfo.getTtl();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    this.minVersions = scanInfo.getMinVersions();<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>     // We look up row-column Bloom filters for multi-column queries as part of<a name="line.154"></a>
-<span class="sourceLineNo">155</span>     // the seek operation. However, we also look the row-column Bloom filter<a name="line.155"></a>
-<span class="sourceLineNo">156</span>     // for multi-row (non-"get") scans because this is not done in<a name="line.156"></a>
-<span class="sourceLineNo">157</span>     // StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).<a name="line.157"></a>
-<span class="sourceLineNo">158</span>     this.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>     this.maxRowSize = scanInfo.getTableMaxRowSize();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>     this.scanUsePread = scan.isSmall()? true: scanInfo.isUsePread();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>     this.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>     // Parallel seeking is on if the config allows and more there is more than one store file.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>     if (this.store != null &amp;&amp; this.store.getStorefilesCount() &gt; 1) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>       RegionServerServices rsService = ((HStore)store).getHRegion().getRegionServerServices();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>       if (rsService != null &amp;&amp; scanInfo.isParallelSeekEnabled()) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>         this.parallelSeekEnabled = true;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>         this.executor = rsService.getExecutorService();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * are not in a compaction.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   *<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param store who we scan<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param scan the spec<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param columns which columns we are scanning<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @throws IOException<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, final NavigableSet&lt;byte[]&gt; columns,<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      long readPt)<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  throws IOException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    if (columns != null &amp;&amp; scan.isRaw()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      throw new DoNotRetryIOException("Cannot specify any column for a raw scan");<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    matcher = new ScanQueryMatcher(scan, scanInfo, columns,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        ScanType.USER_SCAN, Long.MAX_VALUE, HConstants.LATEST_TIMESTAMP,<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    this.store.addChangedReaderObserver(this);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // Pass columns to try to filter out unnecessary StoreFiles.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // key does not exist, then to the start of the next matching Row).<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // family marker.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        &amp;&amp; lazySeekEnabledGlobally, parallelSeekEnabled);<a name="line.203"></a>
+<span class="sourceLineNo">139</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  enum StoreScannerCompactionRace {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    BEFORE_SEEK,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    AFTER_SEEK,<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    COMPACT_COMPLETE<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>  /** An internal constructor. */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  protected StoreScanner(Store store, Scan scan, final ScanInfo scanInfo,<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      final NavigableSet&lt;byte[]&gt; columns, long readPt, boolean cacheBlocks) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    this.readPt = readPt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    this.store = store;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    this.cacheBlocks = cacheBlocks;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    get = scan.isGetScan();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    int numCol = columns == null ? 0 : columns.size();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    explicitColumnQuery = numCol &gt; 0;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    this.scan = scan;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    this.columns = columns;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.now = EnvironmentEdgeManager.currentTime();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    this.oldestUnexpiredTS = now - scanInfo.getTtl();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.minVersions = scanInfo.getMinVersions();<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>     // We look up row-column Bloom filters for multi-column queries as part of<a name="line.161"></a>
+<span class="sourceLineNo">162</span>     // the seek operation. However, we also look the row-column Bloom filter<a name="line.162"></a>
+<span class="sourceLineNo">163</span>     // for multi-row (non-"get") scans because this is not done in<a name="line.163"></a>
+<span class="sourceLineNo">164</span>     // StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).<a name="line.164"></a>
+<span class="sourceLineNo">165</span>     this.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>     this.maxRowSize = scanInfo.getTableMaxRowSize();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>     this.scanUsePread = scan.isSmall()? true: scanInfo.isUsePread();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>     this.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>     // Parallel seeking is on if the config allows and more there is more than one store file.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>     if (this.store != null &amp;&amp; this.store.getStorefilesCount() &gt; 1) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       RegionServerServices rsService = ((HStore)store).getHRegion().getRegionServerServices();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>       if (rsService != null &amp;&amp; scanInfo.isParallelSeekEnabled()) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parallelSeekEnabled = true;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.executor = rsService.getExecutorService();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>       }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>     }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  protected void addCurrentScanners(List&lt;? extends KeyValueScanner&gt; scanners) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.currentScanners.addAll(scanners);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * are not in a compaction.<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   *<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * @param store who we scan<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @param scan the spec<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @param columns which columns we are scanning<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @throws IOException<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, final NavigableSet&lt;byte[]&gt; columns,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      long readPt)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  throws IOException {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (columns != null &amp;&amp; scan.isRaw()) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      throw new DoNotRetryIOException("Cannot specify any column for a raw scan");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    matcher = new ScanQueryMatcher(scan, scanInfo, columns,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        ScanType.USER_SCAN, Long.MAX_VALUE, HConstants.LATEST_TIMESTAMP,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.store.addChangedReaderObserver(this);<a name="line.203"></a>
 <span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // set storeLimit<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    this.storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.206"></a>
+<span class="sourceLineNo">205</span>    // Pass columns to try to filter out unnecessary StoreFiles.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();<a name="line.206"></a>
 <span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // set rowOffset<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    this.storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // Combine all seeked scanners with a heap<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    resetKVHeap(scanners, store.getComparator());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">208</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // key does not exist, then to the start of the next matching Row).<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // family marker.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        &amp;&amp; lazySeekEnabledGlobally, parallelSeekEnabled);<a name="line.213"></a>
 <span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Used for compactions.&lt;p&gt;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * Opens a scanner across specified StoreFiles.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * @param store who we scan<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param scan the spec<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param scanners ancillary scanners<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param smallestReadPoint the readPoint that we should use for tracking<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   *          versions<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      long smallestReadPoint, long earliestPutTs) throws IOException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, null, null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   *<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * Opens a scanner across specified StoreFiles.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @param store who we scan<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @param scan the spec<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * @param scanners ancillary scanners<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param smallestReadPoint the readPoint that we should use for tracking versions<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      List&lt;? extends KeyValueScanner&gt; scanners, long smallestReadPoint, long earliestPutTs,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    this(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        earliestPutTs, dropDeletesFromRow, dropDeletesToRow);<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>  private StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType, long smallestReadPoint,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this(store, scan, scanInfo, null,<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      ((HStore)store).getHRegion().getReadpoint(IsolationLevel.READ_COMMITTED), false);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (dropDeletesFromRow == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, scanType, smallestReadPoint,<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          earliestPutTs, oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    } else {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, smallestReadPoint, earliestPutTs,<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow, store.getCoprocessorHost());<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>    // Filter the list of scanners using Bloom filters, time range, TTL, etc.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    scanners = selectScannersFrom(scanners);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Seek all scanners to the initial key<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    // Combine all seeked scanners with a heap<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    resetKVHeap(scanners, store.getComparator());<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">215</span>    // set storeLimit<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    this.storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // set rowOffset<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    this.storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    addCurrentScanners(scanners);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    // Combine all seeked scanners with a heap<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    resetKVHeap(scanners, store.getComparator());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * Used for compactions.&lt;p&gt;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * Opens a scanner across specified StoreFiles.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param store who we scan<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param scan the spec<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param scanners ancillary scanners<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param smallestReadPoint the readPoint that we should use for tracking<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   *          versions<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      long smallestReadPoint, long earliestPutTs) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, null, null);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   *<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * Opens a scanner across specified StoreFiles.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param store who we scan<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param scan the spec<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @param scanners ancillary scanners<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * @param smallestReadPoint the readPoint that we should use for tracking versions<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      List&lt;? extends KeyValueScanner&gt; scanners, long smallestReadPoint, long earliestPutTs,<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    this(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        earliestPutTs, dropDeletesFromRow, dropDeletesToRow);<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>  private StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType, long smallestReadPoint,<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    this(store, scan, scanInfo, null,<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      ((HStore)store).getHRegion().getReadpoint(IsolationLevel.READ_COMMITTED), false);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (dropDeletesFromRow == null) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, scanType, smallestReadPoint,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          earliestPutTs, oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    } else {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, smallestReadPoint, earliestPutTs,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow, store.getCoprocessorHost());<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>  @VisibleForTesting<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final List&lt;KeyValueScanner&gt; scanners) throws IOException {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    this(scan, scanInfo, scanType, columns, scanners,<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        HConstants.LATEST_TIMESTAMP,<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        // 0 is passed as readpoint because the test bypasses Store<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        0);<a name="line.279"></a>
+<span class="sourceLineNo">272</span>    // Filter the list of scanners using Bloom filters, time range, TTL, etc.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    scanners = selectScannersFrom(scanners);<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    // Seek all scanners to the initial key<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    addCurrentScanners(scanners);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    // Combine all seeked scanners with a heap<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    resetKVHeap(scanners, store.getComparator());<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>  @VisibleForTesting<a name="line.282"></a>
 <span class="sourceLineNo">283</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs)<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        throws IOException {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    this(scan, scanInfo, scanType, columns, scanners, earliestPutTs,<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      // 0 is passed as readpoint because the test bypasses Store<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      0);<a name="line.289"></a>
+<span class="sourceLineNo">284</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      final List&lt;KeyValueScanner&gt; scanners) throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    this(scan, scanInfo, scanType, columns, scanners,<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        HConstants.LATEST_TIMESTAMP,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        // 0 is passed as readpoint because the test bypasses Store<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        0);<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>  public StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs, long readPt)<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  throws IOException {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    this(null, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.matcher = new ScanQueryMatcher(scan, scanInfo, columns, scanType,<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Long.MAX_VALUE, earliestPutTs, oldestUnexpiredTS, now, null);<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>    // In unit tests, the store could be null<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    if (this.store != null) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.store.addChangedReaderObserver(this);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // Seek all scanners to the initial key<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    resetKVHeap(scanners, scanInfo.getComparator());<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>   * Get a filtered list of scanners. Assumes we are not in a compaction.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return list of scanners to seek<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  protected List&lt;KeyValueScanner&gt; getScannersNoCompaction() throws IOException {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    final boolean isCompaction = false;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    boolean usePread = get || scanUsePread;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return selectScannersFrom(store.getScanners(cacheBlocks, get, usePread,<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        isCompaction, matcher, scan.getStartRow(), scan.getStopRow(), this.readPt));<a name="line.317"></a>
+<span class="sourceLineNo">292</span>  @VisibleForTesting<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs)<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        throws IOException {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    this(scan, scanInfo, scanType, columns, scanners, earliestPutTs,<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      // 0 is passed as readpoint because the test bypasses Store<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      0);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs, long readPt)<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  throws IOException {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    this(null, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this.matcher = new ScanQueryMatcher(scan, scanInfo, columns, scanType,<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        Long.MAX_VALUE, earliestPutTs, oldestUnexpiredTS, now, null);<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    // In unit tests, the store could be null<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (this.store != null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.store.addChangedReaderObserver(this);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    // Seek all scanners to the initial key<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    addCurrentScanners(scanners);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    resetKVHeap(scanners, scanInfo.getComparator());<a name="line.317"></a>
 <span class="sourceLineNo">318</span>  }<a name="line.318"></a>
 <span class="sourceLineNo">319</span><a name="line.319"></a>
 <span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * Seek the specified scanners with the given key<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @param scanners<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param seekKey<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param isLazy true if using lazy seek<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @param isParallelSeek true if using parallel seek<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @throws IOException<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  protected void seekScanners(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      Cell seekKey, boolean isLazy, boolean isParallelSeek)<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      throws IOException {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // key does not exist, then to the start of the next matching Row).<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    // family marker.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    if (isLazy) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      for (KeyValueScanner scanner : scanners) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        scanner.requestSeek(seekKey, false, true);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      }<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } else {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      if (!isParallelSeek) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        long totalScannersSoughtBytes = 0;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        for (KeyValueScanner scanner : scanners) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>          if (totalScannersSoughtBytes &gt;= maxRowSize) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            throw new RowTooBigException("Max row size allowed: " + maxRowSize<a name="line.344"></a>
-<span class="sourceLineNo">345</span>              + ", but row is bigger than that");<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          scanner.seek(seekKey);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          Cell c = scanner.peek();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          if (c != null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>            totalScannersSoughtBytes += CellUtil.estimatedSerializedSizeOf(c);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      } else {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        parallelSeek(scanners, seekKey);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  protected void resetKVHeap(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      CellComparator comparator) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    // Combine all seeked scanners with a heap<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    heap = new KeyValueHeap(scanners, comparator);<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>   * Filters the given list of scanners using Bloom filter, time range, and<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * TTL.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  protected List&lt;KeyValueScanner&gt; selectScannersFrom(<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      final List&lt;? extends KeyValueScanner&gt; allScanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    boolean memOnly;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    boolean filesOnly;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if (scan instanceof InternalScan) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      InternalScan iscan = (InternalScan)scan;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      memOnly = iscan.isCheckOnlyMemStore();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      filesOnly = iscan.isCheckOnlyStoreFiles();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      memOnly = false;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      filesOnly = false;<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>    List&lt;KeyValueScanner&gt; scanners =<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        new ArrayList&lt;KeyValueScanner&gt;(allScanners.size());<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    // We can only exclude store files based on TTL if minVersions is set to 0.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    // Otherwise, we might have to return KVs that have technically expired.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    long expiredTimestampCutoff = minVersions == 0 ? oldestUnexpiredTS :<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        Long.MIN_VALUE;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // include only those scan files which pass all filters<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    for (KeyValueScanner kvs : allScanners) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      boolean isFile = kvs.isFileScanner();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      if ((!isFile &amp;&amp; filesOnly) || (isFile &amp;&amp; memOnly)) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        continue;<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>      if (kvs.shouldUseScanner(scan, store, expiredTimestampCutoff)) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        scanners.add(kvs);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return scanners;<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>  @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public Cell peek() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    checkResetHeap();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    if (this.heap == null) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      return this.lastTop;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    return this.heap.peek();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  @Override<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  public KeyValue next() {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // throw runtime exception perhaps?<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    throw new RuntimeException("Never call StoreScanner.next()");<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>  @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public void close() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    close(true);<a name="line.421"></a>
+<span class="sourceLineNo">321</span>   * Get a filtered list of scanners. Assumes we are not in a compaction.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @return list of scanners to seek<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  protected List&lt;KeyValueScanner&gt; getScannersNoCompaction() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final boolean isCompaction = false;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    boolean usePread = get || scanUsePread;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    return selectScannersFrom(store.getScanners(cacheBlocks, get, usePread,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        isCompaction, matcher, scan.getStartRow(), scan.getStopRow(), this.readPt));<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>   * Seek the specified scanners with the given key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param scanners<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param seekKey<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param isLazy true if using lazy seek<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @param isParallelSeek true if using parallel seek<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected void seekScanners(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      Cell seekKey, boolean isLazy, boolean isParallelSeek)<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      throws IOException {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    // key does not exist, then to the start of the next matching Row).<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // family marker.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    if (isLazy) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      for (KeyValueScanner scanner : scanners) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        scanner.requestSeek(seekKey, false, true);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    } else {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (!isParallelSeek) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        long totalScannersSoughtBytes = 0;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        for (KeyValueScanner scanner : scanners) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>          if (totalScannersSoughtBytes &gt;= maxRowSize) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            throw new RowTooBigException("Max row size allowed: " + maxRowSize<a name="line.355"></a>
+<span class="sourceLineNo">356</span>              + ", but row is bigger than that");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          scanner.seek(seekKey);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          Cell c = scanner.peek();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          if (c != null) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>            totalScannersSoughtBytes += CellUtil.estimatedSerializedSizeOf(c);<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>      } else {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        parallelSeek(scanners, seekKey);<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><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  protected void resetKVHeap(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      CellComparator comparator) throws IOException {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    // Combine all seeked scanners with a heap<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    heap = new KeyValueHeap(scanners, comparator);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * Filters the given list of scanners using Bloom filter, time range, and<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * TTL.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected List&lt;KeyValueScanner&gt; selectScannersFrom(<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      final List&lt;? extends KeyValueScanner&gt; allScanners) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    boolean memOnly;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    boolean filesOnly;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (scan instanceof InternalScan) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      InternalScan iscan = (InternalScan)scan;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      memOnly = iscan.isCheckOnlyMemStore();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      filesOnly = iscan.isCheckOnlyStoreFiles();<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    } else {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      memOnly = false;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      filesOnly = false;<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>    List&lt;KeyValueScanner&gt; scanners =<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        new ArrayList&lt;KeyValueScanner&gt;(allScanners.size());<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    // We can only exclude store files based on TTL if minVersions is set to 0.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    // Otherwise, we might have to return KVs that have technically expired.<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    long expiredTimestampCutoff = minVersions == 0 ? oldestUnexpiredTS :<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        Long.MIN_VALUE;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>    // include only those scan files which pass all filters<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    for (KeyValueScanner kvs : allScanners) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      boolean isFile = kvs.isFileScanner();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      if ((!isFile &amp;&amp; filesOnly) || (isFile &amp;&amp; memOnly)) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        continue;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if (kvs.shouldUseScanner(scan, store, expiredTimestampCutoff)) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        scanners.add(kvs);<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>    return scanners;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>  }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public Cell peek() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    checkFlushed();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    if (this.heap == null) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      return this.lastTop;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    return this.heap.peek();<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>  private void close(boolean withHeapClose) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    if (this.closing) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    if (withHeapClose) this.closing = true;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Under test, we dont have a this.store<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (this.store != null) this.store.deleteChangedReaderObserver(this);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (withHeapClose) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      for (KeyValueHeap h : this.heapsForDelayedClose) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        h.close();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      this.heapsForDelayedClose.clear();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      if (this.heap != null) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        this.heap.close();<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        this.heap = null; // CLOSED!<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } else {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      if (this.heap != null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        this.heapsForDelayedClose.add(this.heap);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        this.heap = null;<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>    this.lastTop = null; // If both are null, we are closed.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  public boolean seek(Cell key) throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    checkResetHeap();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // reset matcher state, in case that underlying store changed<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    checkReseek();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    return this.heap.seek(key);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  public boolean next(List&lt;Cell&gt; outResult) throws IOException {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return next(outResult, NoLimitScannerContext.getInstance());<a name="line.459"></a>
+<span class="sourceLineNo">424</span>  @Override<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  public KeyValue next() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    // throw runtime exception perhaps?<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    throw new RuntimeException("Never call StoreScanner.next()");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public void close() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    close(true);<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>  private void close(boolean withHeapClose) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (this.closing) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    if (withHeapClose) this.closing = true;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    // Under test, we dont have a this.store<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    if (this.store != null) this.store.deleteChangedReaderObserver(this);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    if (withHeapClose) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      for (KeyValueHeap h : this.heapsForDelayedClose) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        h.close();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      this.heapsForDelayedClose.clear();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      if (this.heap != null) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        this.heap.close();<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        this.currentScanners.clear();<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        this.heap = null; // CLOSED!<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      if (this.heap != null) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        this.heapsForDelayedClose.add(this.heap);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        this.currentScanners.clear();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        this.heap = null;<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>    this.lastTop = null; // If both are null, we are closed.<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>  /**<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * Get the next row of values from this Store.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @param outResult<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @param scannerContext<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * @return true if there are more rows, false if scanner is done<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   */<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  @Override<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  public boolean next(List&lt;Cell&gt; outResult, ScannerContext scannerContext) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    if (scannerContext == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    checkResetHeap();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (checkReseek()) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<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>    // if the heap was left null, then the scanners had previously run out anyways, close and<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // return.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    if (this.heap == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // By this time partial close should happened because already heap is null<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      close(false);// Do all cleanup except heap.close()<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>    Cell cell = this.heap.peek();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (cell == null) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      close(false);// Do all cleanup except heap.close()<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span>    // only call setRow if the row changes; avoids confusing the query matcher<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // if scanning intra-row<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    // If no limits exists in the scope LimitScope.Between_Cells then we are sure we are changing<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    // rows. Else it is possible we are still traversing the same row so we must perform the row<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    // co

<TRUNCATED>

[39/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
index 77b0620..2d5d4bd 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
@@ -356,56 +356,72 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSize()">getSize</a></strong>()</code>&nbsp;</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/regionserver/Store.html#getSmallestReadPoint()">getSmallestReadPoint</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/Store.html#getSnapshotSize()">getSnapshotSize</a></strong>()</code>
 <div class="block">Returns the memstore snapshot size</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSplitPoint()">getSplitPoint</a></strong>()</code>
 <div class="block">Determines if Store should be split</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefiles()">getStorefiles</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesCount()">getStorefilesCount</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/Store.html#getStorefilesIndexSize()">getStorefilesIndexSize</a></strong>()</code>&nbsp;</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/regionserver/Store.html#getStorefilesSize()">getStorefilesSize</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/Store.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTableName()">getTableName</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/Store.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a></strong>()</code>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays.</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/regionserver/Store.html#getTotalStaticIndexSize()">getTotalStaticIndexSize</a></strong>()</code>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
@@ -413,29 +429,29 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
  single-level indexes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#hasReferences()">hasReferences</a></strong>()</code>&nbsp;</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/Store.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#isMajorCompaction()">isMajorCompaction</a></strong>()</code>&nbsp;</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/Store.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#needsCompaction()">needsCompaction</a></strong>()</code>
 <div class="block">See if there's too much store files in this store</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/Store.html#refreshStoreFiles()">refreshStoreFiles</a></strong>()</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -443,13 +459,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
  available.</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/regionserver/Store.html#refreshStoreFiles(java.util.Collection)">refreshStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="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;&nbsp;newFiles)</code>
 <div class="block">Replaces the store files that the store has with the given files.</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/Store.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker</a></strong>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                                             boolean&nbsp;pickCompactionFiles,
@@ -457,11 +473,11 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <div class="block">Call to complete a compaction.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#requestCompaction()">requestCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest)</code>
@@ -470,33 +486,33 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest,
                                   <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</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/regionserver/Store.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>
 <div class="block">Removes a Cell from the memstore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#throttleCompaction(long)">throttleCompaction</a></strong>(long&nbsp;compactionSize)</code>&nbsp;</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/regionserver/Store.html#timeOfOldestEdit()">timeOfOldestEdit</a></strong>()</code>
 <div class="block">When was the last edit done in the memstore</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/regionserver/Store.html#triggerMajorCompaction()">triggerMajorCompaction</a></strong>()</code>&nbsp;</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/regionserver/Store.html#upsert(java.lang.Iterable,%20long)">upsert</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
             long&nbsp;readpoint)</code>
@@ -648,13 +664,38 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
+<a name="getScanners(java.util.List, boolean, boolean, boolean, boolean, org.apache.hadoop.hbase.regionserver.ScanQueryMatcher, byte[], byte[], long, boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getScanners</h4>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.124">getScanners</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                                boolean&nbsp;cacheBlocks,
+                                boolean&nbsp;isGet,
+                                boolean&nbsp;usePread,
+                                boolean&nbsp;isCompaction,
+                                <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                                byte[]&nbsp;startRow,
+                                byte[]&nbsp;stopRow,
+                                long&nbsp;readPt,
+                                boolean&nbsp;includeMemstoreScanner)
+                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>files</code> - the list of files on which the scanners has to be created</dd><dd><code>cacheBlocks</code> - cache the blocks or not</dd><dd><code>isGet</code> - true if it is get, false if not</dd><dd><code>usePread</code> - true to use pread, false if not</dd><dd><code>isCompaction</code> - true if the scanner is created for compaction</dd><dd><code>matcher</code> - the scan query matcher</dd><dd><code>startRow</code> - the start row</dd><dd><code>stopRow</code> - the stop row</dd><dd><code>readPt</code> - the read point of the current scan</dd><dd><code>includeMemstoreScanner</code> - true if memstore has to be included</dd>
+<dt><span class="strong">Returns:</span></dt><dd>scanners on the given files and on the memstore if specified</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
 <a name="getScanInfo()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanInfo</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.109">getScanInfo</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.128">getScanInfo</a>()</pre>
 </li>
 </ul>
 <a name="upsert(java.lang.Iterable, long)">
@@ -663,7 +704,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>upsert</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.124">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.143">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
           long&nbsp;readpoint)
             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">Adds or replaces the specified KeyValues.
@@ -685,7 +726,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.131">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.150">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Adds a value to the memstore</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>memstore size delta</dd></dl>
@@ -697,7 +738,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>timeOfOldestEdit</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.136">timeOfOldestEdit</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.155">timeOfOldestEdit</a>()</pre>
 <div class="block">When was the last edit done in the memstore</div>
 </li>
 </ul>
@@ -707,7 +748,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>rollback</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.144">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.163">rollback</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Removes a Cell from the memstore. The Cell is removed only if its key
  &amp; memstoreTS match the key &amp; memstoreTS value of the cell
  parameter.</div>
@@ -720,7 +761,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.146">getFileSystem</a>()</pre>
+<pre>org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.165">getFileSystem</a>()</pre>
 </li>
 </ul>
 <a name="createWriterInTmp(long, org.apache.hadoop.hbase.io.compress.Compression.Algorithm, boolean, boolean, boolean)">
@@ -729,7 +770,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createWriterInTmp</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.156">createWriterInTmp</a>(long&nbsp;maxKeyCount,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.175">createWriterInTmp</a>(long&nbsp;maxKeyCount,
                                  <a href="../../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>&nbsp;compression,
                                  boolean&nbsp;isCompaction,
                                  boolean&nbsp;includeMVCCReadpoint,
@@ -747,7 +788,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createWriterInTmp</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.172">createWriterInTmp</a>(long&nbsp;maxKeyCount,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.191">createWriterInTmp</a>(long&nbsp;maxKeyCount,
                                  <a href="../../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>&nbsp;compression,
                                  boolean&nbsp;isCompaction,
                                  boolean&nbsp;includeMVCCReadpoint,
@@ -766,7 +807,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>throttleCompaction</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.186">throttleCompaction</a>(long&nbsp;compactionSize)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.205">throttleCompaction</a>(long&nbsp;compactionSize)</pre>
 </li>
 </ul>
 <a name="getCompactionProgress()">
@@ -775,7 +816,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionProgress</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionProgress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.192">getCompactionProgress</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionProgress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.211">getCompactionProgress</a>()</pre>
 <div class="block">getter for CompactionProgress object</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>CompactionProgress object; can be null</dd></dl>
 </li>
@@ -786,7 +827,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCompaction</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.194">requestCompaction</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.213">requestCompaction</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>
@@ -799,7 +840,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <li class="blockList">
 <h4>requestCompaction</h4>
 <pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.200">requestCompaction</a>(int&nbsp;priority,
+<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.219">requestCompaction</a>(int&nbsp;priority,
                                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest)
                                     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"><span class="strong">Deprecated.</span>&nbsp;<i>see requestCompaction(int, CompactionRequest, User)</i></div>
@@ -813,7 +854,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCompaction</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.203">requestCompaction</a>(int&nbsp;priority,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.222">requestCompaction</a>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest,
                                   <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                                     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>
@@ -827,7 +868,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>cancelRequestedCompaction</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.206">cancelRequestedCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.225">cancelRequestedCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction)</pre>
 </li>
 </ul>
 <a name="compact(org.apache.hadoop.hbase.regionserver.compactions.CompactionContext, org.apache.hadoop.hbase.regionserver.compactions.CompactionThroughputController)">
@@ -837,7 +878,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <li class="blockList">
 <h4>compact</h4>
 <pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.212">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
+<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.231">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
                                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionThroughputController</a>&nbsp;throughputController)
                         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"><span class="strong">Deprecated.</span>&nbsp;<i>see compact(CompactionContext, CompactionThroughputController, User)</i></div>
@@ -851,7 +892,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre><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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.215">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
+<pre><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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.234">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
                       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionThroughputController</a>&nbsp;throughputController,
                       <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                         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>
@@ -865,7 +906,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>isMajorCompaction</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.221">isMajorCompaction</a>()
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.240">isMajorCompaction</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">Returns:</span></dt><dd>true if we should run a major compaction.</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -878,7 +919,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerMajorCompaction</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.223">triggerMajorCompaction</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.242">triggerMajorCompaction</a>()</pre>
 </li>
 </ul>
 <a name="needsCompaction()">
@@ -887,7 +928,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>needsCompaction</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.229">needsCompaction</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.248">needsCompaction</a>()</pre>
 <div class="block">See if there's too much store files in this store</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if number of store files is greater than the number defined in minFilesToCompact</dd></dl>
 </li>
@@ -898,7 +939,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactPriority</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.231">getCompactPriority</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.250">getCompactPriority</a>()</pre>
 </li>
 </ul>
 <a name="createFlushContext(long)">
@@ -907,7 +948,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createFlushContext</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.233">createFlushContext</a>(long&nbsp;cacheFlushId)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.252">createFlushContext</a>(long&nbsp;cacheFlushId)</pre>
 </li>
 </ul>
 <a name="replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor, boolean, boolean)">
@@ -916,7 +957,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>replayCompactionMarker</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.244">replayCompactionMarker</a>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.263">replayCompactionMarker</a>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                           boolean&nbsp;pickCompactionFiles,
                           boolean&nbsp;removeFiles)
                             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>
@@ -935,7 +976,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>canSplit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.250">canSplit</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.269">canSplit</a>()</pre>
 </li>
 </ul>
 <a name="getSplitPoint()">
@@ -944,7 +985,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitPoint</h4>
-<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.256">getSplitPoint</a>()</pre>
+<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.275">getSplitPoint</a>()</pre>
 <div class="block">Determines if Store should be split</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>byte[] if store should be split, null otherwise.</dd></dl>
 </li>
@@ -955,7 +996,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>assertBulkLoadHFileOk</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.264">assertBulkLoadHFileOk</a>(org.apache.hadoop.fs.Path&nbsp;srcPath)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.283">assertBulkLoadHFileOk</a>(org.apache.hadoop.fs.Path&nbsp;srcPath)
                            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 throws a WrongRegionException if the HFile does not fit in this region, or an
  InvalidHFileException if the HFile is not valid.</div>
@@ -969,7 +1010,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFile</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.273">bulkLoadHFile</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;srcPathStr,
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.292">bulkLoadHFile</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;srcPathStr,
                                       long&nbsp;sequenceId)
                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This method should only be called from Region. It is assumed that the ranges of values in the
@@ -985,7 +1026,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>hasReferences</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.281">hasReferences</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.300">hasReferences</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd><tt>true</tt> if the store has any underlying reference files to older HFiles</dd></dl>
 </li>
 </ul>
@@ -995,7 +1036,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.286">getMemStoreSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.305">getMemStoreSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The size of this store's memstore, in bytes</dd></dl>
 </li>
 </ul>
@@ -1005,7 +1046,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushableSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.293">getFlushableSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.312">getFlushableSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The amount of memory we could flush from this memstore; usually this is equal to
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMemStoreSize()"><code>getMemStoreSize()</code></a> unless we are carrying snapshots and then it will be the size of
  outstanding snapshots.</dd></dl>
@@ -1017,7 +1058,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.299">getSnapshotSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.318">getSnapshotSize</a>()</pre>
 <div class="block">Returns the memstore snapshot size</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>size of the memstore snapshot</dd></dl>
 </li>
@@ -1028,7 +1069,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamily</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.301">getFamily</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.320">getFamily</a>()</pre>
 </li>
 </ul>
 <a name="getMaxSequenceId()">
@@ -1037,7 +1078,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxSequenceId</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.306">getMaxSequenceId</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.325">getMaxSequenceId</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The maximum sequence id in all store files.</dd></dl>
 </li>
 </ul>
@@ -1047,7 +1088,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxMemstoreTS</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.311">getMaxMemstoreTS</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.330">getMaxMemstoreTS</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The maximum memstoreTS in all store files.</dd></dl>
 </li>
 </ul>
@@ -1057,7 +1098,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataBlockEncoder</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.316">getDataBlockEncoder</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.335">getDataBlockEncoder</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the data block encoder</dd></dl>
 </li>
 </ul>
@@ -1067,7 +1108,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastCompactSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.319">getLastCompactSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.338">getLastCompactSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>aggregate size of all HStores used in the last compaction</dd></dl>
 </li>
 </ul>
@@ -1077,7 +1118,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.322">getSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.341">getSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>aggregate size of HStore</dd></dl>
 </li>
 </ul>
@@ -1087,7 +1128,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesCount</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.327">getStorefilesCount</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.346">getStorefilesCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Count of store files</dd></dl>
 </li>
 </ul>
@@ -1097,7 +1138,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreSizeUncompressed</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.332">getStoreSizeUncompressed</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.351">getStoreSizeUncompressed</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The size of the store files, in bytes, uncompressed.</dd></dl>
 </li>
 </ul>
@@ -1107,7 +1148,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.337">getStorefilesSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.356">getStorefilesSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The size of the store files, in bytes.</dd></dl>
 </li>
 </ul>
@@ -1117,7 +1158,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesIndexSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.342">getStorefilesIndexSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.361">getStorefilesIndexSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The size of the store file indexes, in bytes.</dd></dl>
 </li>
 </ul>
@@ -1127,7 +1168,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticIndexSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.350">getTotalStaticIndexSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.369">getTotalStaticIndexSize</a>()</pre>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
  intermediate levels, and the leaf level for multi-level indexes, or just the root level for
  single-level indexes.</div>
@@ -1140,7 +1181,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticBloomSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.357">getTotalStaticBloomSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.376">getTotalStaticBloomSize</a>()</pre>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the
  Bloom blocks currently not loaded into the block cache are counted.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the total size of all Bloom filters in the store</dd></dl>
@@ -1152,7 +1193,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheConfig</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.365">getCacheConfig</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.384">getCacheConfig</a>()</pre>
 <div class="block">Used for tests.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>cache configuration for this Store.</dd></dl>
 </li>
@@ -1163,7 +1204,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.370">getRegionInfo</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.389">getRegionInfo</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the parent region info hosting this store</dd></dl>
 </li>
 </ul>
@@ -1173,7 +1214,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.372">getCoprocessorHost</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.391">getCoprocessorHost</a>()</pre>
 </li>
 </ul>
 <a name="areWritesEnabled()">
@@ -1182,7 +1223,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>areWritesEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.374">areWritesEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.393">areWritesEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getSmallestReadPoint()">
@@ -1191,7 +1232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getSmallestReadPoint</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.381">getSmallestReadPoint</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.400">getSmallestReadPoint</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The smallest mvcc readPoint across all the scanners in this
  region. Writes older than this readPoint, are included  in every
  read operation.</dd></dl>
@@ -1203,7 +1244,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getColumnFamilyName</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/regionserver/Store.html#line.383">getColumnFamilyName</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/regionserver/Store.html#line.402">getColumnFamilyName</a>()</pre>
 </li>
 </ul>
 <a name="getTableName()">
@@ -1212,7 +1253,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.385">getTableName</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.404">getTableName</a>()</pre>
 </li>
 </ul>
 <a name="getFlushedCellsCount()">
@@ -1221,7 +1262,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.390">getFlushedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.409">getFlushedCellsCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The number of cells flushed to disk</dd></dl>
 </li>
 </ul>
@@ -1231,7 +1272,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.395">getFlushedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.414">getFlushedCellsSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The total size of data flushed to disk, in bytes</dd></dl>
 </li>
 </ul>
@@ -1241,7 +1282,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.400">getCompactedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.419">getCompactedCellsCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The number of cells processed during minor compactions</dd></dl>
 </li>
 </ul>
@@ -1251,7 +1292,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.405">getCompactedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.424">getCompactedCellsSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The total amount of data processed during minor compactions, in bytes</dd></dl>
 </li>
 </ul>
@@ -1261,7 +1302,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.410">getMajorCompactedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.429">getMajorCompactedCellsCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The number of cells processed during major compactions</dd></dl>
 </li>
 </ul>
@@ -1271,7 +1312,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.415">getMajorCompactedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.434">getMajorCompactedCellsSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The total amount of data processed during major compactions, in bytes</dd></dl>
 </li>
 </ul>
@@ -1281,7 +1322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>addChangedReaderObserver</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.420">addChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.439">addChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
 </li>
 </ul>
 <a name="deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">
@@ -1290,7 +1331,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteChangedReaderObserver</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.425">deleteChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.444">deleteChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
 </li>
 </ul>
 <a name="hasTooManyStoreFiles()">
@@ -1299,7 +1340,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>hasTooManyStoreFiles</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.430">hasTooManyStoreFiles</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.449">hasTooManyStoreFiles</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Whether this store has too many store files.</dd></dl>
 </li>
 </ul>
@@ -1309,7 +1350,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshStoreFiles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.439">refreshStoreFiles</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.458">refreshStoreFiles</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">Checks the underlying store files, and opens the files that  have not
  been opened, and removes the store file readers for store files no longer
@@ -1325,7 +1366,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionPressure</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.456">getCompactionPressure</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.475">getCompactionPressure</a>()</pre>
 <div class="block">This value can represent the degree of emergency of compaction for this store. It should be
  greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.
  <ul>
@@ -1347,7 +1388,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshStoreFiles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.464">refreshStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="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;&nbsp;newFiles)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.483">refreshStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="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;&nbsp;newFiles)
                        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">Replaces the store files that the store has with the given files. Mainly used by
  secondary region replicas to keep up to date with
@@ -1362,7 +1403,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFile</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.466">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&nbsp;fileInfo)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.485">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&nbsp;fileInfo)
                    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>
@@ -1374,7 +1415,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>isPrimaryReplicaStore</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.468">isPrimaryReplicaStore</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.487">isPrimaryReplicaStore</a>()</pre>
 </li>
 </ul>
 <a name="closeAndArchiveCompactedFiles()">
@@ -1383,7 +1424,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>closeAndArchiveCompactedFiles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.473">closeAndArchiveCompactedFiles</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.492">closeAndArchiveCompactedFiles</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">Closes and archives the compacted files under this store</div>
 <dl><dt><span class="strong">Throws:</span></dt>


[03/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/xref/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index 16626cb..f033bbf 100644
--- a/xref/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/xref/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -39,7 +39,7 @@
 <a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ExecutionException;
 <a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ExecutorCompletionService;
 <a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.Future;
-<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.SynchronousQueue;
+<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.LinkedBlockingQueue;
 <a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ThreadPoolExecutor;
 <a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.TimeUnit;
 <a class="jxr_linenumber" name="35" href="#35">35</a>  
@@ -123,243 +123,244 @@
 <a class="jxr_linenumber" name="113" href="#113">113</a>     <em class="jxr_comment">// per sink thread pool</em>
 <a class="jxr_linenumber" name="114" href="#114">114</a>     <strong class="jxr_keyword">this</strong>.maxThreads = <strong class="jxr_keyword">this</strong>.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,
 <a class="jxr_linenumber" name="115" href="#115">115</a>       HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);
-<a class="jxr_linenumber" name="116" href="#116">116</a>     <strong class="jxr_keyword">this</strong>.exec = <strong class="jxr_keyword">new</strong> ThreadPoolExecutor(1, maxThreads, 60, TimeUnit.SECONDS,
-<a class="jxr_linenumber" name="117" href="#117">117</a>         <strong class="jxr_keyword">new</strong> SynchronousQueue&lt;Runnable&gt;());
-<a class="jxr_linenumber" name="118" href="#118">118</a> 
-<a class="jxr_linenumber" name="119" href="#119">119</a>     <strong class="jxr_keyword">this</strong>.replicationBulkLoadDataEnabled =
-<a class="jxr_linenumber" name="120" href="#120">120</a>         conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,
-<a class="jxr_linenumber" name="121" href="#121">121</a>           HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);
-<a class="jxr_linenumber" name="122" href="#122">122</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.replicationBulkLoadDataEnabled) {
-<a class="jxr_linenumber" name="123" href="#123">123</a>       replicationClusterId = <strong class="jxr_keyword">this</strong>.conf.get(HConstants.REPLICATION_CLUSTER_ID);
-<a class="jxr_linenumber" name="124" href="#124">124</a>     }
-<a class="jxr_linenumber" name="125" href="#125">125</a>     <em class="jxr_comment">// Construct base namespace directory and hfile archive directory path</em>
-<a class="jxr_linenumber" name="126" href="#126">126</a>     Path rootDir = FSUtils.getRootDir(conf);
-<a class="jxr_linenumber" name="127" href="#127">127</a>     Path baseNSDir = <strong class="jxr_keyword">new</strong> Path(HConstants.BASE_NAMESPACE_DIR);
-<a class="jxr_linenumber" name="128" href="#128">128</a>     baseNamespaceDir = <strong class="jxr_keyword">new</strong> Path(rootDir, baseNSDir);
-<a class="jxr_linenumber" name="129" href="#129">129</a>     hfileArchiveDir = <strong class="jxr_keyword">new</strong> Path(rootDir, <strong class="jxr_keyword">new</strong> Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));
-<a class="jxr_linenumber" name="130" href="#130">130</a>   }
-<a class="jxr_linenumber" name="131" href="#131">131</a> 
-<a class="jxr_linenumber" name="132" href="#132">132</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> decorateConf() {
-<a class="jxr_linenumber" name="133" href="#133">133</a>     String replicationCodec = <strong class="jxr_keyword">this</strong>.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);
-<a class="jxr_linenumber" name="134" href="#134">134</a>     <strong class="jxr_keyword">if</strong> (StringUtils.isNotEmpty(replicationCodec)) {
-<a class="jxr_linenumber" name="135" href="#135">135</a>       <strong class="jxr_keyword">this</strong>.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);
-<a class="jxr_linenumber" name="136" href="#136">136</a>     }
-<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>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> connectToPeers() {
-<a class="jxr_linenumber" name="140" href="#140">140</a>     getRegionServers();
-<a class="jxr_linenumber" name="141" href="#141">141</a> 
-<a class="jxr_linenumber" name="142" href="#142">142</a>     <strong class="jxr_keyword">int</strong> sleepMultiplier = 1;
-<a class="jxr_linenumber" name="143" href="#143">143</a> 
-<a class="jxr_linenumber" name="144" href="#144">144</a>     <em class="jxr_comment">// Connect to peer cluster first, unless we have to stop</em>
-<a class="jxr_linenumber" name="145" href="#145">145</a>     <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">this</strong>.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {
-<a class="jxr_linenumber" name="146" href="#146">146</a>       replicationSinkMgr.chooseSinks();
-<a class="jxr_linenumber" name="147" href="#147">147</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {
-<a class="jxr_linenumber" name="148" href="#148">148</a>         <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"Waiting for peers"</span>, sleepMultiplier)) {
-<a class="jxr_linenumber" name="149" href="#149">149</a>           sleepMultiplier++;
-<a class="jxr_linenumber" name="150" href="#150">150</a>         }
-<a class="jxr_linenumber" name="151" href="#151">151</a>       }
-<a class="jxr_linenumber" name="152" href="#152">152</a>     }
-<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>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="156" href="#156">156</a> <em class="jxr_javadoccomment">   * Do the sleeping logic</em>
-<a class="jxr_linenumber" name="157" href="#157">157</a> <em class="jxr_javadoccomment">   * @param msg Why we sleep</em>
-<a class="jxr_linenumber" name="158" href="#158">158</a> <em class="jxr_javadoccomment">   * @param sleepMultiplier by how many times the default sleeping time is augmented</em>
-<a class="jxr_linenumber" name="159" href="#159">159</a> <em class="jxr_javadoccomment">   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;</em>
-<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>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> sleepForRetries(String msg, <strong class="jxr_keyword">int</strong> sleepMultiplier) {
-<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>       <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="164" href="#164">164</a>         LOG.trace(msg + <span class="jxr_string">", sleeping "</span> + sleepForRetries + <span class="jxr_string">" times "</span> + sleepMultiplier);
-<a class="jxr_linenumber" name="165" href="#165">165</a>       }
-<a class="jxr_linenumber" name="166" href="#166">166</a>       Thread.sleep(<strong class="jxr_keyword">this</strong>.sleepForRetries * sleepMultiplier);
-<a class="jxr_linenumber" name="167" href="#167">167</a>     } <strong class="jxr_keyword">catch</strong> (InterruptedException e) {
-<a class="jxr_linenumber" name="168" href="#168">168</a>       LOG.debug(<span class="jxr_string">"Interrupted while sleeping between retries"</span>);
-<a class="jxr_linenumber" name="169" href="#169">169</a>     }
-<a class="jxr_linenumber" name="170" href="#170">170</a>     <strong class="jxr_keyword">return</strong> sleepMultiplier &lt; maxRetriesMultiplier;
-<a class="jxr_linenumber" name="171" href="#171">171</a>   }
-<a class="jxr_linenumber" name="172" href="#172">172</a> 
-<a class="jxr_linenumber" name="173" href="#173">173</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="174" href="#174">174</a> <em class="jxr_javadoccomment">   * Do the shipping logic</em>
-<a class="jxr_linenumber" name="175" href="#175">175</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="176" href="#176">176</a>   @Override
-<a class="jxr_linenumber" name="177" href="#177">177</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> replicate(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html">ReplicateContext</a> replicateContext) {
-<a class="jxr_linenumber" name="178" href="#178">178</a>     CompletionService&lt;Integer&gt; pool = <strong class="jxr_keyword">new</strong> ExecutorCompletionService&lt;Integer&gt;(<strong class="jxr_keyword">this</strong>.exec);
-<a class="jxr_linenumber" name="179" href="#179">179</a>     List&lt;Entry&gt; entries = replicateContext.getEntries();
-<a class="jxr_linenumber" name="180" href="#180">180</a>     String walGroupId = replicateContext.getWalGroupId();
-<a class="jxr_linenumber" name="181" href="#181">181</a>     <strong class="jxr_keyword">int</strong> sleepMultiplier = 1;
-<a class="jxr_linenumber" name="182" href="#182">182</a> 
-<a class="jxr_linenumber" name="183" href="#183">183</a>     <strong class="jxr_keyword">if</strong> (!peersSelected &amp;&amp; <strong class="jxr_keyword">this</strong>.isRunning()) {
-<a class="jxr_linenumber" name="184" href="#184">184</a>       connectToPeers();
-<a class="jxr_linenumber" name="185" href="#185">185</a>       peersSelected = <strong class="jxr_keyword">true</strong>;
-<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>     <strong class="jxr_keyword">if</strong> (replicationSinkMgr.getSinks().size() == 0) {
-<a class="jxr_linenumber" name="189" href="#189">189</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="190" href="#190">190</a>     }
-<a class="jxr_linenumber" name="191" href="#191">191</a>     <em class="jxr_comment">// minimum of: configured threads, number of 100-waledit batches,</em>
-<a class="jxr_linenumber" name="192" href="#192">192</a>     <em class="jxr_comment">//  and number of current sinks</em>
-<a class="jxr_linenumber" name="193" href="#193">193</a>     <strong class="jxr_keyword">int</strong> n = Math.min(Math.min(<strong class="jxr_keyword">this</strong>.maxThreads, entries.size()/100+1),
-<a class="jxr_linenumber" name="194" href="#194">194</a>       replicationSinkMgr.getSinks().size());
-<a class="jxr_linenumber" name="195" href="#195">195</a>     List&lt;List&lt;Entry&gt;&gt; entryLists = <strong class="jxr_keyword">new</strong> ArrayList&lt;List&lt;Entry&gt;&gt;(n);
-<a class="jxr_linenumber" name="196" href="#196">196</a>     <strong class="jxr_keyword">if</strong> (n == 1) {
-<a class="jxr_linenumber" name="197" href="#197">197</a>       entryLists.add(entries);
-<a class="jxr_linenumber" name="198" href="#198">198</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="199" href="#199">199</a>       <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;n; i++) {
-<a class="jxr_linenumber" name="200" href="#200">200</a>         entryLists.add(<strong class="jxr_keyword">new</strong> ArrayList&lt;Entry&gt;(entries.size()/n+1));
-<a class="jxr_linenumber" name="201" href="#201">201</a>       }
-<a class="jxr_linenumber" name="202" href="#202">202</a>       <em class="jxr_comment">// now group by region</em>
-<a class="jxr_linenumber" name="203" href="#203">203</a>       <strong class="jxr_keyword">for</strong> (Entry e : entries) {
-<a class="jxr_linenumber" name="204" href="#204">204</a>         entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);
-<a class="jxr_linenumber" name="205" href="#205">205</a>       }
-<a class="jxr_linenumber" name="206" href="#206">206</a>     }
-<a class="jxr_linenumber" name="207" href="#207">207</a>     <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">this</strong>.isRunning()) {
-<a class="jxr_linenumber" name="208" href="#208">208</a>       <strong class="jxr_keyword">if</strong> (!isPeerEnabled()) {
-<a class="jxr_linenumber" name="209" href="#209">209</a>         <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"Replication is disabled"</span>, sleepMultiplier)) {
-<a class="jxr_linenumber" name="210" href="#210">210</a>           sleepMultiplier++;
-<a class="jxr_linenumber" name="211" href="#211">211</a>         }
-<a class="jxr_linenumber" name="212" href="#212">212</a>         <strong class="jxr_keyword">continue</strong>;
-<a class="jxr_linenumber" name="213" href="#213">213</a>       }
-<a class="jxr_linenumber" name="214" href="#214">214</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="215" href="#215">215</a>         <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="216" href="#216">216</a>           LOG.trace(<span class="jxr_string">"Replicating "</span> + entries.size() +
-<a class="jxr_linenumber" name="217" href="#217">217</a>               <span class="jxr_string">" entries of total size "</span> + replicateContext.getSize());
-<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">int</strong> futures = 0;
-<a class="jxr_linenumber" name="221" href="#221">221</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;entryLists.size(); i++) {
-<a class="jxr_linenumber" name="222" href="#222">222</a>           <strong class="jxr_keyword">if</strong> (!entryLists.get(i).isEmpty()) {
-<a class="jxr_linenumber" name="223" href="#223">223</a>             <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="224" href="#224">224</a>               LOG.trace(<span class="jxr_string">"Submitting "</span> + entryLists.get(i).size() +
-<a class="jxr_linenumber" name="225" href="#225">225</a>                   <span class="jxr_string">" entries of total size "</span> + replicateContext.getSize());
-<a class="jxr_linenumber" name="226" href="#226">226</a>             }
-<a class="jxr_linenumber" name="227" href="#227">227</a>             <em class="jxr_comment">// RuntimeExceptions encountered here bubble up and are handled in ReplicationSource</em>
-<a class="jxr_linenumber" name="228" href="#228">228</a>             pool.submit(createReplicator(entryLists.get(i), i));
-<a class="jxr_linenumber" name="229" href="#229">229</a>             futures++;
-<a class="jxr_linenumber" name="230" href="#230">230</a>           }
-<a class="jxr_linenumber" name="231" href="#231">231</a>         }
-<a class="jxr_linenumber" name="232" href="#232">232</a>         IOException iox = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="233" href="#233">233</a> 
-<a class="jxr_linenumber" name="234" href="#234">234</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;futures; i++) {
-<a class="jxr_linenumber" name="235" href="#235">235</a>           <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="236" href="#236">236</a>             <em class="jxr_comment">// wait for all futures, remove successful parts</em>
-<a class="jxr_linenumber" name="237" href="#237">237</a>             <em class="jxr_comment">// (only the remaining parts will be retried)</em>
-<a class="jxr_linenumber" name="238" href="#238">238</a>             Future&lt;Integer&gt; f = pool.take();
-<a class="jxr_linenumber" name="239" href="#239">239</a>             entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());
-<a class="jxr_linenumber" name="240" href="#240">240</a>           } <strong class="jxr_keyword">catch</strong> (InterruptedException ie) {
-<a class="jxr_linenumber" name="241" href="#241">241</a>             iox =  <strong class="jxr_keyword">new</strong> IOException(ie);
-<a class="jxr_linenumber" name="242" href="#242">242</a>           } <strong class="jxr_keyword">catch</strong> (ExecutionException ee) {
-<a class="jxr_linenumber" name="243" href="#243">243</a>             <em class="jxr_comment">// cause must be an IOException</em>
-<a class="jxr_linenumber" name="244" href="#244">244</a>             iox = (IOException)ee.getCause();
-<a class="jxr_linenumber" name="245" href="#245">245</a>           }
-<a class="jxr_linenumber" name="246" href="#246">246</a>         }
-<a class="jxr_linenumber" name="247" href="#247">247</a>         <strong class="jxr_keyword">if</strong> (iox != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="248" href="#248">248</a>           <em class="jxr_comment">// if we had any exceptions, try again</em>
-<a class="jxr_linenumber" name="249" href="#249">249</a>           <strong class="jxr_keyword">throw</strong> iox;
-<a class="jxr_linenumber" name="250" href="#250">250</a>         }
-<a class="jxr_linenumber" name="251" href="#251">251</a>         <em class="jxr_comment">// update metrics</em>
-<a class="jxr_linenumber" name="252" href="#252">252</a>         <strong class="jxr_keyword">this</strong>.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),
-<a class="jxr_linenumber" name="253" href="#253">253</a>           walGroupId);
-<a class="jxr_linenumber" name="254" href="#254">254</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="255" href="#255">255</a> 
-<a class="jxr_linenumber" name="256" href="#256">256</a>       } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="257" href="#257">257</a>         <em class="jxr_comment">// Didn't ship anything, but must still age the last time we did</em>
-<a class="jxr_linenumber" name="258" href="#258">258</a>         <strong class="jxr_keyword">this</strong>.metrics.refreshAgeOfLastShippedOp(walGroupId);
-<a class="jxr_linenumber" name="259" href="#259">259</a>         <strong class="jxr_keyword">if</strong> (ioe instanceof RemoteException) {
-<a class="jxr_linenumber" name="260" href="#260">260</a>           ioe = ((RemoteException) ioe).unwrapRemoteException();
-<a class="jxr_linenumber" name="261" href="#261">261</a>           LOG.warn(<span class="jxr_string">"Can't replicate because of an error on the remote cluster: "</span>, ioe);
-<a class="jxr_linenumber" name="262" href="#262">262</a>           <strong class="jxr_keyword">if</strong> (ioe instanceof TableNotFoundException) {
-<a class="jxr_linenumber" name="263" href="#263">263</a>             <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"A table is missing in the peer cluster. "</span>
-<a class="jxr_linenumber" name="264" href="#264">264</a>                 + <span class="jxr_string">"Replication cannot proceed without losing data."</span>, sleepMultiplier)) {
-<a class="jxr_linenumber" name="265" href="#265">265</a>               sleepMultiplier++;
-<a class="jxr_linenumber" name="266" href="#266">266</a>             }
-<a class="jxr_linenumber" name="267" href="#267">267</a>           }
-<a class="jxr_linenumber" name="268" href="#268">268</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="269" href="#269">269</a>           <strong class="jxr_keyword">if</strong> (ioe instanceof SocketTimeoutException) {
-<a class="jxr_linenumber" name="270" href="#270">270</a>             <em class="jxr_comment">// This exception means we waited for more than 60s and nothing</em>
-<a class="jxr_linenumber" name="271" href="#271">271</a>             <em class="jxr_comment">// happened, the cluster is alive and calling it right away</em>
-<a class="jxr_linenumber" name="272" href="#272">272</a>             <em class="jxr_comment">// even for a test just makes things worse.</em>
-<a class="jxr_linenumber" name="273" href="#273">273</a>             sleepForRetries(<span class="jxr_string">"Encountered a SocketTimeoutException. Since the "</span> +
-<a class="jxr_linenumber" name="274" href="#274">274</a>               <span class="jxr_string">"call to the remote cluster timed out, which is usually "</span> +
-<a class="jxr_linenumber" name="275" href="#275">275</a>               <span class="jxr_string">"caused by a machine failure or a massive slowdown"</span>,
-<a class="jxr_linenumber" name="276" href="#276">276</a>               <strong class="jxr_keyword">this</strong>.socketTimeoutMultiplier);
-<a class="jxr_linenumber" name="277" href="#277">277</a>           } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (ioe instanceof ConnectException) {
-<a class="jxr_linenumber" name="278" href="#278">278</a>             LOG.warn(<span class="jxr_string">"Peer is unavailable, rechecking all sinks: "</span>, ioe);
-<a class="jxr_linenumber" name="279" href="#279">279</a>             replicationSinkMgr.chooseSinks();
-<a class="jxr_linenumber" name="280" href="#280">280</a>           } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="281" href="#281">281</a>             LOG.warn(<span class="jxr_string">"Can't replicate because of a local or network error: "</span>, ioe);
-<a class="jxr_linenumber" name="282" href="#282">282</a>           }
-<a class="jxr_linenumber" name="283" href="#283">283</a>         }
-<a class="jxr_linenumber" name="284" href="#284">284</a>         <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"Since we are unable to replicate"</span>, sleepMultiplier)) {
-<a class="jxr_linenumber" name="285" href="#285">285</a>           sleepMultiplier++;
-<a class="jxr_linenumber" name="286" href="#286">286</a>         }
-<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">return</strong> false; <em class="jxr_comment">// in case we exited before replicating</em>
-<a class="jxr_linenumber" name="290" href="#290">290</a>   }
-<a class="jxr_linenumber" name="291" href="#291">291</a> 
-<a class="jxr_linenumber" name="292" href="#292">292</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> isPeerEnabled() {
-<a class="jxr_linenumber" name="293" href="#293">293</a>     <strong class="jxr_keyword">return</strong> ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;
-<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>   @Override
-<a class="jxr_linenumber" name="297" href="#297">297</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> doStop() {
-<a class="jxr_linenumber" name="298" href="#298">298</a>     disconnect(); <em class="jxr_comment">//don't call super.doStop()</em>
-<a class="jxr_linenumber" name="299" href="#299">299</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.conn != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="300" href="#300">300</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="301" href="#301">301</a>         <strong class="jxr_keyword">this</strong>.conn.close();
-<a class="jxr_linenumber" name="302" href="#302">302</a>         <strong class="jxr_keyword">this</strong>.conn = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="303" href="#303">303</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="304" href="#304">304</a>         LOG.warn(<span class="jxr_string">"Failed to close the connection"</span>);
-<a class="jxr_linenumber" name="305" href="#305">305</a>       }
-<a class="jxr_linenumber" name="306" href="#306">306</a>     }
-<a class="jxr_linenumber" name="307" href="#307">307</a>     exec.shutdownNow();
-<a class="jxr_linenumber" name="308" href="#308">308</a>     notifyStopped();
-<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>   <em class="jxr_comment">// is this needed? Nobody else will call doStop() otherwise</em>
-<a class="jxr_linenumber" name="312" href="#312">312</a>   @Override
-<a class="jxr_linenumber" name="313" href="#313">313</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/Coprocessor.html">State</a> stopAndWait() {
-<a class="jxr_linenumber" name="314" href="#314">314</a>     doStop();
-<a class="jxr_linenumber" name="315" href="#315">315</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">super</strong>.stopAndWait();
-<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>   @VisibleForTesting
-<a class="jxr_linenumber" name="319" href="#319">319</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a> createReplicator(List&lt;Entry&gt; entries, <strong class="jxr_keyword">int</strong> ordinal) {
-<a class="jxr_linenumber" name="320" href="#320">320</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a>(entries, ordinal);
-<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>   @VisibleForTesting
-<a class="jxr_linenumber" name="324" href="#324">324</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a> <strong class="jxr_keyword">implements</strong> Callable&lt;Integer&gt; {
-<a class="jxr_linenumber" name="325" href="#325">325</a>     <strong class="jxr_keyword">private</strong> List&lt;Entry&gt; entries;
-<a class="jxr_linenumber" name="326" href="#326">326</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> ordinal;
-<a class="jxr_linenumber" name="327" href="#327">327</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a>(List&lt;Entry&gt; entries, <strong class="jxr_keyword">int</strong> ordinal) {
-<a class="jxr_linenumber" name="328" href="#328">328</a>       <strong class="jxr_keyword">this</strong>.entries = entries;
-<a class="jxr_linenumber" name="329" href="#329">329</a>       <strong class="jxr_keyword">this</strong>.ordinal = ordinal;
-<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>     @Override
-<a class="jxr_linenumber" name="333" href="#333">333</a>     <strong class="jxr_keyword">public</strong> Integer call() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="334" href="#334">334</a>       <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html">SinkPeer</a> sinkPeer = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="335" href="#335">335</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="336" href="#336">336</a>         sinkPeer = replicationSinkMgr.getReplicationSink();
-<a class="jxr_linenumber" name="337" href="#337">337</a>         BlockingInterface rrs = sinkPeer.getRegionServer();
-<a class="jxr_linenumber" name="338" href="#338">338</a>         ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(<strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/util/IdLock.html">Entry</a>[entries.size()]),
-<a class="jxr_linenumber" name="339" href="#339">339</a>           replicationClusterId, baseNamespaceDir, hfileArchiveDir);
-<a class="jxr_linenumber" name="340" href="#340">340</a>         replicationSinkMgr.reportSinkSuccess(sinkPeer);
-<a class="jxr_linenumber" name="341" href="#341">341</a>         <strong class="jxr_keyword">return</strong> ordinal;
-<a class="jxr_linenumber" name="342" href="#342">342</a> 
-<a class="jxr_linenumber" name="343" href="#343">343</a>       } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="344" href="#344">344</a>         <strong class="jxr_keyword">if</strong> (sinkPeer != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="345" href="#345">345</a>           replicationSinkMgr.reportBadSink(sinkPeer);
-<a class="jxr_linenumber" name="346" href="#346">346</a>         }
-<a class="jxr_linenumber" name="347" href="#347">347</a>         <strong class="jxr_keyword">throw</strong> ioe;
-<a class="jxr_linenumber" name="348" href="#348">348</a>       }
-<a class="jxr_linenumber" name="349" href="#349">349</a>     }
-<a class="jxr_linenumber" name="350" href="#350">350</a> 
-<a class="jxr_linenumber" name="351" href="#351">351</a>   }
-<a class="jxr_linenumber" name="352" href="#352">352</a> }
+<a class="jxr_linenumber" name="116" href="#116">116</a>     <strong class="jxr_keyword">this</strong>.exec = <strong class="jxr_keyword">new</strong> ThreadPoolExecutor(maxThreads, maxThreads, 60, TimeUnit.SECONDS,
+<a class="jxr_linenumber" name="117" href="#117">117</a>         <strong class="jxr_keyword">new</strong> LinkedBlockingQueue&lt;Runnable&gt;());
+<a class="jxr_linenumber" name="118" href="#118">118</a>     <strong class="jxr_keyword">this</strong>.exec.allowCoreThreadTimeOut(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="119" href="#119">119</a> 
+<a class="jxr_linenumber" name="120" href="#120">120</a>     <strong class="jxr_keyword">this</strong>.replicationBulkLoadDataEnabled =
+<a class="jxr_linenumber" name="121" href="#121">121</a>         conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,
+<a class="jxr_linenumber" name="122" href="#122">122</a>           HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);
+<a class="jxr_linenumber" name="123" href="#123">123</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.replicationBulkLoadDataEnabled) {
+<a class="jxr_linenumber" name="124" href="#124">124</a>       replicationClusterId = <strong class="jxr_keyword">this</strong>.conf.get(HConstants.REPLICATION_CLUSTER_ID);
+<a class="jxr_linenumber" name="125" href="#125">125</a>     }
+<a class="jxr_linenumber" name="126" href="#126">126</a>     <em class="jxr_comment">// Construct base namespace directory and hfile archive directory path</em>
+<a class="jxr_linenumber" name="127" href="#127">127</a>     Path rootDir = FSUtils.getRootDir(conf);
+<a class="jxr_linenumber" name="128" href="#128">128</a>     Path baseNSDir = <strong class="jxr_keyword">new</strong> Path(HConstants.BASE_NAMESPACE_DIR);
+<a class="jxr_linenumber" name="129" href="#129">129</a>     baseNamespaceDir = <strong class="jxr_keyword">new</strong> Path(rootDir, baseNSDir);
+<a class="jxr_linenumber" name="130" href="#130">130</a>     hfileArchiveDir = <strong class="jxr_keyword">new</strong> Path(rootDir, <strong class="jxr_keyword">new</strong> Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));
+<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>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> decorateConf() {
+<a class="jxr_linenumber" name="134" href="#134">134</a>     String replicationCodec = <strong class="jxr_keyword">this</strong>.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);
+<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">if</strong> (StringUtils.isNotEmpty(replicationCodec)) {
+<a class="jxr_linenumber" name="136" href="#136">136</a>       <strong class="jxr_keyword">this</strong>.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);
+<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> 
+<a class="jxr_linenumber" name="140" href="#140">140</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> connectToPeers() {
+<a class="jxr_linenumber" name="141" href="#141">141</a>     getRegionServers();
+<a class="jxr_linenumber" name="142" href="#142">142</a> 
+<a class="jxr_linenumber" name="143" href="#143">143</a>     <strong class="jxr_keyword">int</strong> sleepMultiplier = 1;
+<a class="jxr_linenumber" name="144" href="#144">144</a> 
+<a class="jxr_linenumber" name="145" href="#145">145</a>     <em class="jxr_comment">// Connect to peer cluster first, unless we have to stop</em>
+<a class="jxr_linenumber" name="146" href="#146">146</a>     <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">this</strong>.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {
+<a class="jxr_linenumber" name="147" href="#147">147</a>       replicationSinkMgr.chooseSinks();
+<a class="jxr_linenumber" name="148" href="#148">148</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {
+<a class="jxr_linenumber" name="149" href="#149">149</a>         <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"Waiting for peers"</span>, sleepMultiplier)) {
+<a class="jxr_linenumber" name="150" href="#150">150</a>           sleepMultiplier++;
+<a class="jxr_linenumber" name="151" href="#151">151</a>         }
+<a class="jxr_linenumber" name="152" href="#152">152</a>       }
+<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">   * Do the sleeping logic</em>
+<a class="jxr_linenumber" name="158" href="#158">158</a> <em class="jxr_javadoccomment">   * @param msg Why we sleep</em>
+<a class="jxr_linenumber" name="159" href="#159">159</a> <em class="jxr_javadoccomment">   * @param sleepMultiplier by how many times the default sleeping time is augmented</em>
+<a class="jxr_linenumber" name="160" href="#160">160</a> <em class="jxr_javadoccomment">   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;</em>
+<a class="jxr_linenumber" name="161" href="#161">161</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="162" href="#162">162</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> sleepForRetries(String msg, <strong class="jxr_keyword">int</strong> sleepMultiplier) {
+<a class="jxr_linenumber" name="163" href="#163">163</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="164" href="#164">164</a>       <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="165" href="#165">165</a>         LOG.trace(msg + <span class="jxr_string">", sleeping "</span> + sleepForRetries + <span class="jxr_string">" times "</span> + sleepMultiplier);
+<a class="jxr_linenumber" name="166" href="#166">166</a>       }
+<a class="jxr_linenumber" name="167" href="#167">167</a>       Thread.sleep(<strong class="jxr_keyword">this</strong>.sleepForRetries * sleepMultiplier);
+<a class="jxr_linenumber" name="168" href="#168">168</a>     } <strong class="jxr_keyword">catch</strong> (InterruptedException e) {
+<a class="jxr_linenumber" name="169" href="#169">169</a>       LOG.debug(<span class="jxr_string">"Interrupted while sleeping between retries"</span>);
+<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> sleepMultiplier &lt; maxRetriesMultiplier;
+<a class="jxr_linenumber" name="172" href="#172">172</a>   }
+<a class="jxr_linenumber" name="173" href="#173">173</a> 
+<a class="jxr_linenumber" name="174" href="#174">174</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="175" href="#175">175</a> <em class="jxr_javadoccomment">   * Do the shipping logic</em>
+<a class="jxr_linenumber" name="176" href="#176">176</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="177" href="#177">177</a>   @Override
+<a class="jxr_linenumber" name="178" href="#178">178</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> replicate(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html">ReplicateContext</a> replicateContext) {
+<a class="jxr_linenumber" name="179" href="#179">179</a>     CompletionService&lt;Integer&gt; pool = <strong class="jxr_keyword">new</strong> ExecutorCompletionService&lt;Integer&gt;(<strong class="jxr_keyword">this</strong>.exec);
+<a class="jxr_linenumber" name="180" href="#180">180</a>     List&lt;Entry&gt; entries = replicateContext.getEntries();
+<a class="jxr_linenumber" name="181" href="#181">181</a>     String walGroupId = replicateContext.getWalGroupId();
+<a class="jxr_linenumber" name="182" href="#182">182</a>     <strong class="jxr_keyword">int</strong> sleepMultiplier = 1;
+<a class="jxr_linenumber" name="183" href="#183">183</a> 
+<a class="jxr_linenumber" name="184" href="#184">184</a>     <strong class="jxr_keyword">if</strong> (!peersSelected &amp;&amp; <strong class="jxr_keyword">this</strong>.isRunning()) {
+<a class="jxr_linenumber" name="185" href="#185">185</a>       connectToPeers();
+<a class="jxr_linenumber" name="186" href="#186">186</a>       peersSelected = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="187" href="#187">187</a>     }
+<a class="jxr_linenumber" name="188" href="#188">188</a> 
+<a class="jxr_linenumber" name="189" href="#189">189</a>     <strong class="jxr_keyword">if</strong> (replicationSinkMgr.getSinks().size() == 0) {
+<a class="jxr_linenumber" name="190" href="#190">190</a>       <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="191" href="#191">191</a>     }
+<a class="jxr_linenumber" name="192" href="#192">192</a>     <em class="jxr_comment">// minimum of: configured threads, number of 100-waledit batches,</em>
+<a class="jxr_linenumber" name="193" href="#193">193</a>     <em class="jxr_comment">//  and number of current sinks</em>
+<a class="jxr_linenumber" name="194" href="#194">194</a>     <strong class="jxr_keyword">int</strong> n = Math.min(Math.min(<strong class="jxr_keyword">this</strong>.maxThreads, entries.size()/100+1),
+<a class="jxr_linenumber" name="195" href="#195">195</a>       replicationSinkMgr.getSinks().size());
+<a class="jxr_linenumber" name="196" href="#196">196</a>     List&lt;List&lt;Entry&gt;&gt; entryLists = <strong class="jxr_keyword">new</strong> ArrayList&lt;List&lt;Entry&gt;&gt;(n);
+<a class="jxr_linenumber" name="197" href="#197">197</a>     <strong class="jxr_keyword">if</strong> (n == 1) {
+<a class="jxr_linenumber" name="198" href="#198">198</a>       entryLists.add(entries);
+<a class="jxr_linenumber" name="199" href="#199">199</a>     } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="200" href="#200">200</a>       <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;n; i++) {
+<a class="jxr_linenumber" name="201" href="#201">201</a>         entryLists.add(<strong class="jxr_keyword">new</strong> ArrayList&lt;Entry&gt;(entries.size()/n+1));
+<a class="jxr_linenumber" name="202" href="#202">202</a>       }
+<a class="jxr_linenumber" name="203" href="#203">203</a>       <em class="jxr_comment">// now group by region</em>
+<a class="jxr_linenumber" name="204" href="#204">204</a>       <strong class="jxr_keyword">for</strong> (Entry e : entries) {
+<a class="jxr_linenumber" name="205" href="#205">205</a>         entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);
+<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">while</strong> (<strong class="jxr_keyword">this</strong>.isRunning()) {
+<a class="jxr_linenumber" name="209" href="#209">209</a>       <strong class="jxr_keyword">if</strong> (!isPeerEnabled()) {
+<a class="jxr_linenumber" name="210" href="#210">210</a>         <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"Replication is disabled"</span>, sleepMultiplier)) {
+<a class="jxr_linenumber" name="211" href="#211">211</a>           sleepMultiplier++;
+<a class="jxr_linenumber" name="212" href="#212">212</a>         }
+<a class="jxr_linenumber" name="213" href="#213">213</a>         <strong class="jxr_keyword">continue</strong>;
+<a class="jxr_linenumber" name="214" href="#214">214</a>       }
+<a class="jxr_linenumber" name="215" href="#215">215</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="216" href="#216">216</a>         <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="217" href="#217">217</a>           LOG.trace(<span class="jxr_string">"Replicating "</span> + entries.size() +
+<a class="jxr_linenumber" name="218" href="#218">218</a>               <span class="jxr_string">" entries of total size "</span> + replicateContext.getSize());
+<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>         <strong class="jxr_keyword">int</strong> futures = 0;
+<a class="jxr_linenumber" name="222" href="#222">222</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;entryLists.size(); i++) {
+<a class="jxr_linenumber" name="223" href="#223">223</a>           <strong class="jxr_keyword">if</strong> (!entryLists.get(i).isEmpty()) {
+<a class="jxr_linenumber" name="224" href="#224">224</a>             <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="225" href="#225">225</a>               LOG.trace(<span class="jxr_string">"Submitting "</span> + entryLists.get(i).size() +
+<a class="jxr_linenumber" name="226" href="#226">226</a>                   <span class="jxr_string">" entries of total size "</span> + replicateContext.getSize());
+<a class="jxr_linenumber" name="227" href="#227">227</a>             }
+<a class="jxr_linenumber" name="228" href="#228">228</a>             <em class="jxr_comment">// RuntimeExceptions encountered here bubble up and are handled in ReplicationSource</em>
+<a class="jxr_linenumber" name="229" href="#229">229</a>             pool.submit(createReplicator(entryLists.get(i), i));
+<a class="jxr_linenumber" name="230" href="#230">230</a>             futures++;
+<a class="jxr_linenumber" name="231" href="#231">231</a>           }
+<a class="jxr_linenumber" name="232" href="#232">232</a>         }
+<a class="jxr_linenumber" name="233" href="#233">233</a>         IOException iox = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="234" href="#234">234</a> 
+<a class="jxr_linenumber" name="235" href="#235">235</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;futures; i++) {
+<a class="jxr_linenumber" name="236" href="#236">236</a>           <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="237" href="#237">237</a>             <em class="jxr_comment">// wait for all futures, remove successful parts</em>
+<a class="jxr_linenumber" name="238" href="#238">238</a>             <em class="jxr_comment">// (only the remaining parts will be retried)</em>
+<a class="jxr_linenumber" name="239" href="#239">239</a>             Future&lt;Integer&gt; f = pool.take();
+<a class="jxr_linenumber" name="240" href="#240">240</a>             entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());
+<a class="jxr_linenumber" name="241" href="#241">241</a>           } <strong class="jxr_keyword">catch</strong> (InterruptedException ie) {
+<a class="jxr_linenumber" name="242" href="#242">242</a>             iox =  <strong class="jxr_keyword">new</strong> IOException(ie);
+<a class="jxr_linenumber" name="243" href="#243">243</a>           } <strong class="jxr_keyword">catch</strong> (ExecutionException ee) {
+<a class="jxr_linenumber" name="244" href="#244">244</a>             <em class="jxr_comment">// cause must be an IOException</em>
+<a class="jxr_linenumber" name="245" href="#245">245</a>             iox = (IOException)ee.getCause();
+<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>         <strong class="jxr_keyword">if</strong> (iox != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="249" href="#249">249</a>           <em class="jxr_comment">// if we had any exceptions, try again</em>
+<a class="jxr_linenumber" name="250" href="#250">250</a>           <strong class="jxr_keyword">throw</strong> iox;
+<a class="jxr_linenumber" name="251" href="#251">251</a>         }
+<a class="jxr_linenumber" name="252" href="#252">252</a>         <em class="jxr_comment">// update metrics</em>
+<a class="jxr_linenumber" name="253" href="#253">253</a>         <strong class="jxr_keyword">this</strong>.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),
+<a class="jxr_linenumber" name="254" href="#254">254</a>           walGroupId);
+<a class="jxr_linenumber" name="255" href="#255">255</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="256" href="#256">256</a> 
+<a class="jxr_linenumber" name="257" href="#257">257</a>       } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
+<a class="jxr_linenumber" name="258" href="#258">258</a>         <em class="jxr_comment">// Didn't ship anything, but must still age the last time we did</em>
+<a class="jxr_linenumber" name="259" href="#259">259</a>         <strong class="jxr_keyword">this</strong>.metrics.refreshAgeOfLastShippedOp(walGroupId);
+<a class="jxr_linenumber" name="260" href="#260">260</a>         <strong class="jxr_keyword">if</strong> (ioe instanceof RemoteException) {
+<a class="jxr_linenumber" name="261" href="#261">261</a>           ioe = ((RemoteException) ioe).unwrapRemoteException();
+<a class="jxr_linenumber" name="262" href="#262">262</a>           LOG.warn(<span class="jxr_string">"Can't replicate because of an error on the remote cluster: "</span>, ioe);
+<a class="jxr_linenumber" name="263" href="#263">263</a>           <strong class="jxr_keyword">if</strong> (ioe instanceof TableNotFoundException) {
+<a class="jxr_linenumber" name="264" href="#264">264</a>             <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"A table is missing in the peer cluster. "</span>
+<a class="jxr_linenumber" name="265" href="#265">265</a>                 + <span class="jxr_string">"Replication cannot proceed without losing data."</span>, sleepMultiplier)) {
+<a class="jxr_linenumber" name="266" href="#266">266</a>               sleepMultiplier++;
+<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>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="270" href="#270">270</a>           <strong class="jxr_keyword">if</strong> (ioe instanceof SocketTimeoutException) {
+<a class="jxr_linenumber" name="271" href="#271">271</a>             <em class="jxr_comment">// This exception means we waited for more than 60s and nothing</em>
+<a class="jxr_linenumber" name="272" href="#272">272</a>             <em class="jxr_comment">// happened, the cluster is alive and calling it right away</em>
+<a class="jxr_linenumber" name="273" href="#273">273</a>             <em class="jxr_comment">// even for a test just makes things worse.</em>
+<a class="jxr_linenumber" name="274" href="#274">274</a>             sleepForRetries(<span class="jxr_string">"Encountered a SocketTimeoutException. Since the "</span> +
+<a class="jxr_linenumber" name="275" href="#275">275</a>               <span class="jxr_string">"call to the remote cluster timed out, which is usually "</span> +
+<a class="jxr_linenumber" name="276" href="#276">276</a>               <span class="jxr_string">"caused by a machine failure or a massive slowdown"</span>,
+<a class="jxr_linenumber" name="277" href="#277">277</a>               <strong class="jxr_keyword">this</strong>.socketTimeoutMultiplier);
+<a class="jxr_linenumber" name="278" href="#278">278</a>           } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (ioe instanceof ConnectException) {
+<a class="jxr_linenumber" name="279" href="#279">279</a>             LOG.warn(<span class="jxr_string">"Peer is unavailable, rechecking all sinks: "</span>, ioe);
+<a class="jxr_linenumber" name="280" href="#280">280</a>             replicationSinkMgr.chooseSinks();
+<a class="jxr_linenumber" name="281" href="#281">281</a>           } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="282" href="#282">282</a>             LOG.warn(<span class="jxr_string">"Can't replicate because of a local or network error: "</span>, ioe);
+<a class="jxr_linenumber" name="283" href="#283">283</a>           }
+<a class="jxr_linenumber" name="284" href="#284">284</a>         }
+<a class="jxr_linenumber" name="285" href="#285">285</a>         <strong class="jxr_keyword">if</strong> (sleepForRetries(<span class="jxr_string">"Since we are unable to replicate"</span>, sleepMultiplier)) {
+<a class="jxr_linenumber" name="286" href="#286">286</a>           sleepMultiplier++;
+<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>     <strong class="jxr_keyword">return</strong> false; <em class="jxr_comment">// in case we exited before replicating</em>
+<a class="jxr_linenumber" name="291" href="#291">291</a>   }
+<a class="jxr_linenumber" name="292" href="#292">292</a> 
+<a class="jxr_linenumber" name="293" href="#293">293</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> isPeerEnabled() {
+<a class="jxr_linenumber" name="294" href="#294">294</a>     <strong class="jxr_keyword">return</strong> ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;
+<a class="jxr_linenumber" name="295" href="#295">295</a>   }
+<a class="jxr_linenumber" name="296" href="#296">296</a> 
+<a class="jxr_linenumber" name="297" href="#297">297</a>   @Override
+<a class="jxr_linenumber" name="298" href="#298">298</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> doStop() {
+<a class="jxr_linenumber" name="299" href="#299">299</a>     disconnect(); <em class="jxr_comment">//don't call super.doStop()</em>
+<a class="jxr_linenumber" name="300" href="#300">300</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.conn != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="301" href="#301">301</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="302" href="#302">302</a>         <strong class="jxr_keyword">this</strong>.conn.close();
+<a class="jxr_linenumber" name="303" href="#303">303</a>         <strong class="jxr_keyword">this</strong>.conn = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="304" href="#304">304</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="305" href="#305">305</a>         LOG.warn(<span class="jxr_string">"Failed to close the connection"</span>);
+<a class="jxr_linenumber" name="306" href="#306">306</a>       }
+<a class="jxr_linenumber" name="307" href="#307">307</a>     }
+<a class="jxr_linenumber" name="308" href="#308">308</a>     exec.shutdownNow();
+<a class="jxr_linenumber" name="309" href="#309">309</a>     notifyStopped();
+<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>   <em class="jxr_comment">// is this needed? Nobody else will call doStop() otherwise</em>
+<a class="jxr_linenumber" name="313" href="#313">313</a>   @Override
+<a class="jxr_linenumber" name="314" href="#314">314</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/Coprocessor.html">State</a> stopAndWait() {
+<a class="jxr_linenumber" name="315" href="#315">315</a>     doStop();
+<a class="jxr_linenumber" name="316" href="#316">316</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">super</strong>.stopAndWait();
+<a class="jxr_linenumber" name="317" href="#317">317</a>   }
+<a class="jxr_linenumber" name="318" href="#318">318</a> 
+<a class="jxr_linenumber" name="319" href="#319">319</a>   @VisibleForTesting
+<a class="jxr_linenumber" name="320" href="#320">320</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a> createReplicator(List&lt;Entry&gt; entries, <strong class="jxr_keyword">int</strong> ordinal) {
+<a class="jxr_linenumber" name="321" href="#321">321</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a>(entries, ordinal);
+<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>   @VisibleForTesting
+<a class="jxr_linenumber" name="325" href="#325">325</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a> <strong class="jxr_keyword">implements</strong> Callable&lt;Integer&gt; {
+<a class="jxr_linenumber" name="326" href="#326">326</a>     <strong class="jxr_keyword">private</strong> List&lt;Entry&gt; entries;
+<a class="jxr_linenumber" name="327" href="#327">327</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> ordinal;
+<a class="jxr_linenumber" name="328" href="#328">328</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html">Replicator</a>(List&lt;Entry&gt; entries, <strong class="jxr_keyword">int</strong> ordinal) {
+<a class="jxr_linenumber" name="329" href="#329">329</a>       <strong class="jxr_keyword">this</strong>.entries = entries;
+<a class="jxr_linenumber" name="330" href="#330">330</a>       <strong class="jxr_keyword">this</strong>.ordinal = ordinal;
+<a class="jxr_linenumber" name="331" href="#331">331</a>     }
+<a class="jxr_linenumber" name="332" href="#332">332</a> 
+<a class="jxr_linenumber" name="333" href="#333">333</a>     @Override
+<a class="jxr_linenumber" name="334" href="#334">334</a>     <strong class="jxr_keyword">public</strong> Integer call() <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="335" href="#335">335</a>       <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html">SinkPeer</a> sinkPeer = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="336" href="#336">336</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="337" href="#337">337</a>         sinkPeer = replicationSinkMgr.getReplicationSink();
+<a class="jxr_linenumber" name="338" href="#338">338</a>         BlockingInterface rrs = sinkPeer.getRegionServer();
+<a class="jxr_linenumber" name="339" href="#339">339</a>         ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(<strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/util/IdLock.html">Entry</a>[entries.size()]),
+<a class="jxr_linenumber" name="340" href="#340">340</a>           replicationClusterId, baseNamespaceDir, hfileArchiveDir);
+<a class="jxr_linenumber" name="341" href="#341">341</a>         replicationSinkMgr.reportSinkSuccess(sinkPeer);
+<a class="jxr_linenumber" name="342" href="#342">342</a>         <strong class="jxr_keyword">return</strong> ordinal;
+<a class="jxr_linenumber" name="343" href="#343">343</a> 
+<a class="jxr_linenumber" name="344" href="#344">344</a>       } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
+<a class="jxr_linenumber" name="345" href="#345">345</a>         <strong class="jxr_keyword">if</strong> (sinkPeer != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="346" href="#346">346</a>           replicationSinkMgr.reportBadSink(sinkPeer);
+<a class="jxr_linenumber" name="347" href="#347">347</a>         }
+<a class="jxr_linenumber" name="348" href="#348">348</a>         <strong class="jxr_keyword">throw</strong> ioe;
+<a class="jxr_linenumber" name="349" href="#349">349</a>       }
+<a class="jxr_linenumber" name="350" href="#350">350</a>     }
+<a class="jxr_linenumber" name="351" href="#351">351</a> 
+<a class="jxr_linenumber" name="352" href="#352">352</a>   }
+<a class="jxr_linenumber" name="353" href="#353">353</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


[41/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
index 2f6b60a..91aedc5 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -738,52 +738,68 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize()">getSize</a></strong>()</code>&nbsp;</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/regionserver/HStore.html#getSmallestReadPoint()">getSmallestReadPoint</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/HStore.html#getSnapshotSize()">getSnapshotSize</a></strong>()</code>
 <div class="block">Returns the memstore snapshot size</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint()">getSplitPoint</a></strong>()</code>
 <div class="block">Determines if Store should be split</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StoreEngine</a>&lt;?,?,?,?&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine()">getStoreEngine</a></strong>()</code>
 <div class="block">Returns the StoreEngine that is backing this concrete implementation of Store.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles()">getStorefiles</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/HStore.html#getStorefilesCount()">getStorefilesCount</a></strong>()</code>&nbsp;</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/regionserver/HStore.html#getStorefilesIndexSize()">getStorefilesIndexSize</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/HStore.html#getStorefilesSize()">getStorefilesSize</a></strong>()</code>&nbsp;</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/regionserver/HStore.html#getStoreFileTtl()">getStoreFileTtl</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.HRegionInfo,%20byte[])">getStoreHomedir</a></strong>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                               <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
@@ -791,7 +807,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20java.lang.String,%20byte[])">getStoreHomedir</a></strong>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName,
@@ -799,25 +815,25 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 </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/HStore.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName()">getTableName</a></strong>()</code>&nbsp;</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/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getThreadPoolExecutor(int)">getThreadPoolExecutor</a></strong>(int&nbsp;maxThreads)</code>&nbsp;</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/regionserver/HStore.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a></strong>()</code>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays.</div>
 </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/HStore.html#getTotalStaticIndexSize()">getTotalStaticIndexSize</a></strong>()</code>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
@@ -825,40 +841,40 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  single-level indexes.</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/HStore.html#hasReferences()">hasReferences</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a></strong>()</code>&nbsp;</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/regionserver/HStore.html#heapSize()">heapSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isCellTTLExpired(org.apache.hadoop.hbase.Cell,%20long,%20long)">isCellTTLExpired</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                                 long&nbsp;oldestTimestamp,
                                 long&nbsp;now)</code>&nbsp;</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/HStore.html#isMajorCompaction()">isMajorCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#loadStoreFiles()">loadStoreFiles</a></strong>()</code>
 <div class="block">Creates an unsorted list of StoreFile loaded in parallel
  from the given directory.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#logCompactionEndMessage(org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20java.util.List,%20long)">logCompactionEndMessage</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
                                               <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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
@@ -866,38 +882,38 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Log a very elaborate compaction completion message.</div>
 </td>
 </tr>
-<tr class="altColor">
+<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveCompatedFilesIntoPlace(org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20java.util.List,%20org.apache.hadoop.hbase.security.User)">moveCompatedFilesIntoPlace</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
                                                     <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.fs.Path&gt;&nbsp;newFiles,
                                                     <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace(org.apache.hadoop.fs.Path)">moveFileIntoPlace</a></strong>(org.apache.hadoop.fs.Path&nbsp;newFile)</code>&nbsp;</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/HStore.html#needsCompaction()">needsCompaction</a></strong>()</code>
 <div class="block">See if there's too much store files in this store</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/HStore.html#notifyChangedReadersObservers()">notifyChangedReadersObservers</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#notifyChangedReadersObservers(java.util.List)">notifyChangedReadersObservers</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</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/regionserver/HStore.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">onConfigurationChange</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf)</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>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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#openStoreFiles(java.util.Collection)">openStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;files)</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/regionserver/HStore.html#refreshStoreFiles()">refreshStoreFiles</a></strong>()</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -905,13 +921,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  available.</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/regionserver/HStore.html#refreshStoreFiles(java.util.Collection)">refreshStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="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;&nbsp;newFiles)</code>
 <div class="block">Replaces the store files that the store has with the given files.</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/HStore.html#refreshStoreFilesInternal(java.util.Collection)">refreshStoreFilesInternal</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;newFiles)</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -919,26 +935,26 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  available.</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/regionserver/HStore.html#registerChildren(org.apache.hadoop.hbase.conf.ConfigurationManager)">registerChildren</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</code>
 <div class="block">Needs to be called to register the children to the manager.</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/HStore.html#removeCompactedFiles(java.util.Collection)">removeCompactedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#removeUnneededFiles()">removeUnneededFiles</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles,
                                   <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;result)</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/regionserver/HStore.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker</a></strong>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                                             boolean&nbsp;pickCompactionFiles,
@@ -946,64 +962,64 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Call to complete a compaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction()">requestCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest,
                                   <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</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/regionserver/HStore.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>
 <div class="block">Removes a Cell from the memstore.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder)">setDataBlockEncoderInTest</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a>&nbsp;blockEncoder)</code>
 <div class="block">Should be used only in tests.</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/HStore.html#setScanInfo(org.apache.hadoop.hbase.regionserver.ScanInfo)">setScanInfo</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo)</code>
 <div class="block">Set scan info, used by test</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot()">snapshot</a></strong>()</code>
 <div class="block">Snapshot this stores memstore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction(long)">throttleCompaction</a></strong>(long&nbsp;compactionSize)</code>&nbsp;</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/regionserver/HStore.html#timeOfOldestEdit()">timeOfOldestEdit</a></strong>()</code>
 <div class="block">When was the last edit done in the memstore</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#toString()">toString</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/regionserver/HStore.html#triggerMajorCompaction()">triggerMajorCompaction</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/HStore.html#updateColumnValue(byte[],%20byte[],%20byte[],%20long)">updateColumnValue</a></strong>(byte[]&nbsp;row,
                                   byte[]&nbsp;f,
@@ -1012,29 +1028,29 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Used in tests.</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/HStore.html#updateStorefiles(java.util.List,%20long)">updateStorefiles</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
                                 long&nbsp;snapshotId)</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/HStore.html#upsert(java.lang.Iterable,%20long)">upsert</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
             long&nbsp;readpoint)</code>
 <div class="block">Adds or replaces the specified KeyValues.</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/HStore.html#validateStoreFile(org.apache.hadoop.fs.Path)">validateStoreFile</a></strong>(org.apache.hadoop.fs.Path&nbsp;path)</code>
 <div class="block">Validates a store file by opening and closing it.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn(int)">versionsToReturn</a></strong>(int&nbsp;wantedVersions)</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/HStore.html#writeCompactionWalRecord(java.util.Collection,%20java.util.Collection)">writeCompactionWalRecord</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacted,
                                                 <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;newFiles)</code>
@@ -1479,7 +1495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2155">FIXED_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2179">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="DEEP_OVERHEAD">
@@ -1488,7 +1504,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DEEP_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2159">DEEP_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2183">DEEP_OVERHEAD</a></pre>
 </li>
 </ul>
 </li>
@@ -2196,13 +2212,13 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
-<a name="notifyChangedReadersObservers()">
+<a name="notifyChangedReadersObservers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>notifyChangedReadersObservers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1063">notifyChangedReadersObservers</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1063">notifyChangedReadersObservers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)
                                     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>
@@ -2233,13 +2249,42 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
+<a name="getScanners(java.util.List, boolean, boolean, boolean, boolean, org.apache.hadoop.hbase.regionserver.ScanQueryMatcher, byte[], byte[], long, boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getScanners</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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1105">getScanners</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                                boolean&nbsp;cacheBlocks,
+                                boolean&nbsp;isGet,
+                                boolean&nbsp;usePread,
+                                boolean&nbsp;isCompaction,
+                                <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                                byte[]&nbsp;startRow,
+                                byte[]&nbsp;stopRow,
+                                long&nbsp;readPt,
+                                boolean&nbsp;includeMemstoreScanner)
+                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">Store</a></code></strong></div>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>files</code> - the list of files on which the scanners has to be created</dd><dd><code>cacheBlocks</code> - cache the blocks or not</dd><dd><code>isGet</code> - true if it is get, false if not</dd><dd><code>usePread</code> - true to use pread, false if not</dd><dd><code>isCompaction</code> - true if the scanner is created for compaction</dd><dd><code>matcher</code> - the scan query matcher</dd><dd><code>startRow</code> - the start row</dd><dd><code>stopRow</code> - the stop row</dd><dd><code>readPt</code> - the read point of the current scan</dd><dd><code>includeMemstoreScanner</code> - true if memstore has to be included</dd>
+<dt><span class="strong">Returns:</span></dt><dd>scanners on the given files and on the memstore if specified</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
 <a name="addChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>addChangedReaderObserver</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1105">addChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1129">addChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#addChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">addChangedReaderObserver</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2252,7 +2297,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteChangedReaderObserver</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1110">deleteChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1134">deleteChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">deleteChangedReaderObserver</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2265,7 +2310,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1163">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
+<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1187">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
                       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionThroughputController</a>&nbsp;throughputController)
                         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">Compact the StoreFiles.  This method may take some time, so the calling
@@ -2320,7 +2365,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1169">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
+<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1193">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
                       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionThroughputController</a>&nbsp;throughputController,
                       <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                         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>
@@ -2337,7 +2382,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>moveCompatedFilesIntoPlace</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1232">moveCompatedFilesIntoPlace</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
+<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1256">moveCompatedFilesIntoPlace</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
                                          <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.fs.Path&gt;&nbsp;newFiles,
                                          <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                                             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>
@@ -2351,7 +2396,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>moveFileIntoPlace</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1265">moveFileIntoPlace</a>(org.apache.hadoop.fs.Path&nbsp;newFile)
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1289">moveFileIntoPlace</a>(org.apache.hadoop.fs.Path&nbsp;newFile)
                       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>
@@ -2363,7 +2408,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>writeCompactionWalRecord</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1277">writeCompactionWalRecord</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacted,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1301">writeCompactionWalRecord</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacted,
                             <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;newFiles)
                                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">Writes the compaction WAL record.</div>
@@ -2378,7 +2423,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>replaceStoreFiles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1296">replaceStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1320">replaceStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles,
                      <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&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>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -2391,7 +2436,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>logCompactionEndMessage</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1313">logCompactionEndMessage</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1337">logCompactionEndMessage</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
                            <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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
                            long&nbsp;compactionStartTime)</pre>
 <div class="block">Log a very elaborate compaction completion message.</div>
@@ -2404,7 +2449,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>replayCompactionMarker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1357">replayCompactionMarker</a>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1381">replayCompactionMarker</a>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                           boolean&nbsp;pickCompactionFiles,
                           boolean&nbsp;removeFiles)
                             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>
@@ -2426,7 +2471,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRecentForTestingAssumingDefaultPolicy</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1422">compactRecentForTestingAssumingDefaultPolicy</a>(int&nbsp;N)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1446">compactRecentForTestingAssumingDefaultPolicy</a>(int&nbsp;N)
                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This method tries to compact N recent files for testing.
  Note that because compacting "recent" files only makes sense for some policies,
@@ -2443,7 +2488,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>hasReferences</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1473">hasReferences</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1497">hasReferences</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#hasReferences()">hasReferences</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2456,7 +2501,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionProgress</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionProgress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1478">getCompactionProgress</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionProgress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1502">getCompactionProgress</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactionProgress()">Store</a></code></strong></div>
 <div class="block">getter for CompactionProgress object</div>
 <dl>
@@ -2471,7 +2516,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isMajorCompaction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1483">isMajorCompaction</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1507">isMajorCompaction</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -2487,7 +2532,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCompaction</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1496">requestCompaction</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1520">requestCompaction</a>()
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -2502,7 +2547,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCompaction</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1501">requestCompaction</a>(int&nbsp;priority,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1525">requestCompaction</a>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest)
                                     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>
@@ -2518,7 +2563,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCompaction</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1506">requestCompaction</a>(int&nbsp;priority,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1530">requestCompaction</a>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest,
                                   <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                                     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>
@@ -2535,7 +2580,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>addToCompactingFiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1628">addToCompactingFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesToAdd)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1652">addToCompactingFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesToAdd)</pre>
 <div class="block">Adds the files to compacting files. filesCompacting must be locked.</div>
 </li>
 </ul>
@@ -2545,7 +2590,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>removeUnneededFiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1638">removeUnneededFiles</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1662">removeUnneededFiles</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>
@@ -2557,7 +2602,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>cancelRequestedCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1671">cancelRequestedCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1695">cancelRequestedCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#cancelRequestedCompaction(org.apache.hadoop.hbase.regionserver.compactions.CompactionContext)">cancelRequestedCompaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2570,7 +2615,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>finishCompactionRequest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1675">finishCompactionRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1699">finishCompactionRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr)</pre>
 </li>
 </ul>
 <a name="validateStoreFile(org.apache.hadoop.fs.Path)">
@@ -2579,7 +2624,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>validateStoreFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1692">validateStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;path)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1716">validateStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;path)
                         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">Validates a store file by opening and closing it. In HFileV2 this should
  not be an expensive operation.</div>
@@ -2594,7 +2639,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>completeCompaction</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1723">completeCompaction</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1747">completeCompaction</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles)
                            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"><p>It works by processing a compaction that's been written to disk.
 
@@ -2617,7 +2662,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>versionsToReturn</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1743">versionsToReturn</a>(int&nbsp;wantedVersions)</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1767">versionsToReturn</a>(int&nbsp;wantedVersions)</pre>
 </li>
 </ul>
 <a name="isCellTTLExpired(org.apache.hadoop.hbase.Cell, long, long)">
@@ -2626,7 +2671,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isCellTTLExpired</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1757">isCellTTLExpired</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1781">isCellTTLExpired</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                        long&nbsp;oldestTimestamp,
                        long&nbsp;now)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - </dd><dd><code>oldestTimestamp</code> - </dd>
@@ -2639,7 +2684,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>canSplit</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1786">canSplit</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1810">canSplit</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#canSplit()">canSplit</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2652,7 +2697,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitPoint</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1801">getSplitPoint</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1825">getSplitPoint</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSplitPoint()">Store</a></code></strong></div>
 <div class="block">Determines if Store should be split</div>
 <dl>
@@ -2667,7 +2712,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastCompactSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1820">getLastCompactSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1844">getLastCompactSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getLastCompactSize()">getLastCompactSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2680,7 +2725,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1825">getSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1849">getSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSize()">getSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2693,7 +2738,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerMajorCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1830">triggerMajorCompaction</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1854">triggerMajorCompaction</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#triggerMajorCompaction()">triggerMajorCompaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2706,7 +2751,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1840">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1864">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;targetCols,
                          long&nbsp;readPt)
                            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>
@@ -2728,7 +2773,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>createScanner</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1855">createScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1879">createScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;targetCols,
                             long&nbsp;readPt,
                             <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&nbsp;scanner)
@@ -2743,7 +2788,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-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/regionserver/HStore.html#line.1866">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1890">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>
@@ -2756,7 +2801,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1871">getStorefilesCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1895">getStorefilesCount</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesCount()">getStorefilesCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2769,7 +2814,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreSizeUncompressed</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1876">getStoreSizeUncompressed</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1900">getStoreSizeUncompressed</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2782,7 +2827,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1881">getStorefilesSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1905">getStorefilesSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesSize()">getStorefilesSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2795,7 +2840,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesIndexSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1895">getStorefilesIndexSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1919">getStorefilesIndexSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesIndexSize()">getStorefilesIndexSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2808,7 +2853,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticIndexSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1909">getTotalStaticIndexSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1933">getTotalStaticIndexSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTotalStaticIndexSize()">Store</a></code></strong></div>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
  intermediate levels, and the leaf level for multi-level indexes, or just the root level for
@@ -2825,7 +2870,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticBloomSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1922">getTotalStaticBloomSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1946">getTotalStaticBloomSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTotalStaticBloomSize()">Store</a></code></strong></div>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the
  Bloom blocks currently not loaded into the block cache are counted.</div>
@@ -2841,7 +2886,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1935">getMemStoreSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1959">getMemStoreSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMemStoreSize()">getMemStoreSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2854,7 +2899,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1940">getCompactPriority</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1964">getCompactPriority</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactPriority()">getCompactPriority</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2867,7 +2912,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>throttleCompaction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1949">throttleCompaction</a>(long&nbsp;compactionSize)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1973">throttleCompaction</a>(long&nbsp;compactionSize)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#throttleCompaction(long)">throttleCompaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2880,7 +2925,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1953">getHRegion</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1977">getHRegion</a>()</pre>
 </li>
 </ul>
 <a name="getCoprocessorHost()">
@@ -2889,7 +2934,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1958">getCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1982">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCoprocessorHost()">getCoprocessorHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2902,7 +2947,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1963">getRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1987">getRegionInfo</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getRegionInfo()">getRegionInfo</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2915,7 +2960,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>areWritesEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1968">areWritesEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1992">areWritesEnabled</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#areWri

<TRUNCATED>

[37/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
index a8d2ee2..b473d20 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
@@ -114,7 +114,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/StoreScanner.html#line.57">StoreScanner</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.58">StoreScanner</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a></pre>
 <div class="block">Scanner scans both the memstore and the Store. Coalesce KeyValue stream
@@ -177,126 +177,138 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></strong></code>
 <div class="block">Default value of <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK"><code>HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a></strong></code>&nbsp;</td>
 </tr>
+<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushedStoreFiles">flushedStoreFiles</a></strong></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushLock">flushLock</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a></strong></code>&nbsp;</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/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></strong></code>
 <div class="block">The number of cells scanned in between timeout checks.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#kvsScanned">kvsScanned</a></strong></code>
 <div class="block">The number of KVs seen by the scanner.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a></strong></code>
 <div class="block">We don't ever expect to change this, the constant is just for clarity.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a></strong></code>
 <div class="block">Used during unit testing to ensure that lazy seek does save seek ops</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#matcher">matcher</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/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</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/regionserver/StoreScanner.html#now">now</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/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a></strong></code>
 <div class="block">A flag that enables StoreFileScanner parallel-seeking</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#prevCell">prevCell</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/regionserver/StoreScanner.html#readPt">readPt</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#scan">scan</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/StoreScanner.html#scanUsePread">scanUsePread</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <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/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></strong></code>&nbsp;</td>
 </tr>
@@ -416,14 +428,18 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek()">checkReseek</a></strong>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#addCurrentScanners(java.util.List)">addCurrentScanners</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkResetHeap()">checkResetHeap</a></strong>()</code>&nbsp;</td>
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkFlushed()">checkFlushed</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek(boolean)">checkReseek</a></strong>(boolean&nbsp;flushed)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkScanOrder(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.CellComparator)">checkScanOrder</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;prevKV,
                             <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
@@ -431,69 +447,65 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <div class="block">Check whether scan as expected order</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/regionserver/StoreScanner.html#close()">close</a></strong>()</code>
 <div class="block">Close the KeyValue scanner.</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/StoreScanner.html#close(boolean)">close</a></strong>(boolean&nbsp;withHeapClose)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a></strong>(boolean&nbsp;enable)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package 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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a></strong>()</code>
 <div class="block">Used in testing.</div>
 </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/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey()">getNextIndexedKey</a></strong>()</code>&nbsp;</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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScannersNoCompaction</a></strong>()</code>
 <div class="block">Get a filtered list of scanners.</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/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a></strong>()</code>
 <div class="block">Get the sequence id associated with this KeyValueScanner.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a></strong>()</code>
 <div class="block">Return the next Cell in this scanner, iterating the scanner</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/StoreScanner.html#next(java.util.List)">next</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult)</code>
 <div class="block">Grab the next row's worth of values.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List,%20org.apache.hadoop.hbase.regionserver.ScannerContext)">next</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult,
         <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</code>
 <div class="block">Get the next row of values from this Store.</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/regionserver/StoreScanner.html#nullifyCurrentHeap()">nullifyCurrentHeap</a></strong>()</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher.MatchCode</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#optimize(org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode,%20org.apache.hadoop.hbase.Cell)">optimize</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher.MatchCode</a>&nbsp;qcode,
@@ -567,7 +579,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders()">updateReaders</a></strong>()</code>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders(java.util.List)">updateReaders</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</code>
 <div class="block">Notify observers.</div>
 </td>
 </tr>
@@ -620,7 +632,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.59">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.60">LOG</a></pre>
 </li>
 </ul>
 <a name="store">
@@ -629,7 +641,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>store</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.61">store</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.62">store</a></pre>
 </li>
 </ul>
 <a name="matcher">
@@ -638,7 +650,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>matcher</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.62">matcher</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.63">matcher</a></pre>
 </li>
 </ul>
 <a name="heap">
@@ -647,7 +659,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>heap</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.63">heap</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.64">heap</a></pre>
 </li>
 </ul>
 <a name="cacheBlocks">
@@ -656,7 +668,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheBlocks</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.64">cacheBlocks</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.65">cacheBlocks</a></pre>
 </li>
 </ul>
 <a name="countPerRow">
@@ -665,7 +677,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>countPerRow</h4>
-<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.66">countPerRow</a></pre>
+<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.67">countPerRow</a></pre>
 </li>
 </ul>
 <a name="storeLimit">
@@ -674,7 +686,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>storeLimit</h4>
-<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.67">storeLimit</a></pre>
+<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.68">storeLimit</a></pre>
 </li>
 </ul>
 <a name="storeOffset">
@@ -683,7 +695,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>storeOffset</h4>
-<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.68">storeOffset</a></pre>
+<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.69">storeOffset</a></pre>
 </li>
 </ul>
 <a name="closing">
@@ -692,7 +704,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>closing</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.72">closing</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.73">closing</a></pre>
 </li>
 </ul>
 <a name="get">
@@ -701,7 +713,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.73">get</a></pre>
+<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.74">get</a></pre>
 </li>
 </ul>
 <a name="explicitColumnQuery">
@@ -710,7 +722,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>explicitColumnQuery</h4>
-<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.74">explicitColumnQuery</a></pre>
+<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.75">explicitColumnQuery</a></pre>
 </li>
 </ul>
 <a name="useRowColBloom">
@@ -719,7 +731,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>useRowColBloom</h4>
-<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.75">useRowColBloom</a></pre>
+<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.76">useRowColBloom</a></pre>
 </li>
 </ul>
 <a name="parallelSeekEnabled">
@@ -728,7 +740,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>parallelSeekEnabled</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.79">parallelSeekEnabled</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.80">parallelSeekEnabled</a></pre>
 <div class="block">A flag that enables StoreFileScanner parallel-seeking</div>
 </li>
 </ul>
@@ -738,7 +750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>executor</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.80">executor</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.81">executor</a></pre>
 </li>
 </ul>
 <a name="scan">
@@ -747,7 +759,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.81">scan</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.82">scan</a></pre>
 </li>
 </ul>
 <a name="columns">
@@ -756,7 +768,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>columns</h4>
-<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.82">columns</a></pre>
+<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.83">columns</a></pre>
 </li>
 </ul>
 <a name="oldestUnexpiredTS">
@@ -765,7 +777,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>oldestUnexpiredTS</h4>
-<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.83">oldestUnexpiredTS</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.84">oldestUnexpiredTS</a></pre>
 </li>
 </ul>
 <a name="now">
@@ -774,7 +786,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>now</h4>
-<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.84">now</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.85">now</a></pre>
 </li>
 </ul>
 <a name="minVersions">
@@ -783,7 +795,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>minVersions</h4>
-<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.85">minVersions</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.86">minVersions</a></pre>
 </li>
 </ul>
 <a name="maxRowSize">
@@ -792,7 +804,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRowSize</h4>
-<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.86">maxRowSize</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.87">maxRowSize</a></pre>
 </li>
 </ul>
 <a name="cellsPerHeartbeatCheck">
@@ -801,7 +813,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>cellsPerHeartbeatCheck</h4>
-<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.87">cellsPerHeartbeatCheck</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.88">cellsPerHeartbeatCheck</a></pre>
 </li>
 </ul>
 <a name="heapsForDelayedClose">
@@ -810,7 +822,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>heapsForDelayedClose</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/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.91">heapsForDelayedClose</a></pre>
+<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/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.92">heapsForDelayedClose</a></pre>
 </li>
 </ul>
 <a name="kvsScanned">
@@ -819,7 +831,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>kvsScanned</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.97">kvsScanned</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.98">kvsScanned</a></pre>
 <div class="block">The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not
  KVs skipped via seeking to next row/column. TODO: estimate them?</div>
 </li>
@@ -830,7 +842,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>prevCell</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.98">prevCell</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.99">prevCell</a></pre>
 </li>
 </ul>
 <a name="LAZY_SEEK_ENABLED_BY_DEFAULT">
@@ -839,7 +851,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>LAZY_SEEK_ENABLED_BY_DEFAULT</h4>
-<pre>static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.101">LAZY_SEEK_ENABLED_BY_DEFAULT</a></pre>
+<pre>static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.102">LAZY_SEEK_ENABLED_BY_DEFAULT</a></pre>
 <div class="block">We don't ever expect to change this, the constant is just for clarity.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.StoreScanner.LAZY_SEEK_ENABLED_BY_DEFAULT">Constant Field Values</a></dd></dl>
 </li>
@@ -850,7 +862,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>STORESCANNER_PARALLEL_SEEK_ENABLE</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/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/StoreScanner.html#line.102">STORESCANNER_PARALLEL_SEEK_ENABLE</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/StoreScanner.html#line.103">STORESCANNER_PARALLEL_SEEK_ENABLE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -860,7 +872,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>lazySeekEnabledGlobally</h4>
-<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.106">lazySeekEnabledGlobally</a></pre>
+<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.107">lazySeekEnabledGlobally</a></pre>
 <div class="block">Used during unit testing to ensure that lazy seek does save seek ops</div>
 </li>
 </ul>
@@ -870,7 +882,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/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/StoreScanner.html#line.114">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</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/StoreScanner.html#line.115">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></pre>
 <div class="block">The number of cells scanned in between timeout checks. Specifying a larger value means that
  timeout checks will occur less frequently. Specifying a small value will lead to more frequent
  timeout checks.</div>
@@ -883,7 +895,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.120">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.121">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></pre>
 <div class="block">Default value of <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK"><code>HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</code></a>.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.StoreScanner.DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">Constant Field Values</a></dd></dl>
 </li>
@@ -894,7 +906,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>lastTop</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.123">lastTop</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.124">lastTop</a></pre>
 </li>
 </ul>
 <a name="scanUsePread">
@@ -903,7 +915,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>scanUsePread</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.126">scanUsePread</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.127">scanUsePread</a></pre>
 </li>
 </ul>
 <a name="flushed">
@@ -912,7 +924,34 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>flushed</h4>
-<pre>protected volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.128">flushed</a></pre>
+<pre>protected volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.129">flushed</a></pre>
+</li>
+</ul>
+<a name="flushedStoreFiles">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>flushedStoreFiles</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.131">flushedStoreFiles</a></pre>
+</li>
+</ul>
+<a name="currentScanners">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>currentScanners</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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.133">currentScanners</a></pre>
+</li>
+</ul>
+<a name="flushLock">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>flushLock</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.135">flushLock</a></pre>
 </li>
 </ul>
 <a name="readPt">
@@ -921,7 +960,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>readPt</h4>
-<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.130">readPt</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.137">readPt</a></pre>
 </li>
 </ul>
 </li>
@@ -938,7 +977,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.140">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.147">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
             <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -953,7 +992,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.182">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.192">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -972,7 +1011,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.225">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.235">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
@@ -995,7 +1034,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.242">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.252">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
@@ -1018,7 +1057,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.249">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.259">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
@@ -1038,7 +1077,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.273">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.283">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanType</a>&nbsp;scanType,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1054,7 +1093,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.283">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.293">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanType</a>&nbsp;scanType,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1071,7 +1110,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.292">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.302">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanType</a>&nbsp;scanType,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1091,13 +1130,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="addCurrentScanners(java.util.List)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addCurrentScanners</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.180">addCurrentScanners</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners)</pre>
+</li>
+</ul>
 <a name="getScannersNoCompaction()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersNoCompaction</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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.313">getScannersNoCompaction</a>()
+<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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.324">getScannersNoCompaction</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">Get a filtered list of scanners. Assumes we are not in a compaction.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>list of scanners to seek</dd>
@@ -1111,7 +1159,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekScanners</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.328">seekScanners</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.339">seekScanners</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                 <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekKey,
                 boolean&nbsp;isLazy,
                 boolean&nbsp;isParallelSeek)
@@ -1128,7 +1176,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>resetKVHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.359">resetKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.370">resetKVHeap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)
                     throws <a href="http://docs.oracle.com/javase/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>
@@ -1141,7 +1189,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>selectScannersFrom</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.369">selectScannersFrom</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;allScanners)</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.380">selectScannersFrom</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;allScanners)</pre>
 <div class="block">Filters the given list of scanners using Bloom filter, time range, and
  TTL.</div>
 </li>
@@ -1152,7 +1200,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>peek</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.405">peek</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.416">peek</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#peek()">KeyValueScanner</a></code></strong></div>
 <div class="block">Look at the next Cell in this scanner, but do not iterate scanner.</div>
 <dl>
@@ -1167,7 +1215,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.414">next</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.425">next</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#next()">KeyValueScanner</a></code></strong></div>
 <div class="block">Return the next Cell in this scanner, iterating the scanner</div>
 <dl>
@@ -1182,7 +1230,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.420">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.431">close</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#close()">KeyValueScanner</a></code></strong></div>
 <div class="block">Close the KeyValue scanner.</div>
 <dl>
@@ -1203,7 +1251,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.424">close</a>(boolean&nbsp;withHeapClose)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.435">close</a>(boolean&nbsp;withHeapClose)</pre>
 </li>
 </ul>
 <a name="seek(org.apache.hadoop.hbase.Cell)">
@@ -1212,7 +1260,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.450">seek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.463">seek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#seek(org.apache.hadoop.hbase.Cell)">KeyValueScanner</a></code></strong></div>
 <div class="block">Seek the scanner at or after the specified KeyValue.</div>
@@ -1231,7 +1279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.458">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.471">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next(java.util.List)">InternalScanner</a></code></strong></div>
 <div class="block">Grab the next row's worth of values.</div>
@@ -1250,7 +1298,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.469">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.482">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult,
            <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get the next row of values from this Store.</div>
@@ -1269,45 +1317,37 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>optimize</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher.MatchCode</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.638">optimize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher.MatchCode</a>&nbsp;qcode,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher.MatchCode</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.651">optimize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher.MatchCode</a>&nbsp;qcode,
                                   <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 </li>
 </ul>
-<a name="updateReaders()">
+<a name="updateReaders(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>updateReaders</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.668">updateReaders</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.681">updateReaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders()">ChangedReadersObserver</a></code></strong></div>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders(java.util.List)">ChangedReadersObserver</a></code></strong></div>
 <div class="block">Notify observers.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders()">updateReaders</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a></code></dd>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders(java.util.List)">updateReaders</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a></code></dd>
 <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> - e</dd></dl>
 </li>
 </ul>
-<a name="nullifyCurrentHeap()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>nullifyCurrentHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.673">nullifyCurrentHeap</a>()</pre>
-</li>
-</ul>
-<a name="checkReseek()">
+<a name="checkReseek(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReseek</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.696">checkReseek</a>()
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.698">checkReseek</a>(boolean&nbsp;flushed)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl><dt><span class="strong">Returns:</span></dt><dd>true if top of heap has changed (and KeyValueHeap has to try the
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>flushed</code> - indicates if there was a flush</dd>
+<dt><span class="strong">Returns:</span></dt><dd>true if top of heap has changed (and KeyValueHeap has to try the
          next KV)</dd>
 <dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1319,7 +1359,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>resetScannerStack</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.712">resetScannerStack</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;lastTopKey)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.714">resetScannerStack</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;lastTopKey)
                           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>
@@ -1331,7 +1371,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>checkScanOrder</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.749">checkScanOrder</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;prevKV,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.767">checkScanOrder</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;prevKV,
                   <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
                   <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1347,7 +1387,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekToNextRow</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.757">seekToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;c)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.775">seekToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;c)
                          throws <a href="http://docs.oracle.com/javase/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>
@@ -1359,7 +1399,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekAsDirection</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.767">seekAsDirection</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.785">seekAsDirection</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do a reseek in a normal StoreScanner(scan forward)</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>kv</code> - </dd>
@@ -1374,7 +1414,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>reseek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.773">reseek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.791">reseek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#reseek(org.apache.hadoop.hbase.Cell)">KeyValueScanner</a></code></strong></div>
 <div class="block">Reseek the scanner at or after the specified KeyValue.
@@ -1390,13 +1430,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
-<a name="checkResetHeap()">
+<a name="checkFlushed()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>checkResetHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.785">checkResetHeap</a>()</pre>
+<h4>checkFlushed</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.803">checkFlushed</a>()</pre>
 </li>
 </ul>
 <a name="getSequenceID()">
@@ -1405,7 +1445,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getSequenceID</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.805">getSequenceID</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.825">getSequenceID</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getSequenceID()">KeyValueScanner</a></code></strong></div>
 <div class="block">Get the sequence id associated with this KeyValueScanner. This is required
  for comparing multiple files to find out which one has the latest data.
@@ -1423,7 +1463,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>parallelSeek</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.815">parallelSeek</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.835">parallelSeek</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                 <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Seek storefiles in parallel to optimize IO latency as much as possible</div>
@@ -1438,7 +1478,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllScannersForTesting</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.851">getAllScannersForTesting</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.871">getAllScannersForTesting</a>()</pre>
 <div class="block">Used in testing.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>all scanners in no particular order</dd></dl>
 </li>
@@ -1449,7 +1489,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>enableLazySeekGlobally</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.861">enableLazySeekGlobally</a>(boolean&nbsp;enable)</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.881">enableLazySeekGlobally</a>(boolean&nbsp;enable)</pre>
 </li>
 </ul>
 <a name="getEstimatedNumberOfKvsScanned()">
@@ -1458,7 +1498,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getEstimatedNumberOfKvsScanned</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.868">getEstimatedNumberOfKvsScanned</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.888">getEstimatedNumberOfKvsScanned</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The estimated number of KVs seen by this scanner (includes some skipped KVs).</dd></dl>
 </li>
 </ul>
@@ -1468,7 +1508,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextIndexedKey</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.873">getNextIndexedKey</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.893">getNextIndexedKey</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getNextIndexedKey()">getNextIndexedKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></code></dd>
@@ -1484,7 +1524,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <

<TRUNCATED>

[10/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html b/xref-test/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
index 47961fa..29cab65 100644
--- a/xref-test/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
+++ b/xref-test/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
@@ -170,7 +170,7 @@
 <a class="jxr_linenumber" name="160" href="#160">160</a> <em class="jxr_javadoccomment">   * Test snapshotting a table that is online without flushing</em>
 <a class="jxr_linenumber" name="161" href="#161">161</a> <em class="jxr_javadoccomment">   * @throws Exception</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>   @Ignore (<span class="jxr_string">"Flakey test"</span>) @Test(timeout=30000)
+<a class="jxr_linenumber" name="163" href="#163">163</a>   @Test(timeout=30000)
 <a class="jxr_linenumber" name="164" href="#164">164</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSkipFlushTableSnapshot() <strong class="jxr_keyword">throws</strong> Exception {
 <a class="jxr_linenumber" name="165" href="#165">165</a>     Admin admin = UTIL.getHBaseAdmin();
 <a class="jxr_linenumber" name="166" href="#166">166</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
@@ -179,364 +179,365 @@
 <a class="jxr_linenumber" name="169" href="#169">169</a>     <em class="jxr_comment">// put some stuff in the table</em>
 <a class="jxr_linenumber" name="170" href="#170">170</a>     Table table = UTIL.getConnection().getTable(TABLE_NAME);
 <a class="jxr_linenumber" name="171" href="#171">171</a>     UTIL.loadTable(table, TEST_FAM);
-<a class="jxr_linenumber" name="172" href="#172">172</a> 
-<a class="jxr_linenumber" name="173" href="#173">173</a>     LOG.debug(<span class="jxr_string">"FS state before snapshot:"</span>);
-<a class="jxr_linenumber" name="174" href="#174">174</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
-<a class="jxr_linenumber" name="175" href="#175">175</a> 
-<a class="jxr_linenumber" name="176" href="#176">176</a>     <em class="jxr_comment">// take a snapshot of the enabled table</em>
-<a class="jxr_linenumber" name="177" href="#177">177</a>     String snapshotString = <span class="jxr_string">"skipFlushTableSnapshot"</span>;
-<a class="jxr_linenumber" name="178" href="#178">178</a>     byte[] snapshot = Bytes.toBytes(snapshotString);
-<a class="jxr_linenumber" name="179" href="#179">179</a>     admin.snapshot(snapshotString, TABLE_NAME, SnapshotDescription.Type.SKIPFLUSH);
-<a class="jxr_linenumber" name="180" href="#180">180</a>     LOG.debug(<span class="jxr_string">"Snapshot completed."</span>);
-<a class="jxr_linenumber" name="181" href="#181">181</a> 
-<a class="jxr_linenumber" name="182" href="#182">182</a>     <em class="jxr_comment">// make sure we have the snapshot</em>
-<a class="jxr_linenumber" name="183" href="#183">183</a>     List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,
-<a class="jxr_linenumber" name="184" href="#184">184</a>         snapshot, TABLE_NAME);
-<a class="jxr_linenumber" name="185" href="#185">185</a> 
-<a class="jxr_linenumber" name="186" href="#186">186</a>     <em class="jxr_comment">// make sure its a valid snapshot</em>
-<a class="jxr_linenumber" name="187" href="#187">187</a>     LOG.debug(<span class="jxr_string">"FS state after snapshot:"</span>);
-<a class="jxr_linenumber" name="188" href="#188">188</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
-<a class="jxr_linenumber" name="189" href="#189">189</a> 
-<a class="jxr_linenumber" name="190" href="#190">190</a>     SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);
-<a class="jxr_linenumber" name="191" href="#191">191</a> 
-<a class="jxr_linenumber" name="192" href="#192">192</a>     admin.deleteSnapshot(snapshot);
-<a class="jxr_linenumber" name="193" href="#193">193</a>     snapshots = admin.listSnapshots();
-<a class="jxr_linenumber" name="194" href="#194">194</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
-<a class="jxr_linenumber" name="195" href="#195">195</a>   }
-<a class="jxr_linenumber" name="196" href="#196">196</a> 
+<a class="jxr_linenumber" name="172" href="#172">172</a>     UTIL.flush(TABLE_NAME);
+<a class="jxr_linenumber" name="173" href="#173">173</a> 
+<a class="jxr_linenumber" name="174" href="#174">174</a>     LOG.debug(<span class="jxr_string">"FS state before snapshot:"</span>);
+<a class="jxr_linenumber" name="175" href="#175">175</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
+<a class="jxr_linenumber" name="176" href="#176">176</a> 
+<a class="jxr_linenumber" name="177" href="#177">177</a>     <em class="jxr_comment">// take a snapshot of the enabled table</em>
+<a class="jxr_linenumber" name="178" href="#178">178</a>     String snapshotString = <span class="jxr_string">"skipFlushTableSnapshot"</span>;
+<a class="jxr_linenumber" name="179" href="#179">179</a>     byte[] snapshot = Bytes.toBytes(snapshotString);
+<a class="jxr_linenumber" name="180" href="#180">180</a>     admin.snapshot(snapshotString, TABLE_NAME, SnapshotDescription.Type.SKIPFLUSH);
+<a class="jxr_linenumber" name="181" href="#181">181</a>     LOG.debug(<span class="jxr_string">"Snapshot completed."</span>);
+<a class="jxr_linenumber" name="182" href="#182">182</a> 
+<a class="jxr_linenumber" name="183" href="#183">183</a>     <em class="jxr_comment">// make sure we have the snapshot</em>
+<a class="jxr_linenumber" name="184" href="#184">184</a>     List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,
+<a class="jxr_linenumber" name="185" href="#185">185</a>         snapshot, TABLE_NAME);
+<a class="jxr_linenumber" name="186" href="#186">186</a> 
+<a class="jxr_linenumber" name="187" href="#187">187</a>     <em class="jxr_comment">// make sure its a valid snapshot</em>
+<a class="jxr_linenumber" name="188" href="#188">188</a>     LOG.debug(<span class="jxr_string">"FS state after snapshot:"</span>);
+<a class="jxr_linenumber" name="189" href="#189">189</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
+<a class="jxr_linenumber" name="190" href="#190">190</a> 
+<a class="jxr_linenumber" name="191" href="#191">191</a>     SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);
+<a class="jxr_linenumber" name="192" href="#192">192</a> 
+<a class="jxr_linenumber" name="193" href="#193">193</a>     admin.deleteSnapshot(snapshot);
+<a class="jxr_linenumber" name="194" href="#194">194</a>     snapshots = admin.listSnapshots();
+<a class="jxr_linenumber" name="195" href="#195">195</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
+<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>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="199" href="#199">199</a> <em class="jxr_javadoccomment">   * Test simple flush snapshotting a table that is online</em>
-<a class="jxr_linenumber" name="200" href="#200">200</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
-<a class="jxr_linenumber" name="201" href="#201">201</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="202" href="#202">202</a>   @Test (timeout=300000)
-<a class="jxr_linenumber" name="203" href="#203">203</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushTableSnapshotWithProcedure() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="204" href="#204">204</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="205" href="#205">205</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
-<a class="jxr_linenumber" name="206" href="#206">206</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
-<a class="jxr_linenumber" name="207" href="#207">207</a> 
-<a class="jxr_linenumber" name="208" href="#208">208</a>     <em class="jxr_comment">// put some stuff in the table</em>
-<a class="jxr_linenumber" name="209" href="#209">209</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
-<a class="jxr_linenumber" name="210" href="#210">210</a> 
-<a class="jxr_linenumber" name="211" href="#211">211</a>     LOG.debug(<span class="jxr_string">"FS state before snapshot:"</span>);
-<a class="jxr_linenumber" name="212" href="#212">212</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
-<a class="jxr_linenumber" name="213" href="#213">213</a> 
-<a class="jxr_linenumber" name="214" href="#214">214</a>     <em class="jxr_comment">// take a snapshot of the enabled table</em>
-<a class="jxr_linenumber" name="215" href="#215">215</a>     String snapshotString = <span class="jxr_string">"offlineTableSnapshot"</span>;
-<a class="jxr_linenumber" name="216" href="#216">216</a>     byte[] snapshot = Bytes.toBytes(snapshotString);
-<a class="jxr_linenumber" name="217" href="#217">217</a>     Map&lt;String, String&gt; props = <strong class="jxr_keyword">new</strong> HashMap&lt;String, String&gt;();
-<a class="jxr_linenumber" name="218" href="#218">218</a>     props.put(<span class="jxr_string">"table"</span>, TABLE_NAME.getNameAsString());
-<a class="jxr_linenumber" name="219" href="#219">219</a>     admin.execProcedure(SnapshotManager.ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION,
-<a class="jxr_linenumber" name="220" href="#220">220</a>         snapshotString, props);
-<a class="jxr_linenumber" name="221" href="#221">221</a> 
+<a class="jxr_linenumber" name="198" href="#198">198</a> 
+<a class="jxr_linenumber" name="199" href="#199">199</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="200" href="#200">200</a> <em class="jxr_javadoccomment">   * Test simple flush snapshotting a table that is online</em>
+<a class="jxr_linenumber" name="201" href="#201">201</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
+<a class="jxr_linenumber" name="202" href="#202">202</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="203" href="#203">203</a>   @Test (timeout=300000)
+<a class="jxr_linenumber" name="204" href="#204">204</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushTableSnapshotWithProcedure() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="205" href="#205">205</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="206" href="#206">206</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
+<a class="jxr_linenumber" name="207" href="#207">207</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
+<a class="jxr_linenumber" name="208" href="#208">208</a> 
+<a class="jxr_linenumber" name="209" href="#209">209</a>     <em class="jxr_comment">// put some stuff in the table</em>
+<a class="jxr_linenumber" name="210" href="#210">210</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
+<a class="jxr_linenumber" name="211" href="#211">211</a> 
+<a class="jxr_linenumber" name="212" href="#212">212</a>     LOG.debug(<span class="jxr_string">"FS state before snapshot:"</span>);
+<a class="jxr_linenumber" name="213" href="#213">213</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
+<a class="jxr_linenumber" name="214" href="#214">214</a> 
+<a class="jxr_linenumber" name="215" href="#215">215</a>     <em class="jxr_comment">// take a snapshot of the enabled table</em>
+<a class="jxr_linenumber" name="216" href="#216">216</a>     String snapshotString = <span class="jxr_string">"offlineTableSnapshot"</span>;
+<a class="jxr_linenumber" name="217" href="#217">217</a>     byte[] snapshot = Bytes.toBytes(snapshotString);
+<a class="jxr_linenumber" name="218" href="#218">218</a>     Map&lt;String, String&gt; props = <strong class="jxr_keyword">new</strong> HashMap&lt;String, String&gt;();
+<a class="jxr_linenumber" name="219" href="#219">219</a>     props.put(<span class="jxr_string">"table"</span>, TABLE_NAME.getNameAsString());
+<a class="jxr_linenumber" name="220" href="#220">220</a>     admin.execProcedure(SnapshotManager.ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION,
+<a class="jxr_linenumber" name="221" href="#221">221</a>         snapshotString, props);
 <a class="jxr_linenumber" name="222" href="#222">222</a> 
-<a class="jxr_linenumber" name="223" href="#223">223</a>     LOG.debug(<span class="jxr_string">"Snapshot completed."</span>);
-<a class="jxr_linenumber" name="224" href="#224">224</a> 
-<a class="jxr_linenumber" name="225" href="#225">225</a>     <em class="jxr_comment">// make sure we have the snapshot</em>
-<a class="jxr_linenumber" name="226" href="#226">226</a>     List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,
-<a class="jxr_linenumber" name="227" href="#227">227</a>       snapshot, TABLE_NAME);
-<a class="jxr_linenumber" name="228" href="#228">228</a> 
-<a class="jxr_linenumber" name="229" href="#229">229</a>     <em class="jxr_comment">// make sure its a valid snapshot</em>
-<a class="jxr_linenumber" name="230" href="#230">230</a>     LOG.debug(<span class="jxr_string">"FS state after snapshot:"</span>);
-<a class="jxr_linenumber" name="231" href="#231">231</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
-<a class="jxr_linenumber" name="232" href="#232">232</a> 
-<a class="jxr_linenumber" name="233" href="#233">233</a>     SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);
-<a class="jxr_linenumber" name="234" href="#234">234</a>   }
-<a class="jxr_linenumber" name="235" href="#235">235</a> 
-<a class="jxr_linenumber" name="236" href="#236">236</a>   @Test (timeout=300000)
-<a class="jxr_linenumber" name="237" href="#237">237</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSnapshotFailsOnNonExistantTable() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="238" href="#238">238</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="239" href="#239">239</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
-<a class="jxr_linenumber" name="240" href="#240">240</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
-<a class="jxr_linenumber" name="241" href="#241">241</a>     TableName tableName = TableName.valueOf(<span class="jxr_string">"_not_a_table"</span>);
-<a class="jxr_linenumber" name="242" href="#242">242</a> 
-<a class="jxr_linenumber" name="243" href="#243">243</a>     <em class="jxr_comment">// make sure the table doesn't exist</em>
-<a class="jxr_linenumber" name="244" href="#244">244</a>     <strong class="jxr_keyword">boolean</strong> fail = false;
-<a class="jxr_linenumber" name="245" href="#245">245</a>     <strong class="jxr_keyword">do</strong> {
-<a class="jxr_linenumber" name="246" href="#246">246</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="247" href="#247">247</a>       admin.getTableDescriptor(tableName);
-<a class="jxr_linenumber" name="248" href="#248">248</a>       fail = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="249" href="#249">249</a>       LOG.error(<span class="jxr_string">"Table:"</span> + tableName + <span class="jxr_string">" already exists, checking a new name"</span>);
-<a class="jxr_linenumber" name="250" href="#250">250</a>       tableName = TableName.valueOf(tableName+<span class="jxr_string">"!"</span>);
-<a class="jxr_linenumber" name="251" href="#251">251</a>     } <strong class="jxr_keyword">catch</strong> (TableNotFoundException e) {
-<a class="jxr_linenumber" name="252" href="#252">252</a>       fail = false;
-<a class="jxr_linenumber" name="253" href="#253">253</a>       }
-<a class="jxr_linenumber" name="254" href="#254">254</a>     } <strong class="jxr_keyword">while</strong> (fail);
-<a class="jxr_linenumber" name="255" href="#255">255</a> 
-<a class="jxr_linenumber" name="256" href="#256">256</a>     <em class="jxr_comment">// snapshot the non-existant table</em>
-<a class="jxr_linenumber" name="257" href="#257">257</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="258" href="#258">258</a>       admin.snapshot(<span class="jxr_string">"fail"</span>, tableName, SnapshotDescription.Type.FLUSH);
-<a class="jxr_linenumber" name="259" href="#259">259</a>       fail(<span class="jxr_string">"Snapshot succeeded even though there is not table."</span>);
-<a class="jxr_linenumber" name="260" href="#260">260</a>     } <strong class="jxr_keyword">catch</strong> (SnapshotCreationException e) {
-<a class="jxr_linenumber" name="261" href="#261">261</a>       LOG.info(<span class="jxr_string">"Correctly failed to snapshot a non-existant table:"</span> + e.getMessage());
-<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>   @Test(timeout = 300000)
-<a class="jxr_linenumber" name="266" href="#266">266</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testAsyncFlushSnapshot() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="267" href="#267">267</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="268" href="#268">268</a>     SnapshotDescription snapshot = SnapshotDescription.newBuilder().setName(<span class="jxr_string">"asyncSnapshot"</span>)
-<a class="jxr_linenumber" name="269" href="#269">269</a>         .setTable(TABLE_NAME.getNameAsString())
-<a class="jxr_linenumber" name="270" href="#270">270</a>         .setType(SnapshotDescription.Type.FLUSH)
-<a class="jxr_linenumber" name="271" href="#271">271</a>         .build();
-<a class="jxr_linenumber" name="272" href="#272">272</a> 
-<a class="jxr_linenumber" name="273" href="#273">273</a>     <em class="jxr_comment">// take the snapshot async</em>
-<a class="jxr_linenumber" name="274" href="#274">274</a>     admin.takeSnapshotAsync(snapshot);
-<a class="jxr_linenumber" name="275" href="#275">275</a> 
-<a class="jxr_linenumber" name="276" href="#276">276</a>     <em class="jxr_comment">// constantly loop, looking for the snapshot to complete</em>
-<a class="jxr_linenumber" name="277" href="#277">277</a>     HMaster master = UTIL.getMiniHBaseCluster().getMaster();
-<a class="jxr_linenumber" name="278" href="#278">278</a>     SnapshotTestingUtils.waitForSnapshotToComplete(master, snapshot, 200);
-<a class="jxr_linenumber" name="279" href="#279">279</a>     LOG.info(<span class="jxr_string">" === Async Snapshot Completed ==="</span>);
-<a class="jxr_linenumber" name="280" href="#280">280</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
-<a class="jxr_linenumber" name="281" href="#281">281</a> 
-<a class="jxr_linenumber" name="282" href="#282">282</a>     <em class="jxr_comment">// make sure we get the snapshot</em>
-<a class="jxr_linenumber" name="283" href="#283">283</a>     SnapshotTestingUtils.assertOneSnapshotThatMatches(admin, snapshot);
-<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>   @Test (timeout=300000)
-<a class="jxr_linenumber" name="287" href="#287">287</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSnapshotStateAfterMerge() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="288" href="#288">288</a>     <strong class="jxr_keyword">int</strong> numRows = DEFAULT_NUM_ROWS;
-<a class="jxr_linenumber" name="289" href="#289">289</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="290" href="#290">290</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
-<a class="jxr_linenumber" name="291" href="#291">291</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
-<a class="jxr_linenumber" name="292" href="#292">292</a>     <em class="jxr_comment">// load the table so we have some data</em>
-<a class="jxr_linenumber" name="293" href="#293">293</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);
-<a class="jxr_linenumber" name="294" href="#294">294</a> 
-<a class="jxr_linenumber" name="295" href="#295">295</a>     <em class="jxr_comment">// Take a snapshot</em>
-<a class="jxr_linenumber" name="296" href="#296">296</a>     String snapshotBeforeMergeName = <span class="jxr_string">"snapshotBeforeMerge"</span>;
-<a class="jxr_linenumber" name="297" href="#297">297</a>     admin.snapshot(snapshotBeforeMergeName, TABLE_NAME, SnapshotDescription.Type.FLUSH);
-<a class="jxr_linenumber" name="298" href="#298">298</a> 
-<a class="jxr_linenumber" name="299" href="#299">299</a>     <em class="jxr_comment">// Clone the table</em>
-<a class="jxr_linenumber" name="300" href="#300">300</a>     TableName cloneBeforeMergeName = TableName.valueOf(<span class="jxr_string">"cloneBeforeMerge"</span>);
-<a class="jxr_linenumber" name="301" href="#301">301</a>     admin.cloneSnapshot(snapshotBeforeMergeName, cloneBeforeMergeName);
-<a class="jxr_linenumber" name="302" href="#302">302</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneBeforeMergeName);
-<a class="jxr_linenumber" name="303" href="#303">303</a> 
-<a class="jxr_linenumber" name="304" href="#304">304</a>     <em class="jxr_comment">// Merge two regions</em>
-<a class="jxr_linenumber" name="305" href="#305">305</a>     List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);
-<a class="jxr_linenumber" name="306" href="#306">306</a>     Collections.sort(regions, <strong class="jxr_keyword">new</strong> Comparator&lt;HRegionInfo&gt;() {
-<a class="jxr_linenumber" name="307" href="#307">307</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> compare(HRegionInfo r1, HRegionInfo r2) {
-<a class="jxr_linenumber" name="308" href="#308">308</a>         <strong class="jxr_keyword">return</strong> Bytes.compareTo(r1.getStartKey(), r2.getStartKey());
-<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>     <strong class="jxr_keyword">int</strong> numRegions = admin.getTableRegions(TABLE_NAME).size();
-<a class="jxr_linenumber" name="313" href="#313">313</a>     <strong class="jxr_keyword">int</strong> numRegionsAfterMerge = numRegions - 2;
-<a class="jxr_linenumber" name="314" href="#314">314</a>     admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),
-<a class="jxr_linenumber" name="315" href="#315">315</a>         regions.get(2).getEncodedNameAsBytes(), <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="316" href="#316">316</a>     admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),
-<a class="jxr_linenumber" name="317" href="#317">317</a>         regions.get(6).getEncodedNameAsBytes(), <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="318" href="#318">318</a> 
-<a class="jxr_linenumber" name="319" href="#319">319</a>     <em class="jxr_comment">// Verify that there's one region less</em>
-<a class="jxr_linenumber" name="320" href="#320">320</a>     waitRegionsAfterMerge(numRegionsAfterMerge);
-<a class="jxr_linenumber" name="321" href="#321">321</a>     assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());
-<a class="jxr_linenumber" name="322" href="#322">322</a> 
-<a class="jxr_linenumber" name="323" href="#323">323</a>     <em class="jxr_comment">// Clone the table</em>
-<a class="jxr_linenumber" name="324" href="#324">324</a>     TableName cloneAfterMergeName = TableName.valueOf(<span class="jxr_string">"cloneAfterMerge"</span>);
-<a class="jxr_linenumber" name="325" href="#325">325</a>     admin.cloneSnapshot(snapshotBeforeMergeName, cloneAfterMergeName);
-<a class="jxr_linenumber" name="326" href="#326">326</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneAfterMergeName);
-<a class="jxr_linenumber" name="327" href="#327">327</a> 
-<a class="jxr_linenumber" name="328" href="#328">328</a>     verifyRowCount(UTIL, TABLE_NAME, numRows);
-<a class="jxr_linenumber" name="329" href="#329">329</a>     verifyRowCount(UTIL, cloneBeforeMergeName, numRows);
-<a class="jxr_linenumber" name="330" href="#330">330</a>     verifyRowCount(UTIL, cloneAfterMergeName, numRows);
-<a class="jxr_linenumber" name="331" href="#331">331</a> 
-<a class="jxr_linenumber" name="332" href="#332">332</a>     <em class="jxr_comment">// test that we can delete the snapshot</em>
-<a class="jxr_linenumber" name="333" href="#333">333</a>     UTIL.deleteTable(cloneAfterMergeName);
-<a class="jxr_linenumber" name="334" href="#334">334</a>     UTIL.deleteTable(cloneBeforeMergeName);
-<a class="jxr_linenumber" name="335" href="#335">335</a>   }
-<a class="jxr_linenumber" name="336" href="#336">336</a> 
-<a class="jxr_linenumber" name="337" href="#337">337</a>   @Test (timeout=300000)
-<a class="jxr_linenumber" name="338" href="#338">338</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testTakeSnapshotAfterMerge() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="339" href="#339">339</a>     <strong class="jxr_keyword">int</strong> numRows = DEFAULT_NUM_ROWS;
-<a class="jxr_linenumber" name="340" href="#340">340</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="341" href="#341">341</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
-<a class="jxr_linenumber" name="342" href="#342">342</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
-<a class="jxr_linenumber" name="343" href="#343">343</a>     <em class="jxr_comment">// load the table so we have some data</em>
-<a class="jxr_linenumber" name="344" href="#344">344</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);
-<a class="jxr_linenumber" name="345" href="#345">345</a> 
-<a class="jxr_linenumber" name="346" href="#346">346</a>     <em class="jxr_comment">// Merge two regions</em>
-<a class="jxr_linenumber" name="347" href="#347">347</a>     List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);
-<a class="jxr_linenumber" name="348" href="#348">348</a>     Collections.sort(regions, <strong class="jxr_keyword">new</strong> Comparator&lt;HRegionInfo&gt;() {
-<a class="jxr_linenumber" name="349" href="#349">349</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> compare(HRegionInfo r1, HRegionInfo r2) {
-<a class="jxr_linenumber" name="350" href="#350">350</a>         <strong class="jxr_keyword">return</strong> Bytes.compareTo(r1.getStartKey(), r2.getStartKey());
-<a class="jxr_linenumber" name="351" href="#351">351</a>       }
-<a class="jxr_linenumber" name="352" href="#352">352</a>     });
-<a class="jxr_linenumber" name="353" href="#353">353</a> 
-<a class="jxr_linenumber" name="354" href="#354">354</a>     <strong class="jxr_keyword">int</strong> numRegions = admin.getTableRegions(TABLE_NAME).size();
-<a class="jxr_linenumber" name="355" href="#355">355</a>     <strong class="jxr_keyword">int</strong> numRegionsAfterMerge = numRegions - 2;
-<a class="jxr_linenumber" name="356" href="#356">356</a>     admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),
-<a class="jxr_linenumber" name="357" href="#357">357</a>         regions.get(2).getEncodedNameAsBytes(), <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="358" href="#358">358</a>     admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),
-<a class="jxr_linenumber" name="359" href="#359">359</a>         regions.get(6).getEncodedNameAsBytes(), <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>     waitRegionsAfterMerge(numRegionsAfterMerge);
-<a class="jxr_linenumber" name="362" href="#362">362</a>     assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());
-<a class="jxr_linenumber" name="363" href="#363">363</a> 
-<a class="jxr_linenumber" name="364" href="#364">364</a>     <em class="jxr_comment">// Take a snapshot</em>
-<a class="jxr_linenumber" name="365" href="#365">365</a>     String snapshotName = <span class="jxr_string">"snapshotAfterMerge"</span>;
-<a class="jxr_linenumber" name="366" href="#366">366</a>     SnapshotTestingUtils.snapshot(admin, snapshotName, TABLE_NAME.getNameAsString(),
-<a class="jxr_linenumber" name="367" href="#367">367</a>       SnapshotDescription.Type.FLUSH, 3);
-<a class="jxr_linenumber" name="368" href="#368">368</a> 
-<a class="jxr_linenumber" name="369" href="#369">369</a>     <em class="jxr_comment">// Clone the table</em>
-<a class="jxr_linenumber" name="370" href="#370">370</a>     TableName cloneName = TableName.valueOf(<span class="jxr_string">"cloneMerge"</span>);
-<a class="jxr_linenumber" name="371" href="#371">371</a>     admin.cloneSnapshot(snapshotName, cloneName);
-<a class="jxr_linenumber" name="372" href="#372">372</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneName);
-<a class="jxr_linenumber" name="373" href="#373">373</a> 
-<a class="jxr_linenumber" name="374" href="#374">374</a>     verifyRowCount(UTIL, TABLE_NAME, numRows);
-<a class="jxr_linenumber" name="375" href="#375">375</a>     verifyRowCount(UTIL, cloneName, numRows);
-<a class="jxr_linenumber" name="376" href="#376">376</a> 
-<a class="jxr_linenumber" name="377" href="#377">377</a>     <em class="jxr_comment">// test that we can delete the snapshot</em>
-<a class="jxr_linenumber" name="378" href="#378">378</a>     UTIL.deleteTable(cloneName);
-<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>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="382" href="#382">382</a> <em class="jxr_javadoccomment">   * Basic end-to-end test of simple-flush-based snapshots</em>
-<a class="jxr_linenumber" name="383" href="#383">383</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="384" href="#384">384</a>   @Test (timeout=300000)
-<a class="jxr_linenumber" name="385" href="#385">385</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushCreateListDestroy() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="386" href="#386">386</a>     LOG.debug(<span class="jxr_string">"------- Starting Snapshot test -------------"</span>);
-<a class="jxr_linenumber" name="387" href="#387">387</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="388" href="#388">388</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
-<a class="jxr_linenumber" name="389" href="#389">389</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
-<a class="jxr_linenumber" name="390" href="#390">390</a>     <em class="jxr_comment">// load the table so we have some data</em>
-<a class="jxr_linenumber" name="391" href="#391">391</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
-<a class="jxr_linenumber" name="392" href="#392">392</a> 
-<a class="jxr_linenumber" name="393" href="#393">393</a>     String snapshotName = <span class="jxr_string">"flushSnapshotCreateListDestroy"</span>;
-<a class="jxr_linenumber" name="394" href="#394">394</a>     FileSystem fs = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getFileSystem();
-<a class="jxr_linenumber" name="395" href="#395">395</a>     Path rootDir = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getRootDir();
-<a class="jxr_linenumber" name="396" href="#396">396</a>     SnapshotTestingUtils.createSnapshotAndValidate(admin, TABLE_NAME, Bytes.toString(TEST_FAM),
-<a class="jxr_linenumber" name="397" href="#397">397</a>       snapshotName, rootDir, fs, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="398" href="#398">398</a>   }
-<a class="jxr_linenumber" name="399" href="#399">399</a> 
-<a class="jxr_linenumber" name="400" href="#400">400</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="401" href="#401">401</a> <em class="jxr_javadoccomment">   * Demonstrate that we reject snapshot requests if there is a snapshot already running on the</em>
-<a class="jxr_linenumber" name="402" href="#402">402</a> <em class="jxr_javadoccomment">   * same table currently running and that concurrent snapshots on different tables can both</em>
-<a class="jxr_linenumber" name="403" href="#403">403</a> <em class="jxr_javadoccomment">   * succeed concurretly.</em>
-<a class="jxr_linenumber" name="404" href="#404">404</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="405" href="#405">405</a>   @Test(timeout=300000)
-<a class="jxr_linenumber" name="406" href="#406">406</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testConcurrentSnapshottingAttempts() <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="407" href="#407">407</a>     <strong class="jxr_keyword">final</strong> TableName TABLE2_NAME = TableName.valueOf(TABLE_NAME + <span class="jxr_string">"2"</span>);
-<a class="jxr_linenumber" name="408" href="#408">408</a> 
-<a class="jxr_linenumber" name="409" href="#409">409</a>     <strong class="jxr_keyword">int</strong> ssNum = 20;
-<a class="jxr_linenumber" name="410" href="#410">410</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="411" href="#411">411</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
-<a class="jxr_linenumber" name="412" href="#412">412</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
-<a class="jxr_linenumber" name="413" href="#413">413</a>     <em class="jxr_comment">// create second testing table</em>
-<a class="jxr_linenumber" name="414" href="#414">414</a>     SnapshotTestingUtils.createTable(UTIL, TABLE2_NAME, TEST_FAM);
-<a class="jxr_linenumber" name="415" href="#415">415</a>     <em class="jxr_comment">// load the table so we have some data</em>
-<a class="jxr_linenumber" name="416" href="#416">416</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
-<a class="jxr_linenumber" name="417" href="#417">417</a>     SnapshotTestingUtils.loadData(UTIL, TABLE2_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
-<a class="jxr_linenumber" name="418" href="#418">418</a> 
-<a class="jxr_linenumber" name="419" href="#419">419</a>     <strong class="jxr_keyword">final</strong> CountDownLatch toBeSubmitted = <strong class="jxr_keyword">new</strong> CountDownLatch(ssNum);
-<a class="jxr_linenumber" name="420" href="#420">420</a>     <em class="jxr_comment">// We'll have one of these per thread</em>
-<a class="jxr_linenumber" name="421" href="#421">421</a>     <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html">SSRunnable</a> <strong class="jxr_keyword">implements</strong> Runnable {
-<a class="jxr_linenumber" name="422" href="#422">422</a>       SnapshotDescription ss;
-<a class="jxr_linenumber" name="423" href="#423">423</a>       <a href="../../../../../org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html">SSRunnable</a>(SnapshotDescription ss) {
-<a class="jxr_linenumber" name="424" href="#424">424</a>         <strong class="jxr_keyword">this</strong>.ss = ss;
-<a class="jxr_linenumber" name="425" href="#425">425</a>       }
-<a class="jxr_linenumber" name="426" href="#426">426</a> 
-<a class="jxr_linenumber" name="427" href="#427">427</a>       @Override
-<a class="jxr_linenumber" name="428" href="#428">428</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="429" href="#429">429</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="430" href="#430">430</a>           Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="431" href="#431">431</a>           LOG.info(<span class="jxr_string">"Submitting snapshot request: "</span> + ClientSnapshotDescriptionUtils.toString(ss));
-<a class="jxr_linenumber" name="432" href="#432">432</a>           admin.takeSnapshotAsync(ss);
-<a class="jxr_linenumber" name="433" href="#433">433</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
-<a class="jxr_linenumber" name="434" href="#434">434</a>           LOG.info(<span class="jxr_string">"Exception during snapshot request: "</span> + ClientSnapshotDescriptionUtils.toString(
-<a class="jxr_linenumber" name="435" href="#435">435</a>               ss)
-<a class="jxr_linenumber" name="436" href="#436">436</a>               + <span class="jxr_string">".  This is ok, we expect some"</span>, e);
-<a class="jxr_linenumber" name="437" href="#437">437</a>         }
-<a class="jxr_linenumber" name="438" href="#438">438</a>         LOG.info(<span class="jxr_string">"Submitted snapshot request: "</span> + ClientSnapshotDescriptionUtils.toString(ss));
-<a class="jxr_linenumber" name="439" href="#439">439</a>         toBeSubmitted.countDown();
-<a class="jxr_linenumber" name="440" href="#440">440</a>       }
-<a class="jxr_linenumber" name="441" href="#441">441</a>     };
-<a class="jxr_linenumber" name="442" href="#442">442</a> 
-<a class="jxr_linenumber" name="443" href="#443">443</a>     <em class="jxr_comment">// build descriptions</em>
-<a class="jxr_linenumber" name="444" href="#444">444</a>     SnapshotDescription[] descs = <strong class="jxr_keyword">new</strong> SnapshotDescription[ssNum];
-<a class="jxr_linenumber" name="445" href="#445">445</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; ssNum; i++) {
-<a class="jxr_linenumber" name="446" href="#446">446</a>       SnapshotDescription.Builder builder = SnapshotDescription.newBuilder();
-<a class="jxr_linenumber" name="447" href="#447">447</a>       builder.setTable(((i % 2) == 0 ? TABLE_NAME : TABLE2_NAME).getNameAsString());
-<a class="jxr_linenumber" name="448" href="#448">448</a>       builder.setName(<span class="jxr_string">"ss"</span>+i);
-<a class="jxr_linenumber" name="449" href="#449">449</a>       builder.setType(SnapshotDescription.Type.FLUSH);
-<a class="jxr_linenumber" name="450" href="#450">450</a>       descs[i] = builder.build();
-<a class="jxr_linenumber" name="451" href="#451">451</a>     }
-<a class="jxr_linenumber" name="452" href="#452">452</a> 
-<a class="jxr_linenumber" name="453" href="#453">453</a>     <em class="jxr_comment">// kick each off its own thread</em>
-<a class="jxr_linenumber" name="454" href="#454">454</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0 ; i &lt; ssNum; i++) {
-<a class="jxr_linenumber" name="455" href="#455">455</a>       <strong class="jxr_keyword">new</strong> Thread(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html">SSRunnable</a>(descs[i])).start();
-<a class="jxr_linenumber" name="456" href="#456">456</a>     }
-<a class="jxr_linenumber" name="457" href="#457">457</a> 
-<a class="jxr_linenumber" name="458" href="#458">458</a>     <em class="jxr_comment">// wait until all have been submitted</em>
-<a class="jxr_linenumber" name="459" href="#459">459</a>     toBeSubmitted.await();
-<a class="jxr_linenumber" name="460" href="#460">460</a> 
-<a class="jxr_linenumber" name="461" href="#461">461</a>     <em class="jxr_comment">// loop until all are done.</em>
-<a class="jxr_linenumber" name="462" href="#462">462</a>     <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="463" href="#463">463</a>       <strong class="jxr_keyword">int</strong> doneCount = 0;
-<a class="jxr_linenumber" name="464" href="#464">464</a>       <strong class="jxr_keyword">for</strong> (SnapshotDescription ss : descs) {
-<a class="jxr_linenumber" name="465" href="#465">465</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="466" href="#466">466</a>           <strong class="jxr_keyword">if</strong> (admin.isSnapshotFinished(ss)) {
-<a class="jxr_linenumber" name="467" href="#467">467</a>             doneCount++;
-<a class="jxr_linenumber" name="468" href="#468">468</a>           }
-<a class="jxr_linenumber" name="469" href="#469">469</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
-<a class="jxr_linenumber" name="470" href="#470">470</a>           LOG.warn(<span class="jxr_string">"Got an exception when checking for snapshot "</span> + ss.getName(), e);
-<a class="jxr_linenumber" name="471" href="#471">471</a>           doneCount++;
-<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>       <strong class="jxr_keyword">if</strong> (doneCount == descs.length) {
-<a class="jxr_linenumber" name="475" href="#475">475</a>         <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="476" href="#476">476</a>       }
-<a class="jxr_linenumber" name="477" href="#477">477</a>       Thread.sleep(100);
-<a class="jxr_linenumber" name="478" href="#478">478</a>     }
-<a class="jxr_linenumber" name="479" href="#479">479</a> 
-<a class="jxr_linenumber" name="480" href="#480">480</a>     <em class="jxr_comment">// dump for debugging</em>
-<a class="jxr_linenumber" name="481" href="#481">481</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
-<a class="jxr_linenumber" name="482" href="#482">482</a> 
-<a class="jxr_linenumber" name="483" href="#483">483</a>     List&lt;SnapshotDescription&gt; taken = admin.listSnapshots();
-<a class="jxr_linenumber" name="484" href="#484">484</a>     <strong class="jxr_keyword">int</strong> takenSize = taken.size();
-<a class="jxr_linenumber" name="485" href="#485">485</a>     LOG.info(<span class="jxr_string">"Taken "</span> + takenSize + <span class="jxr_string">" snapshots:  "</span> + taken);
-<a class="jxr_linenumber" name="486" href="#486">486</a>     assertTrue(<span class="jxr_string">"We expect at least 1 request to be rejected because of we concurrently"</span> +
-<a class="jxr_linenumber" name="487" href="#487">487</a>         <span class="jxr_string">" issued many requests"</span>, takenSize &lt; ssNum &amp;&amp; takenSize &gt; 0);
-<a class="jxr_linenumber" name="488" href="#488">488</a> 
-<a class="jxr_linenumber" name="489" href="#489">489</a>     <em class="jxr_comment">// Verify that there's at least one snapshot per table</em>
-<a class="jxr_linenumber" name="490" href="#490">490</a>     <strong class="jxr_keyword">int</strong> t1SnapshotsCount = 0;
-<a class="jxr_linenumber" name="491" href="#491">491</a>     <strong class="jxr_keyword">int</strong> t2SnapshotsCount = 0;
-<a class="jxr_linenumber" name="492" href="#492">492</a>     <strong class="jxr_keyword">for</strong> (SnapshotDescription ss : taken) {
-<a class="jxr_linenumber" name="493" href="#493">493</a>       <strong class="jxr_keyword">if</strong> (TableName.valueOf(ss.getTable()).equals(TABLE_NAME)) {
-<a class="jxr_linenumber" name="494" href="#494">494</a>         t1SnapshotsCount++;
-<a class="jxr_linenumber" name="495" href="#495">495</a>       } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (TableName.valueOf(ss.getTable()).equals(TABLE2_NAME)) {
-<a class="jxr_linenumber" name="496" href="#496">496</a>         t2SnapshotsCount++;
-<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>     assertTrue(<span class="jxr_string">"We expect at least 1 snapshot of table1 "</span>, t1SnapshotsCount &gt; 0);
-<a class="jxr_linenumber" name="500" href="#500">500</a>     assertTrue(<span class="jxr_string">"We expect at least 1 snapshot of table2 "</span>, t2SnapshotsCount &gt; 0);
-<a class="jxr_linenumber" name="501" href="#501">501</a> 
-<a class="jxr_linenumber" name="502" href="#502">502</a>     UTIL.deleteTable(TABLE2_NAME);
-<a class="jxr_linenumber" name="503" href="#503">503</a>   }
-<a class="jxr_linenumber" name="504" href="#504">504</a> 
-<a class="jxr_linenumber" name="505" href="#505">505</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> waitRegionsAfterMerge(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> numRegionsAfterMerge)
-<a class="jxr_linenumber" name="506" href="#506">506</a>       <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="507" href="#507">507</a>     Admin admin = UTIL.getHBaseAdmin();
-<a class="jxr_linenumber" name="508" href="#508">508</a>     <em class="jxr_comment">// Verify that there's one region less</em>
-<a class="jxr_linenumber" name="509" href="#509">509</a>     <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
-<a class="jxr_linenumber" name="510" href="#510">510</a>     <strong class="jxr_keyword">while</strong> (admin.getTableRegions(TABLE_NAME).size() != numRegionsAfterMerge) {
-<a class="jxr_linenumber" name="511" href="#511">511</a>       <em class="jxr_comment">// This may be flaky... if after 15sec the merge is not complete give up</em>
-<a class="jxr_linenumber" name="512" href="#512">512</a>       <em class="jxr_comment">// it will fail in the assertEquals(numRegionsAfterMerge).</em>
-<a class="jxr_linenumber" name="513" href="#513">513</a>       <strong class="jxr_keyword">if</strong> ((System.currentTimeMillis() - startTime) &gt; 15000)
-<a class="jxr_linenumber" name="514" href="#514">514</a>         <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="515" href="#515">515</a>       Thread.sleep(100);
-<a class="jxr_linenumber" name="516" href="#516">516</a>     }
-<a class="jxr_linenumber" name="517" href="#517">517</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, TABLE_NAME);
-<a class="jxr_linenumber" name="518" href="#518">518</a>   }
-<a class="jxr_linenumber" name="519" href="#519">519</a> 
+<a class="jxr_linenumber" name="223" href="#223">223</a> 
+<a class="jxr_linenumber" name="224" href="#224">224</a>     LOG.debug(<span class="jxr_string">"Snapshot completed."</span>);
+<a class="jxr_linenumber" name="225" href="#225">225</a> 
+<a class="jxr_linenumber" name="226" href="#226">226</a>     <em class="jxr_comment">// make sure we have the snapshot</em>
+<a class="jxr_linenumber" name="227" href="#227">227</a>     List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,
+<a class="jxr_linenumber" name="228" href="#228">228</a>       snapshot, TABLE_NAME);
+<a class="jxr_linenumber" name="229" href="#229">229</a> 
+<a class="jxr_linenumber" name="230" href="#230">230</a>     <em class="jxr_comment">// make sure its a valid snapshot</em>
+<a class="jxr_linenumber" name="231" href="#231">231</a>     LOG.debug(<span class="jxr_string">"FS state after snapshot:"</span>);
+<a class="jxr_linenumber" name="232" href="#232">232</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
+<a class="jxr_linenumber" name="233" href="#233">233</a> 
+<a class="jxr_linenumber" name="234" href="#234">234</a>     SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);
+<a class="jxr_linenumber" name="235" href="#235">235</a>   }
+<a class="jxr_linenumber" name="236" href="#236">236</a> 
+<a class="jxr_linenumber" name="237" href="#237">237</a>   @Test (timeout=300000)
+<a class="jxr_linenumber" name="238" href="#238">238</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSnapshotFailsOnNonExistantTable() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="239" href="#239">239</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="240" href="#240">240</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
+<a class="jxr_linenumber" name="241" href="#241">241</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
+<a class="jxr_linenumber" name="242" href="#242">242</a>     TableName tableName = TableName.valueOf(<span class="jxr_string">"_not_a_table"</span>);
+<a class="jxr_linenumber" name="243" href="#243">243</a> 
+<a class="jxr_linenumber" name="244" href="#244">244</a>     <em class="jxr_comment">// make sure the table doesn't exist</em>
+<a class="jxr_linenumber" name="245" href="#245">245</a>     <strong class="jxr_keyword">boolean</strong> fail = false;
+<a class="jxr_linenumber" name="246" href="#246">246</a>     <strong class="jxr_keyword">do</strong> {
+<a class="jxr_linenumber" name="247" href="#247">247</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="248" href="#248">248</a>       admin.getTableDescriptor(tableName);
+<a class="jxr_linenumber" name="249" href="#249">249</a>       fail = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="250" href="#250">250</a>       LOG.error(<span class="jxr_string">"Table:"</span> + tableName + <span class="jxr_string">" already exists, checking a new name"</span>);
+<a class="jxr_linenumber" name="251" href="#251">251</a>       tableName = TableName.valueOf(tableName+<span class="jxr_string">"!"</span>);
+<a class="jxr_linenumber" name="252" href="#252">252</a>     } <strong class="jxr_keyword">catch</strong> (TableNotFoundException e) {
+<a class="jxr_linenumber" name="253" href="#253">253</a>       fail = false;
+<a class="jxr_linenumber" name="254" href="#254">254</a>       }
+<a class="jxr_linenumber" name="255" href="#255">255</a>     } <strong class="jxr_keyword">while</strong> (fail);
+<a class="jxr_linenumber" name="256" href="#256">256</a> 
+<a class="jxr_linenumber" name="257" href="#257">257</a>     <em class="jxr_comment">// snapshot the non-existant table</em>
+<a class="jxr_linenumber" name="258" href="#258">258</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="259" href="#259">259</a>       admin.snapshot(<span class="jxr_string">"fail"</span>, tableName, SnapshotDescription.Type.FLUSH);
+<a class="jxr_linenumber" name="260" href="#260">260</a>       fail(<span class="jxr_string">"Snapshot succeeded even though there is not table."</span>);
+<a class="jxr_linenumber" name="261" href="#261">261</a>     } <strong class="jxr_keyword">catch</strong> (SnapshotCreationException e) {
+<a class="jxr_linenumber" name="262" href="#262">262</a>       LOG.info(<span class="jxr_string">"Correctly failed to snapshot a non-existant table:"</span> + e.getMessage());
+<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> 
+<a class="jxr_linenumber" name="266" href="#266">266</a>   @Test(timeout = 300000)
+<a class="jxr_linenumber" name="267" href="#267">267</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testAsyncFlushSnapshot() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="268" href="#268">268</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="269" href="#269">269</a>     SnapshotDescription snapshot = SnapshotDescription.newBuilder().setName(<span class="jxr_string">"asyncSnapshot"</span>)
+<a class="jxr_linenumber" name="270" href="#270">270</a>         .setTable(TABLE_NAME.getNameAsString())
+<a class="jxr_linenumber" name="271" href="#271">271</a>         .setType(SnapshotDescription.Type.FLUSH)
+<a class="jxr_linenumber" name="272" href="#272">272</a>         .build();
+<a class="jxr_linenumber" name="273" href="#273">273</a> 
+<a class="jxr_linenumber" name="274" href="#274">274</a>     <em class="jxr_comment">// take the snapshot async</em>
+<a class="jxr_linenumber" name="275" href="#275">275</a>     admin.takeSnapshotAsync(snapshot);
+<a class="jxr_linenumber" name="276" href="#276">276</a> 
+<a class="jxr_linenumber" name="277" href="#277">277</a>     <em class="jxr_comment">// constantly loop, looking for the snapshot to complete</em>
+<a class="jxr_linenumber" name="278" href="#278">278</a>     HMaster master = UTIL.getMiniHBaseCluster().getMaster();
+<a class="jxr_linenumber" name="279" href="#279">279</a>     SnapshotTestingUtils.waitForSnapshotToComplete(master, snapshot, 200);
+<a class="jxr_linenumber" name="280" href="#280">280</a>     LOG.info(<span class="jxr_string">" === Async Snapshot Completed ==="</span>);
+<a class="jxr_linenumber" name="281" href="#281">281</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
+<a class="jxr_linenumber" name="282" href="#282">282</a> 
+<a class="jxr_linenumber" name="283" href="#283">283</a>     <em class="jxr_comment">// make sure we get the snapshot</em>
+<a class="jxr_linenumber" name="284" href="#284">284</a>     SnapshotTestingUtils.assertOneSnapshotThatMatches(admin, snapshot);
+<a class="jxr_linenumber" name="285" href="#285">285</a>   }
+<a class="jxr_linenumber" name="286" href="#286">286</a> 
+<a class="jxr_linenumber" name="287" href="#287">287</a>   @Test (timeout=300000)
+<a class="jxr_linenumber" name="288" href="#288">288</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testSnapshotStateAfterMerge() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="289" href="#289">289</a>     <strong class="jxr_keyword">int</strong> numRows = DEFAULT_NUM_ROWS;
+<a class="jxr_linenumber" name="290" href="#290">290</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="291" href="#291">291</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
+<a class="jxr_linenumber" name="292" href="#292">292</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
+<a class="jxr_linenumber" name="293" href="#293">293</a>     <em class="jxr_comment">// load the table so we have some data</em>
+<a class="jxr_linenumber" name="294" href="#294">294</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);
+<a class="jxr_linenumber" name="295" href="#295">295</a> 
+<a class="jxr_linenumber" name="296" href="#296">296</a>     <em class="jxr_comment">// Take a snapshot</em>
+<a class="jxr_linenumber" name="297" href="#297">297</a>     String snapshotBeforeMergeName = <span class="jxr_string">"snapshotBeforeMerge"</span>;
+<a class="jxr_linenumber" name="298" href="#298">298</a>     admin.snapshot(snapshotBeforeMergeName, TABLE_NAME, SnapshotDescription.Type.FLUSH);
+<a class="jxr_linenumber" name="299" href="#299">299</a> 
+<a class="jxr_linenumber" name="300" href="#300">300</a>     <em class="jxr_comment">// Clone the table</em>
+<a class="jxr_linenumber" name="301" href="#301">301</a>     TableName cloneBeforeMergeName = TableName.valueOf(<span class="jxr_string">"cloneBeforeMerge"</span>);
+<a class="jxr_linenumber" name="302" href="#302">302</a>     admin.cloneSnapshot(snapshotBeforeMergeName, cloneBeforeMergeName);
+<a class="jxr_linenumber" name="303" href="#303">303</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneBeforeMergeName);
+<a class="jxr_linenumber" name="304" href="#304">304</a> 
+<a class="jxr_linenumber" name="305" href="#305">305</a>     <em class="jxr_comment">// Merge two regions</em>
+<a class="jxr_linenumber" name="306" href="#306">306</a>     List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);
+<a class="jxr_linenumber" name="307" href="#307">307</a>     Collections.sort(regions, <strong class="jxr_keyword">new</strong> Comparator&lt;HRegionInfo&gt;() {
+<a class="jxr_linenumber" name="308" href="#308">308</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> compare(HRegionInfo r1, HRegionInfo r2) {
+<a class="jxr_linenumber" name="309" href="#309">309</a>         <strong class="jxr_keyword">return</strong> Bytes.compareTo(r1.getStartKey(), r2.getStartKey());
+<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>     <strong class="jxr_keyword">int</strong> numRegions = admin.getTableRegions(TABLE_NAME).size();
+<a class="jxr_linenumber" name="314" href="#314">314</a>     <strong class="jxr_keyword">int</strong> numRegionsAfterMerge = numRegions - 2;
+<a class="jxr_linenumber" name="315" href="#315">315</a>     admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),
+<a class="jxr_linenumber" name="316" href="#316">316</a>         regions.get(2).getEncodedNameAsBytes(), <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="317" href="#317">317</a>     admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),
+<a class="jxr_linenumber" name="318" href="#318">318</a>         regions.get(6).getEncodedNameAsBytes(), <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 there's one region less</em>
+<a class="jxr_linenumber" name="321" href="#321">321</a>     waitRegionsAfterMerge(numRegionsAfterMerge);
+<a class="jxr_linenumber" name="322" href="#322">322</a>     assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());
+<a class="jxr_linenumber" name="323" href="#323">323</a> 
+<a class="jxr_linenumber" name="324" href="#324">324</a>     <em class="jxr_comment">// Clone the table</em>
+<a class="jxr_linenumber" name="325" href="#325">325</a>     TableName cloneAfterMergeName = TableName.valueOf(<span class="jxr_string">"cloneAfterMerge"</span>);
+<a class="jxr_linenumber" name="326" href="#326">326</a>     admin.cloneSnapshot(snapshotBeforeMergeName, cloneAfterMergeName);
+<a class="jxr_linenumber" name="327" href="#327">327</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneAfterMergeName);
+<a class="jxr_linenumber" name="328" href="#328">328</a> 
+<a class="jxr_linenumber" name="329" href="#329">329</a>     verifyRowCount(UTIL, TABLE_NAME, numRows);
+<a class="jxr_linenumber" name="330" href="#330">330</a>     verifyRowCount(UTIL, cloneBeforeMergeName, numRows);
+<a class="jxr_linenumber" name="331" href="#331">331</a>     verifyRowCount(UTIL, cloneAfterMergeName, numRows);
+<a class="jxr_linenumber" name="332" href="#332">332</a> 
+<a class="jxr_linenumber" name="333" href="#333">333</a>     <em class="jxr_comment">// test that we can delete the snapshot</em>
+<a class="jxr_linenumber" name="334" href="#334">334</a>     UTIL.deleteTable(cloneAfterMergeName);
+<a class="jxr_linenumber" name="335" href="#335">335</a>     UTIL.deleteTable(cloneBeforeMergeName);
+<a class="jxr_linenumber" name="336" href="#336">336</a>   }
+<a class="jxr_linenumber" name="337" href="#337">337</a> 
+<a class="jxr_linenumber" name="338" href="#338">338</a>   @Test (timeout=300000)
+<a class="jxr_linenumber" name="339" href="#339">339</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testTakeSnapshotAfterMerge() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="340" href="#340">340</a>     <strong class="jxr_keyword">int</strong> numRows = DEFAULT_NUM_ROWS;
+<a class="jxr_linenumber" name="341" href="#341">341</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="342" href="#342">342</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
+<a class="jxr_linenumber" name="343" href="#343">343</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
+<a class="jxr_linenumber" name="344" href="#344">344</a>     <em class="jxr_comment">// load the table so we have some data</em>
+<a class="jxr_linenumber" name="345" href="#345">345</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);
+<a class="jxr_linenumber" name="346" href="#346">346</a> 
+<a class="jxr_linenumber" name="347" href="#347">347</a>     <em class="jxr_comment">// Merge two regions</em>
+<a class="jxr_linenumber" name="348" href="#348">348</a>     List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);
+<a class="jxr_linenumber" name="349" href="#349">349</a>     Collections.sort(regions, <strong class="jxr_keyword">new</strong> Comparator&lt;HRegionInfo&gt;() {
+<a class="jxr_linenumber" name="350" href="#350">350</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> compare(HRegionInfo r1, HRegionInfo r2) {
+<a class="jxr_linenumber" name="351" href="#351">351</a>         <strong class="jxr_keyword">return</strong> Bytes.compareTo(r1.getStartKey(), r2.getStartKey());
+<a class="jxr_linenumber" name="352" href="#352">352</a>       }
+<a class="jxr_linenumber" name="353" href="#353">353</a>     });
+<a class="jxr_linenumber" name="354" href="#354">354</a> 
+<a class="jxr_linenumber" name="355" href="#355">355</a>     <strong class="jxr_keyword">int</strong> numRegions = admin.getTableRegions(TABLE_NAME).size();
+<a class="jxr_linenumber" name="356" href="#356">356</a>     <strong class="jxr_keyword">int</strong> numRegionsAfterMerge = numRegions - 2;
+<a class="jxr_linenumber" name="357" href="#357">357</a>     admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),
+<a class="jxr_linenumber" name="358" href="#358">358</a>         regions.get(2).getEncodedNameAsBytes(), <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="359" href="#359">359</a>     admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),
+<a class="jxr_linenumber" name="360" href="#360">360</a>         regions.get(6).getEncodedNameAsBytes(), <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="361" href="#361">361</a> 
+<a class="jxr_linenumber" name="362" href="#362">362</a>     waitRegionsAfterMerge(numRegionsAfterMerge);
+<a class="jxr_linenumber" name="363" href="#363">363</a>     assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());
+<a class="jxr_linenumber" name="364" href="#364">364</a> 
+<a class="jxr_linenumber" name="365" href="#365">365</a>     <em class="jxr_comment">// Take a snapshot</em>
+<a class="jxr_linenumber" name="366" href="#366">366</a>     String snapshotName = <span class="jxr_string">"snapshotAfterMerge"</span>;
+<a class="jxr_linenumber" name="367" href="#367">367</a>     SnapshotTestingUtils.snapshot(admin, snapshotName, TABLE_NAME.getNameAsString(),
+<a class="jxr_linenumber" name="368" href="#368">368</a>       SnapshotDescription.Type.FLUSH, 3);
+<a class="jxr_linenumber" name="369" href="#369">369</a> 
+<a class="jxr_linenumber" name="370" href="#370">370</a>     <em class="jxr_comment">// Clone the table</em>
+<a class="jxr_linenumber" name="371" href="#371">371</a>     TableName cloneName = TableName.valueOf(<span class="jxr_string">"cloneMerge"</span>);
+<a class="jxr_linenumber" name="372" href="#372">372</a>     admin.cloneSnapshot(snapshotName, cloneName);
+<a class="jxr_linenumber" name="373" href="#373">373</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneName);
+<a class="jxr_linenumber" name="374" href="#374">374</a> 
+<a class="jxr_linenumber" name="375" href="#375">375</a>     verifyRowCount(UTIL, TABLE_NAME, numRows);
+<a class="jxr_linenumber" name="376" href="#376">376</a>     verifyRowCount(UTIL, cloneName, numRows);
+<a class="jxr_linenumber" name="377" href="#377">377</a> 
+<a class="jxr_linenumber" name="378" href="#378">378</a>     <em class="jxr_comment">// test that we can delete the snapshot</em>
+<a class="jxr_linenumber" name="379" href="#379">379</a>     UTIL.deleteTable(cloneName);
+<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>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="383" href="#383">383</a> <em class="jxr_javadoccomment">   * Basic end-to-end test of simple-flush-based snapshots</em>
+<a class="jxr_linenumber" name="384" href="#384">384</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="385" href="#385">385</a>   @Test (timeout=300000)
+<a class="jxr_linenumber" name="386" href="#386">386</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testFlushCreateListDestroy() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="387" href="#387">387</a>     LOG.debug(<span class="jxr_string">"------- Starting Snapshot test -------------"</span>);
+<a class="jxr_linenumber" name="388" href="#388">388</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="389" href="#389">389</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
+<a class="jxr_linenumber" name="390" href="#390">390</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
+<a class="jxr_linenumber" name="391" href="#391">391</a>     <em class="jxr_comment">// load the table so we have some data</em>
+<a class="jxr_linenumber" name="392" href="#392">392</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
+<a class="jxr_linenumber" name="393" href="#393">393</a> 
+<a class="jxr_linenumber" name="394" href="#394">394</a>     String snapshotName = <span class="jxr_string">"flushSnapshotCreateListDestroy"</span>;
+<a class="jxr_linenumber" name="395" href="#395">395</a>     FileSystem fs = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getFileSystem();
+<a class="jxr_linenumber" name="396" href="#396">396</a>     Path rootDir = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getRootDir();
+<a class="jxr_linenumber" name="397" href="#397">397</a>     SnapshotTestingUtils.createSnapshotAndValidate(admin, TABLE_NAME, Bytes.toString(TEST_FAM),
+<a class="jxr_linenumber" name="398" href="#398">398</a>       snapshotName, rootDir, fs, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="399" href="#399">399</a>   }
+<a class="jxr_linenumber" name="400" href="#400">400</a> 
+<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> <em class="jxr_javadoccomment">   * Demonstrate that we reject snapshot requests if there is a snapshot already running on the</em>
+<a class="jxr_linenumber" name="403" href="#403">403</a> <em class="jxr_javadoccomment">   * same table currently running and that concurrent snapshots on different tables can both</em>
+<a class="jxr_linenumber" name="404" href="#404">404</a> <em class="jxr_javadoccomment">   * succeed concurretly.</em>
+<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>   @Test(timeout=300000)
+<a class="jxr_linenumber" name="407" href="#407">407</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testConcurrentSnapshottingAttempts() <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="408" href="#408">408</a>     <strong class="jxr_keyword">final</strong> TableName TABLE2_NAME = TableName.valueOf(TABLE_NAME + <span class="jxr_string">"2"</span>);
+<a class="jxr_linenumber" name="409" href="#409">409</a> 
+<a class="jxr_linenumber" name="410" href="#410">410</a>     <strong class="jxr_keyword">int</strong> ssNum = 20;
+<a class="jxr_linenumber" name="411" href="#411">411</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="412" href="#412">412</a>     <em class="jxr_comment">// make sure we don't fail on listing snapshots</em>
+<a class="jxr_linenumber" name="413" href="#413">413</a>     SnapshotTestingUtils.assertNoSnapshots(admin);
+<a class="jxr_linenumber" name="414" href="#414">414</a>     <em class="jxr_comment">// create second testing table</em>
+<a class="jxr_linenumber" name="415" href="#415">415</a>     SnapshotTestingUtils.createTable(UTIL, TABLE2_NAME, TEST_FAM);
+<a class="jxr_linenumber" name="416" href="#416">416</a>     <em class="jxr_comment">// load the table so we have some data</em>
+<a class="jxr_linenumber" name="417" href="#417">417</a>     SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
+<a class="jxr_linenumber" name="418" href="#418">418</a>     SnapshotTestingUtils.loadData(UTIL, TABLE2_NAME, DEFAULT_NUM_ROWS, TEST_FAM);
+<a class="jxr_linenumber" name="419" href="#419">419</a> 
+<a class="jxr_linenumber" name="420" href="#420">420</a>     <strong class="jxr_keyword">final</strong> CountDownLatch toBeSubmitted = <strong class="jxr_keyword">new</strong> CountDownLatch(ssNum);
+<a class="jxr_linenumber" name="421" href="#421">421</a>     <em class="jxr_comment">// We'll have one of these per thread</em>
+<a class="jxr_linenumber" name="422" href="#422">422</a>     <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html">SSRunnable</a> <strong class="jxr_keyword">implements</strong> Runnable {
+<a class="jxr_linenumber" name="423" href="#423">423</a>       SnapshotDescription ss;
+<a class="jxr_linenumber" name="424" href="#424">424</a>       <a href="../../../../../org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html">SSRunnable</a>(SnapshotDescription ss) {
+<a class="jxr_linenumber" name="425" href="#425">425</a>         <strong class="jxr_keyword">this</strong>.ss = ss;
+<a class="jxr_linenumber" name="426" href="#426">426</a>       }
+<a class="jxr_linenumber" name="427" href="#427">427</a> 
+<a class="jxr_linenumber" name="428" href="#428">428</a>       @Override
+<a class="jxr_linenumber" name="429" href="#429">429</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
+<a class="jxr_linenumber" name="430" href="#430">430</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="431" href="#431">431</a>           Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="432" href="#432">432</a>           LOG.info(<span class="jxr_string">"Submitting snapshot request: "</span> + ClientSnapshotDescriptionUtils.toString(ss));
+<a class="jxr_linenumber" name="433" href="#433">433</a>           admin.takeSnapshotAsync(ss);
+<a class="jxr_linenumber" name="434" href="#434">434</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="435" href="#435">435</a>           LOG.info(<span class="jxr_string">"Exception during snapshot request: "</span> + ClientSnapshotDescriptionUtils.toString(
+<a class="jxr_linenumber" name="436" href="#436">436</a>               ss)
+<a class="jxr_linenumber" name="437" href="#437">437</a>               + <span class="jxr_string">".  This is ok, we expect some"</span>, e);
+<a class="jxr_linenumber" name="438" href="#438">438</a>         }
+<a class="jxr_linenumber" name="439" href="#439">439</a>         LOG.info(<span class="jxr_string">"Submitted snapshot request: "</span> + ClientSnapshotDescriptionUtils.toString(ss));
+<a class="jxr_linenumber" name="440" href="#440">440</a>         toBeSubmitted.countDown();
+<a class="jxr_linenumber" name="441" href="#441">441</a>       }
+<a class="jxr_linenumber" name="442" href="#442">442</a>     };
+<a class="jxr_linenumber" name="443" href="#443">443</a> 
+<a class="jxr_linenumber" name="444" href="#444">444</a>     <em class="jxr_comment">// build descriptions</em>
+<a class="jxr_linenumber" name="445" href="#445">445</a>     SnapshotDescription[] descs = <strong class="jxr_keyword">new</strong> SnapshotDescription[ssNum];
+<a class="jxr_linenumber" name="446" href="#446">446</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; ssNum; i++) {
+<a class="jxr_linenumber" name="447" href="#447">447</a>       SnapshotDescription.Builder builder = SnapshotDescription.newBuilder();
+<a class="jxr_linenumber" name="448" href="#448">448</a>       builder.setTable(((i % 2) == 0 ? TABLE_NAME : TABLE2_NAME).getNameAsString());
+<a class="jxr_linenumber" name="449" href="#449">449</a>       builder.setName(<span class="jxr_string">"ss"</span>+i);
+<a class="jxr_linenumber" name="450" href="#450">450</a>       builder.setType(SnapshotDescription.Type.FLUSH);
+<a class="jxr_linenumber" name="451" href="#451">451</a>       descs[i] = builder.build();
+<a class="jxr_linenumber" name="452" href="#452">452</a>     }
+<a class="jxr_linenumber" name="453" href="#453">453</a> 
+<a class="jxr_linenumber" name="454" href="#454">454</a>     <em class="jxr_comment">// kick each off its own thread</em>
+<a class="jxr_linenumber" name="455" href="#455">455</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0 ; i &lt; ssNum; i++) {
+<a class="jxr_linenumber" name="456" href="#456">456</a>       <strong class="jxr_keyword">new</strong> Thread(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html">SSRunnable</a>(descs[i])).start();
+<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>     <em class="jxr_comment">// wait until all have been submitted</em>
+<a class="jxr_linenumber" name="460" href="#460">460</a>     toBeSubmitted.await();
+<a class="jxr_linenumber" name="461" href="#461">461</a> 
+<a class="jxr_linenumber" name="462" href="#462">462</a>     <em class="jxr_comment">// loop until all are done.</em>
+<a class="jxr_linenumber" name="463" href="#463">463</a>     <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="464" href="#464">464</a>       <strong class="jxr_keyword">int</strong> doneCount = 0;
+<a class="jxr_linenumber" name="465" href="#465">465</a>       <strong class="jxr_keyword">for</strong> (SnapshotDescription ss : descs) {
+<a class="jxr_linenumber" name="466" href="#466">466</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="467" href="#467">467</a>           <strong class="jxr_keyword">if</strong> (admin.isSnapshotFinished(ss)) {
+<a class="jxr_linenumber" name="468" href="#468">468</a>             doneCount++;
+<a class="jxr_linenumber" name="469" href="#469">469</a>           }
+<a class="jxr_linenumber" name="470" href="#470">470</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="471" href="#471">471</a>           LOG.warn(<span class="jxr_string">"Got an exception when checking for snapshot "</span> + ss.getName(), e);
+<a class="jxr_linenumber" name="472" href="#472">472</a>           doneCount++;
+<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>       <strong class="jxr_keyword">if</strong> (doneCount == descs.length) {
+<a class="jxr_linenumber" name="476" href="#476">476</a>         <strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="477" href="#477">477</a>       }
+<a class="jxr_linenumber" name="478" href="#478">478</a>       Thread.sleep(100);
+<a class="jxr_linenumber" name="479" href="#479">479</a>     }
+<a class="jxr_linenumber" name="480" href="#480">480</a> 
+<a class="jxr_linenumber" name="481" href="#481">481</a>     <em class="jxr_comment">// dump for debugging</em>
+<a class="jxr_linenumber" name="482" href="#482">482</a>     UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);
+<a class="jxr_linenumber" name="483" href="#483">483</a> 
+<a class="jxr_linenumber" name="484" href="#484">484</a>     List&lt;SnapshotDescription&gt; taken = admin.listSnapshots();
+<a class="jxr_linenumber" name="485" href="#485">485</a>     <strong class="jxr_keyword">int</strong> takenSize = taken.size();
+<a class="jxr_linenumber" name="486" href="#486">486</a>     LOG.info(<span class="jxr_string">"Taken "</span> + takenSize + <span class="jxr_string">" snapshots:  "</span> + taken);
+<a class="jxr_linenumber" name="487" href="#487">487</a>     assertTrue(<span class="jxr_string">"We expect at least 1 request to be rejected because of we concurrently"</span> +
+<a class="jxr_linenumber" name="488" href="#488">488</a>         <span class="jxr_string">" issued many requests"</span>, takenSize &lt; ssNum &amp;&amp; takenSize &gt; 0);
+<a class="jxr_linenumber" name="489" href="#489">489</a> 
+<a class="jxr_linenumber" name="490" href="#490">490</a>     <em class="jxr_comment">// Verify that there's at least one snapshot per table</em>
+<a class="jxr_linenumber" name="491" href="#491">491</a>     <strong class="jxr_keyword">int</strong> t1SnapshotsCount = 0;
+<a class="jxr_linenumber" name="492" href="#492">492</a>     <strong class="jxr_keyword">int</strong> t2SnapshotsCount = 0;
+<a class="jxr_linenumber" name="493" href="#493">493</a>     <strong class="jxr_keyword">for</strong> (SnapshotDescription ss : taken) {
+<a class="jxr_linenumber" name="494" href="#494">494</a>       <strong class="jxr_keyword">if</strong> (TableName.valueOf(ss.getTable()).equals(TABLE_NAME)) {
+<a class="jxr_linenumber" name="495" href="#495">495</a>         t1SnapshotsCount++;
+<a class="jxr_linenumber" name="496" href="#496">496</a>       } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (TableName.valueOf(ss.getTable()).equals(TABLE2_NAME)) {
+<a class="jxr_linenumber" name="497" href="#497">497</a>         t2SnapshotsCount++;
+<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>     assertTrue(<span class="jxr_string">"We expect at least 1 snapshot of table1 "</span>, t1SnapshotsCount &gt; 0);
+<a class="jxr_linenumber" name="501" href="#501">501</a>     assertTrue(<span class="jxr_string">"We expect at least 1 snapshot of table2 "</span>, t2SnapshotsCount &gt; 0);
+<a class="jxr_linenumber" name="502" href="#502">502</a> 
+<a class="jxr_linenumber" name="503" href="#503">503</a>     UTIL.deleteTable(TABLE2_NAME);
+<a class="jxr_linenumber" name="504" href="#504">504</a>   }
+<a class="jxr_linenumber" name="505" href="#505">505</a> 
+<a class="jxr_linenumber" name="506" href="#506">506</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> waitRegionsAfterMerge(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> numRegionsAfterMerge)
+<a class="jxr_linenumber" name="507" href="#507">507</a>       <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="508" href="#508">508</a>     Admin admin = UTIL.getHBaseAdmin();
+<a class="jxr_linenumber" name="509" href="#509">509</a>     <em class="jxr_comment">// Verify that there's one region less</em>
+<a class="jxr_linenumber" name="510" href="#510">510</a>     <strong class="jxr_keyword">long</strong> startTime = System.currentTimeMillis();
+<a class="jxr_linenumber" name="511" href="#511">511</a>     <strong class="jxr_keyword">while</strong> (admin.getTableRegions(TABLE_NAME).size() != numRegionsAfterMerge) {
+<a class="jxr_linenumber" name="512" href="#512">512</a>       <em class="jxr_comment">// This may be flaky... if after 15sec the merge is not complete give up</em>
+<a class="jxr_linenumber" name="513" href="#513">513</a>       <em class="jxr_comment">// it will fail in the assertEquals(numRegionsAfterMerge).</em>
+<a class="jxr_linenumber" name="514" href="#514">514</a>       <strong class="jxr_keyword">if</strong> ((System.currentTimeMillis() - startTime) &gt; 15000)
+<a class="jxr_linenumber" name="515" href="#515">515</a>         <strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="516" href="#516">516</a>       Thread.sleep(100);
+<a class="jxr_linenumber" name="517" href="#517">517</a>     }
+<a class="jxr_linenumber" name="518" href="#518">518</a>     SnapshotTestingUtils.waitForTableToBeOnline(UTIL, TABLE_NAME);
+<a class="jxr_linenumber" name="519" href="#519">519</a>   }
 <a class="jxr_linenumber" name="520" href="#520">520</a> 
-<a class="jxr_linenumber" name="521" href="#521">521</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> verifyRowCount(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> util, <strong class="jxr_keyword">final</strong> TableName tableName,
-<a class="jxr_linenumber" name="522" href="#522">522</a>       <strong class="jxr_keyword">long</strong> expectedRows) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="523" href="#523">523</a>     SnapshotTestingUtils.verifyRowCount(util, tableName, expectedRows);
-<a class="jxr_linenumber" name="524" href="#524">524</a>   }
-<a class="jxr_linenumber" name="525" href="#525">525</a> 
-<a class="jxr_linenumber" name="526" href="#526">526</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> countRows(<strong class="jxr_keyword">final</strong> Table table, <strong class="jxr_keyword">final</strong> byte[]... families) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="527" href="#527">527</a>     <strong class="jxr_keyword">return</strong> UTIL.countRows(table, families);
-<a class="jxr_linenumber" name="528" href="#528">528</a>   }
-<a class="jxr_linenumber" name="529" href="#529">529</a> }
+<a class="jxr_linenumber" name="521" href="#521">521</a> 
+<a class="jxr_linenumber" name="522" href="#522">522</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> verifyRowCount(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> util, <strong class="jxr_keyword">final</strong> TableName tableName,
+<a class="jxr_linenumber" name="523" href="#523">523</a>       <strong class="jxr_keyword">long</strong> expectedRows) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="524" href="#524">524</a>     SnapshotTestingUtils.verifyRowCount(util, tableName, expectedRows);
+<a class="jxr_linenumber" name="525" href="#525">525</a>   }
+<a class="jxr_linenumber" name="526" href="#526">526</a> 
+<a class="jxr_linenumber" name="527" href="#527">527</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> countRows(<strong class="jxr_keyword">final</strong> Table table, <strong class="jxr_keyword">final</strong> byte[]... families) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="528" href="#528">528</a>     <strong class="jxr_keyword">return</strong> UTIL.countRows(table, families);
+<a class="jxr_linenumber" name="529" href="#529">529</a>   }
+<a class="jxr_linenumber" name="530" href="#530">530</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


[20/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
index 9640466..93346d6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
@@ -929,524 +929,656 @@
 <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>  @Test<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    HTable table = null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    try {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      latch = new CountDownLatch(1);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      exceptionLatch = new CountDownLatch(1);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      // Create KV that will give you two blocks<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      // Create a table with block size as 1024<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      // get the block cache and region<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      RegionLocator locator = table.getRegionLocator();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionName);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      Store store = region.getStores().iterator().next();<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      cacheConf.setEvictOnClose(true);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      // insert data. 2 Rows are added<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      insertData(table);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      // flush the data<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      System.out.println("Flushing cache");<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      // Should create one Hfile with 2 blocks<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      region.flush(true);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      // The block would have been decremented for the scan case as it was<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      // wrapped<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // before even the postNext hook gets executed.<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // giving some time for the block to be decremented<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      Thread.sleep(100);<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      boolean usedBlocksFound = false;<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      int refCount = 0;<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      while (iterator.hasNext()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        CachedBlock next = iterator.next();<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (cache instanceof BucketCache) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          continue;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        if (refCount != 0) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // Blocks will be with count 3<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          usedBlocksFound = true;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      assertTrue(usedBlocksFound);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      exceptionLatch.countDown();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // countdown the latch<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      for (ScanThread thread : scanThreads) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        thread.join();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      iterator = cache.iterator();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      usedBlocksFound = false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      refCount = 0;<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      while (iterator.hasNext()) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        CachedBlock next = iterator.next();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        if (cache instanceof BucketCache) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        } else {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          continue;<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        if (refCount != 0) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>          // Blocks will be with count 3<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          usedBlocksFound = true;<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      }<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      assertTrue(usedBlocksFound);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Thread.sleep(5100);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      iterator = cache.iterator();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      refCount = 0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      while (iterator.hasNext()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        CachedBlock next = iterator.next();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (cache instanceof BucketCache) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>          continue;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        assertEquals(0, refCount);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    } finally {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      if (table != null) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        table.close();<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    int refCount;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    while (iterator.hasNext()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      CachedBlock next = iterator.next();<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (cache instanceof BucketCache) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      } else {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        continue;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      assertEquals(0, refCount);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  private void insertData(HTable table) throws IOException {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    Put put = new Put(ROW);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    table.put(put);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    put = new Put(ROW1);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    table.put(put);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    put = new Put(ROW);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    table.put(put);<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>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      InterruptedException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    for (ScanThread thread : scanThreads) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      thread.start();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return scanThreads;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      throws IOException, InterruptedException {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    for (GetThread thread : getThreads) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      thread.start();<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    return getThreads;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      throws IOException, InterruptedException {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      thread.start();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    return multiGetThreads;<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    int counter = NO_OF_THREADS;<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      counter = counter - 1;<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        Thread.sleep(100);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } else {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        Thread.sleep(100);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    int refCount = 0;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    while (iterator.hasNext()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      CachedBlock next = iterator.next();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (cache instanceof BucketCache) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      } else {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        if (expectOnlyZero) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          assertTrue(refCount == 0);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (refCount != 0) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          // Because the scan would have also touched up on these blocks but<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          // it<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>          // would have touched<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>          // all 3<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>          if (getClosed) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>            // If get has closed only the scan's blocks would be available<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          } else {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      } else {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // Because the get would have also touched up on these blocks but it<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // would have touched<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        // upon only 2 additionally<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        if (expectOnlyZero) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          assertTrue(refCount == 0);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        if (refCount != 0) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (getLatch == null || wrappedCp) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          } else {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private static class MultiGetThread extends Thread {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private final HTable table;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    public MultiGetThread(HTable table) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      this.table = table;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    @Override<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    public void run() {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      gets.add(new Get(ROW));<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      gets.add(new Get(ROW1));<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      try {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        Result[] r = table.get(gets);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (IOException e) {<a name="line.1169"></a>
+<span class="sourceLineNo">924</span>  public void testBlockEvictionAfterHBASE13082WithCompactionAndFlush()<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      throws IOException, InterruptedException {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    // do flush and scan in parallel<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    HTable table = null;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    try {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      latch = new CountDownLatch(1);<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      compactionLatch = new CountDownLatch(1);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      TableName tableName =<a name="line.931"></a>
+<span class="sourceLineNo">932</span>          TableName.valueOf("testBlockEvictionAfterHBASE13082WithCompactionAndFlush");<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      // Create a table with block size as 1024<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      // get the block cache and region<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      RegionLocator locator = table.getRegionLocator();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.939"></a>
+<span class="sourceLineNo">940</span>          regionName);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      Store store = region.getStores().iterator().next();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      cacheConf.setEvictOnClose(true);<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>      // insert data. 2 Rows are added<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      Put put = new Put(ROW);<a name="line.948"></a>
+<span class="sourceLineNo">949</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      table.put(put);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put = new Put(ROW1);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      table.put(put);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // Should create one Hfile with 2 blocks<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      region.flush(true);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      // read the data and expect same blocks, one new hit, no misses<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      int refCount = 0;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      // Check how this miss is happening<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // insert a second column, read the row, no new blocks, 3 new hits<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      byte[] data2 = Bytes.add(data, data);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      put = new Put(ROW);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      table.put(put);<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // flush, one new block<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      System.out.println("Flushing cache");<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      region.flush(true);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      iterateBlockCache(cache, iterator);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      // Create three sets of scan<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Thread.sleep(100);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      iterator = cache.iterator();<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      boolean usedBlocksFound = false;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      while (iterator.hasNext()) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        CachedBlock next = iterator.next();<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.978"></a>
+<span class="sourceLineNo">979</span>        if (cache instanceof BucketCache) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        } else {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          continue;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        if (refCount != 0) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>          // Blocks will be with count 3<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          usedBlocksFound = true;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        }<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      // Make a put and do a flush<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>      data2 = Bytes.add(data, data);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      put = new Put(ROW1);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      table.put(put);<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      // flush, one new block<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      System.out.println("Flushing cache");<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      region.flush(true);<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      usedBlocksFound = false;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      System.out.println("Compacting");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      assertEquals(3, store.getStorefilesCount());<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      store.triggerMajorCompaction();<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      region.compact(true);<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      assertEquals(1, store.getStorefilesCount());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      // Even after compaction is done we will have some blocks that cannot<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // be evicted this is because the scan is still referencing them<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      iterator = cache.iterator();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      while (iterator.hasNext()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        CachedBlock next = iterator.next();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        if (cache instanceof BucketCache) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        } else {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          continue;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        }<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (refCount != 0) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // Blocks will be with count 3 as they are not yet cleared<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          usedBlocksFound = true;<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>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      // Should not throw exception<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      compactionLatch.countDown();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      latch.countDown();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      for (ScanThread thread : scanThreads) {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        thread.join();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      // by this time all blocks should have been evicted<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      iterator = cache.iterator();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // Since a flush and compaction happened after a scan started<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // we need to ensure that all the original blocks of the compacted file<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // is also removed.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      iterateBlockCache(cache, iterator);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      Result r = table.get(new Get(ROW));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      // The gets would be working on new blocks<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>      iterator = cache.iterator();<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      iterateBlockCache(cache, iterator);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    } finally {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      if (table != null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        table.close();<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><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  @Test<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    HTable table = null;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      latch = new CountDownLatch(1);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      exceptionLatch = new CountDownLatch(1);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      // Create KV that will give you two blocks<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      // Create a table with block size as 1024<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      // get the block cache and region<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      RegionLocator locator = table.getRegionLocator();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          regionName);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      Store store = region.getStores().iterator().next();<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      cacheConf.setEvictOnClose(true);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      // insert data. 2 Rows are added<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      insertData(table);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      // flush the data<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      System.out.println("Flushing cache");<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // Should create one Hfile with 2 blocks<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      region.flush(true);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      // The block would have been decremented for the scan case as it was<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      // wrapped<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // before even the postNext hook gets executed.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      // giving some time for the block to be decremented<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      Thread.sleep(100);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      boolean usedBlocksFound = false;<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      int refCount = 0;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      while (iterator.hasNext()) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        CachedBlock next = iterator.next();<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        if (cache instanceof BucketCache) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        } else {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>          continue;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>        if (refCount != 0) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>          // Blocks will be with count 3<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          usedBlocksFound = true;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      assertTrue(usedBlocksFound);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      exceptionLatch.countDown();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // countdown the latch<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      for (ScanThread thread : scanThreads) {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        thread.join();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      iterator = cache.iterator();<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      usedBlocksFound = false;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      refCount = 0;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      while (iterator.hasNext()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        CachedBlock next = iterator.next();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        if (cache instanceof BucketCache) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        } else {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>          continue;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        if (refCount != 0) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>          // Blocks will be with count 3<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          usedBlocksFound = true;<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>        }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(usedBlocksFound);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      Thread.sleep(5100);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      iterator = cache.iterator();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      refCount = 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      while (iterator.hasNext()) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>        CachedBlock next = iterator.next();<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        if (cache instanceof BucketCache) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        } else {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>          continue;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        assertEquals(0, refCount);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      }<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    } finally {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      if (table != null) {<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>        table.close();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    int refCount;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    while (iterator.hasNext()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      CachedBlock next = iterator.next();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      if (cache instanceof BucketCache) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      } else {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        continue;<a name="line.1169"></a>
 <span class="sourceLineNo">1170</span>      }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    }<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  private static class GetThread extends Thread {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    private final HTable table;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    private final boolean tracker;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    private final boolean multipleCFs;<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      this.table = table;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      this.tracker = tracker;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      this.multipleCFs = multipleCFs;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span><a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    @Override<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    public void run() {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>        initiateGet(table);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      } catch (IOException e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        // do nothing<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    private void initiateGet(HTable table) throws IOException {<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      Get get = new Get(ROW);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      if (tracker) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>        // Change this<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        if (!multipleCFs) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 3));<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 8));<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 9));<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          // Unknown key<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 900));<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>        } else {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          get.addColumn(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3));<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          get.addColumn(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9));<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>          // Unknown key<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 900));<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>        }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      Result r = table.get(get);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      System.out.println(r);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (!tracker) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        if (!multipleCFs) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 3)), data2));<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 8)), data2));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 9)), data2));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        } else {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>          assertTrue(Bytes.equals(<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>              r.getValue(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3)),<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>              data2));<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          assertTrue(Bytes.equals(<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              r.getValue(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8)),<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>              data2));<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          assertTrue(Bytes.equals(<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>              r.getValue(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9)),<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>              data2));<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span><a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  private static class ScanThread extends Thread {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    private final HTable table;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    private final boolean reverse;<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    public ScanThread(HTable table, boolean reverse) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      this.table = table;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      this.reverse = reverse;<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span><a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    @Override<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    public void run() {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      try {<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        initiateScan(table);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      } catch (IOException e) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        // do nothing<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    private void initiateScan(HTable table) throws IOException {<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      Scan scan = new Scan();<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      if (reverse) {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>        scan.setReversed(true);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      ResultScanner resScanner = table.getScanner(scan);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      int i = (reverse ? ROWS.length - 1 : 0);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      boolean resultFound = false;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      for (Result result : resScanner) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        resultFound = true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        System.out.println(result);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        if (!reverse) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          i++;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>        } else {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>          i--;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      assertTrue(resultFound);<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  private void waitForStoreFileCount(Store store, int count, int timeout)<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      throws InterruptedException {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    long start = System.currentTimeMillis();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    while (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      Thread.sleep(100);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    System.out.println("start=" + start + ", now=" + System.currentTimeMillis() + ", cur="<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        + store.getStorefilesCount());<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  private static class CustomScanner implements RegionScanner {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    private RegionScanner delegate;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    public CustomScanner(RegionScanner delegate) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      this.delegate = delegate;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    public boolean next(List&lt;Cell&gt; results) throws IOException {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      return delegate.next(results);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    @Override<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext scannerContext) throws IOException {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return delegate.next(result, scannerContext);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public boolean nextRaw(List&lt;Cell&gt; result) throws IOException {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return delegate.nextRaw(result);<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    public boolean nextRaw(List&lt;Cell&gt; result, ScannerContext context) throws IOException {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      boolean nextRaw = delegate.nextRaw(result, context);<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      if (compactionLatch != null &amp;&amp; compactionLatch.getCount() &gt; 0) {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        try {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          compactionLatch.await();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        } catch (InterruptedException ie) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      if (CustomInnerRegionObserver.throwException.get()) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (exceptionLatch.getCount() &gt; 0) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          try {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            exceptionLatch.await();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          } catch (InterruptedException e) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>          throw new IOException("throw exception");<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        }<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      return nextRaw;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    @Override<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    public void close() throws IOException {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      delegate.close();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    @Override<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    public HRegionInfo getRegionInfo() {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      return delegate.getRegionInfo();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    }<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    @Override<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    public boolean isFilterDone() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return delegate.isFilterDone();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    public boolean reseek(byte[] row) throws IOException {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      return false;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span><a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    public long getMaxResultSize() {<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      return delegate.getMaxResultSize();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    public long getMvccReadPoint() {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      return delegate.getMvccReadPoint();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span><a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    @Override<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    public int getBatch() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      return delegate.getBatch();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    @Override<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    public void shipped() throws IOException {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      this.delegate.shipped();<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>  public static class CustomInnerRegionObserverWrapper extends CustomInnerRegionObserver {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    @Override<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    public RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        Scan scan, RegionScanner s) throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      return new CustomScanner(s);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>  }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  public static class CustomInnerRegionObserver extends BaseRegionObserver {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    static final AtomicLong sleepTime = new AtomicLong(0);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    static final AtomicBoolean slowDownNext = new AtomicBoolean(false);<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    static final AtomicInteger countOfNext = new AtomicInteger(0);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    static final AtomicInteger countOfGets = new AtomicInteger(0);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    static final AtomicBoolean waitForGets = new AtomicBoolean(false);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    static final AtomicBoolean throwException = new AtomicBoolean(false);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    private static final AtomicReference&lt;CountDownLatch&gt; cdl = new AtomicReference&lt;CountDownLatch&gt;(<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        new CountDownLatch(0));<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        InternalScanner s, List&lt;Result&gt; results, int limit, boolean hasMore) throws IOException {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      slowdownCode(e, false);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      if (getLatch != null &amp;&amp; getLatch.getCount() &gt; 0) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>          getLatch.await();<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        } catch (InterruptedException e1) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      return super.postScannerNext(e, s, results, limit, hasMore);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>    public void postGetOp(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Get get,<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        List&lt;Cell&gt; results) throws IOException {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      slowdownCode(e, true);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      super.postGetOp(e, get, results);<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    public static AtomicReference&lt;CountDownLatch&gt; getCdl() {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      return cdl;<a name="line.1416"></a>
+<span class="sourceLineNo">1171</span>      assertEquals(0, refCount);<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  private void insertData(HTable table) throws IOException {<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    Put put = new Put(ROW);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    table.put(put);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    put = new Put(ROW1);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    table.put(put);<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    put = new Put(ROW);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    table.put(put);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span><a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      InterruptedException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    for (ScanThread thread : scanThreads) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      thread.start();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return scanThreads;<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      throws IOException, InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    for (GetThread thread : getThreads) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      thread.start();<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    return getThreads;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      throws IOException, InterruptedException {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      thread.start();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    return multiGetThreads;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span><a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    int counter = NO_OF_THREADS;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      counter = counter - 1;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>        Thread.sleep(100);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    } else {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        Thread.sleep(100);<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    int refCount = 0;<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    while (iterator.hasNext()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      CachedBlock next = iterator.next();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      if (cache instanceof BucketCache) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        continue;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        if (expectOnlyZero) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>          assertTrue(refCount == 0);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>        if (refCount != 0) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>          // Because the scan would have also touched up on these blocks but<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>          // it<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>          // would have touched<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>          // all 3<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>          if (getClosed) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>            // If get has closed only the scan's blocks would be available<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          } else {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>        // Because the get would have also touched up on these blocks but it<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>        // would have touched<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        // upon only 2 additionally<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        if (expectOnlyZero) {<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>          assertTrue(refCount == 0);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        if (refCount != 0) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          if (getLatch == null || wrappedCp) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          } else {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span><a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  private static class MultiGetThread extends Thread {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    private final HTable table;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    public MultiGetThread(HTable table) {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      this.table = table;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    @Override<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    public void run() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      gets.add(new Get(ROW));<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      gets.add(new Get(ROW1));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      try {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        Result[] r = table.get(gets);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      } catch (IOException e) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  private static class GetThread extends Thread {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    private final HTable table;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    private final boolean tracker;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    private final boolean multipleCFs;<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      this.table = table;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      this.tracker = tracker;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      this.multipleCFs = multipleCFs;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    @Override<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    public void run() {<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      try {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        initiateGet(table);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      } catch (IOException e) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>        // do nothing<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      }<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    }<a name="line.1324"

<TRUNCATED>

[25/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 9eda00d..0d7d95a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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 = "filter", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.68"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,125 +116,125 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 24, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 24, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_deadServers = deadServers;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_deadServers__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_deadServers;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getDeadServers__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_deadServers__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_deadServers__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 22, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 22, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_metaLocation = metaLocation;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_metaLocation__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerName getMetaLocation()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_metaLocation;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerName m_metaLocation;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_metaLocation__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_metaLocation__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">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 26, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setFilter(String filter)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></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">148</span>      // 26, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_filter = filter;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_filter__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public String getFilter()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_filter;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></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">156</span>    private String m_filter;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getFilter__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_filter__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></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">161</span>    private boolean m_filter__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 25, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></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">165</span>      // 25, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public ServerManager getServerManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public boolean getCatalogJanitorEnabled()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_serverManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_catalogJanitorEnabled;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></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">173</span>    private boolean m_catalogJanitorEnabled;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 26, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFilter(String filter)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 29, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 26, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_filter = filter;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_filter__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 29, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_assignmentManager = assignmentManager;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_assignmentManager__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFilter()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public AssignmentManager getAssignmentManager()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_filter;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_assignmentManager;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_filter;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFilter__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private AssignmentManager m_assignmentManager;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_filter__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_assignmentManager__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_filter__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 28, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServerManager(ServerManager serverManager)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 28, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_serverManager = serverManager;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_serverManager__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public ServerManager getServerManager()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_serverManager;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private ServerManager m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServerManager__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_serverManager__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 27, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setFormat(String format)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 27, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_format = format;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_format__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public String getFormat()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_format;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private String m_format;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getFormat__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_format__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_format__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
 <span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
@@ -252,23 +252,23 @@
 <span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 21, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.248"></a>
+<span class="sourceLineNo">247</span>    // 24, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 21, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_frags = frags;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_frags__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 24, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_deadServers = deadServers;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_deadServers__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_frags;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_deadServers;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFrags__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getDeadServers__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_frags__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_deadServers__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_frags__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_deadServers__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,52 +280,52 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerName metaLocation;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<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 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">289</span>  protected String filter;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setFilter(p_filter);<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 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">296</span>  protected boolean catalogJanitorEnabled;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<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 String filter;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected AssignmentManager assignmentManager;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFilter(p_filter);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<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 boolean catalogJanitorEnabled;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected ServerManager serverManager;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected String format;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerName metaLocation;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setFormat(p_format);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
@@ -336,10 +336,10 @@
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setFrags(p_frags);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 9eda00d..0d7d95a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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 = "filter", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.68"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,125 +116,125 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 24, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 24, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_deadServers = deadServers;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_deadServers__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_deadServers;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getDeadServers__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_deadServers__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_deadServers__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 22, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 22, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_metaLocation = metaLocation;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_metaLocation__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerName getMetaLocation()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_metaLocation;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerName m_metaLocation;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_metaLocation__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_metaLocation__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">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 26, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setFilter(String filter)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></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">148</span>      // 26, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_filter = filter;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_filter__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public String getFilter()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_filter;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></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">156</span>    private String m_filter;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getFilter__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_filter__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></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">161</span>    private boolean m_filter__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 25, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></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">165</span>      // 25, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public ServerManager getServerManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public boolean getCatalogJanitorEnabled()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_serverManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_catalogJanitorEnabled;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></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">173</span>    private boolean m_catalogJanitorEnabled;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 26, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFilter(String filter)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 29, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 26, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_filter = filter;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_filter__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 29, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_assignmentManager = assignmentManager;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_assignmentManager__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFilter()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public AssignmentManager getAssignmentManager()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_filter;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_assignmentManager;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_filter;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFilter__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private AssignmentManager m_assignmentManager;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_filter__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_assignmentManager__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_filter__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 28, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServerManager(ServerManager serverManager)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 28, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_serverManager = serverManager;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_serverManager__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public ServerManager getServerManager()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_serverManager;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private ServerManager m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServerManager__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_serverManager__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 27, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setFormat(String format)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 27, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_format = format;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_format__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public String getFormat()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_format;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private String m_format;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getFormat__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_format__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_format__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
 <span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
@@ -252,23 +252,23 @@
 <span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 21, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.248"></a>
+<span class="sourceLineNo">247</span>    // 24, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 21, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_frags = frags;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_frags__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 24, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_deadServers = deadServers;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_deadServers__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_frags;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_deadServers;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFrags__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getDeadServers__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_frags__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_deadServers__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_frags__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_deadServers__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,52 +280,52 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerName metaLocation;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<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 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">289</span>  protected String filter;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setFilter(p_filter);<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 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">296</span>  protected boolean catalogJanitorEnabled;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<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 String filter;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected AssignmentManager assignmentManager;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFilter(p_filter);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<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 boolean catalogJanitorEnabled;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected ServerManager serverManager;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected String format;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerName metaLocation;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setFormat(p_format);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
@@ -336,10 +336,10 @@
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setFrags(p_frags);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

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


[38/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
index 470d16d..3ce00fc 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
@@ -124,50 +124,54 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#closed">closed</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#cur">cur</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/StoreFileScanner.html#delayedReseek">delayedReseek</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#delayedSeekKV">delayedSeekKV</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/StoreFileScanner.html#enforceMVCC">enforceMVCC</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#hasMVCCInfo">hasMVCCInfo</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#hfs">hfs</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#matcher">matcher</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#reader">reader</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/StoreFileScanner.html#readPt">readPt</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/StoreFileScanner.html#realSeekDone">realSeekDone</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <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></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#seekCount">seekCount</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/StoreFileScanner.html#stopSkippingKVsIfNextRow">stopSkippingKVsIfNextRow</a></strong></code>&nbsp;</td>
 </tr>
@@ -455,13 +459,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.50">cur</a></pre>
 </li>
 </ul>
+<a name="closed">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>closed</h4>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.51">closed</a></pre>
+</li>
+</ul>
 <a name="realSeekDone">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>realSeekDone</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.52">realSeekDone</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.53">realSeekDone</a></pre>
 </li>
 </ul>
 <a name="delayedReseek">
@@ -470,7 +483,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>delayedReseek</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.53">delayedReseek</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.54">delayedReseek</a></pre>
 </li>
 </ul>
 <a name="delayedSeekKV">
@@ -479,7 +492,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>delayedSeekKV</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.54">delayedSeekKV</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.55">delayedSeekKV</a></pre>
 </li>
 </ul>
 <a name="enforceMVCC">
@@ -488,7 +501,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>enforceMVCC</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.56">enforceMVCC</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.57">enforceMVCC</a></pre>
 </li>
 </ul>
 <a name="hasMVCCInfo">
@@ -497,7 +510,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>hasMVCCInfo</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.57">hasMVCCInfo</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.58">hasMVCCInfo</a></pre>
 </li>
 </ul>
 <a name="stopSkippingKVsIfNextRow">
@@ -506,7 +519,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>stopSkippingKVsIfNextRow</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.60">stopSkippingKVsIfNextRow</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.61">stopSkippingKVsIfNextRow</a></pre>
 </li>
 </ul>
 <a name="seekCount">
@@ -515,7 +528,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekCount</h4>
-<pre>private static&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/StoreFileScanner.html#line.62">seekCount</a></pre>
+<pre>private static&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/StoreFileScanner.html#line.63">seekCount</a></pre>
 </li>
 </ul>
 <a name="matcher">
@@ -524,7 +537,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>matcher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.64">matcher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.65">matcher</a></pre>
 </li>
 </ul>
 <a name="readPt">
@@ -533,7 +546,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>readPt</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.66">readPt</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.67">readPt</a></pre>
 </li>
 </ul>
 </li>
@@ -550,7 +563,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFileScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.72">StoreFileScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;reader,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.73">StoreFileScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;reader,
                 <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;hfs,
                 boolean&nbsp;useMVCC,
                 boolean&nbsp;hasMVCC,
@@ -573,7 +586,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>isPrimaryReplica</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.81">isPrimaryReplica</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.82">isPrimaryReplica</a>()</pre>
 </li>
 </ul>
 <a name="getScannersForStoreFiles(java.util.Collection, boolean, boolean, long)">
@@ -582,7 +595,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersForStoreFiles</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.89">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.90">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                                               boolean&nbsp;cacheBlocks,
                                               boolean&nbsp;usePread,
                                               long&nbsp;readPt)
@@ -599,7 +612,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersForStoreFiles</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.100">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.101">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                                               boolean&nbsp;cacheBlocks,
                                               boolean&nbsp;usePread,
                                               boolean&nbsp;isCompaction,
@@ -617,7 +630,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersForStoreFiles</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.112">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.113">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                                               boolean&nbsp;cacheBlocks,
                                               boolean&nbsp;usePread,
                                               boolean&nbsp;isCompaction,
@@ -639,7 +652,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersForStoreFiles</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.129">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.130">getScannersForStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                                               boolean&nbsp;cacheBlocks,
                                               boolean&nbsp;usePread,
                                               boolean&nbsp;isCompaction,
@@ -657,7 +670,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.137">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.138">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 +683,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>peek</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.141">peek</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.142">peek</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#peek()">KeyValueScanner</a></code></strong></div>
 <div class="block">Look at the next Cell in this scanner, but do not iterate scanner.</div>
 <dl>
@@ -685,7 +698,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.145">next</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.146">next</a>()
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#next()">KeyValueScanner</a></code></strong></div>
 <div class="block">Return the next Cell in this scanner, iterating the scanner</div>
@@ -703,7 +716,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.165">seek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.166">seek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#seek(org.apache.hadoop.hbase.Cell)">KeyValueScanner</a></code></strong></div>
 <div class="block">Seek the scanner at or after the specified KeyValue.</div>
@@ -722,7 +735,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>reseek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.192">reseek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.193">reseek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#reseek(org.apache.hadoop.hbase.Cell)">KeyValueScanner</a></code></strong></div>
 <div class="block">Reseek the scanner at or after the specified KeyValue.
@@ -744,7 +757,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>setCurrentCell</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.219">setCurrentCell</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;newVal)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.220">setCurrentCell</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;newVal)
                        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>
@@ -756,7 +769,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>skipKVsNewerThanReadpoint</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.226">skipKVsNewerThanReadpoint</a>()
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.227">skipKVsNewerThanReadpoint</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>
@@ -768,7 +781,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.248">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.249">close</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#close()">KeyValueScanner</a></code></strong></div>
 <div class="block">Close the KeyValue scanner.</div>
 <dl>
@@ -783,7 +796,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekAtOrAfter</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.263">seekAtOrAfter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;s,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.266">seekAtOrAfter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;s,
                     <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;k)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>s</code> - </dd><dd><code>k</code> - </dd>
@@ -798,7 +811,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>reseekAtOrAfter</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.282">reseekAtOrAfter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;s,
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.285">reseekAtOrAfter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;s,
                       <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;k)
                         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>
@@ -811,7 +824,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getSequenceID</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.305">getSequenceID</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.308">getSequenceID</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getSequenceID()">KeyValueScanner</a></code></strong></div>
 <div class="block">Get the sequence id associated with this KeyValueScanner. This is required
  for comparing multiple files to find out which one has the latest data.
@@ -829,7 +842,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>requestSeek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.324">requestSeek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.327">requestSeek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
                   boolean&nbsp;forward,
                   boolean&nbsp;useBloom)
                     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>
@@ -859,7 +872,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getReader</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.384">getReader</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.387">getReader</a>()</pre>
 </li>
 </ul>
 <a name="getComparator()">
@@ -868,7 +881,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getComparator</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.388">getComparator</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.391">getComparator</a>()</pre>
 </li>
 </ul>
 <a name="realSeekDone()">
@@ -877,7 +890,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>realSeekDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.393">realSeekDone</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.396">realSeekDone</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#realSeekDone()">KeyValueScanner</a></code></strong></div>
 <div class="block">We optimize our store scanners by checking the most recent store file
  first, so we sometimes pretend we have done a seek but delay it until the
@@ -895,7 +908,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>enforceSeek</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.398">enforceSeek</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.401">enforceSeek</a>()
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#enforceSeek()">KeyValueScanner</a></code></strong></div>
 <div class="block">Does the real seek operation in case it was skipped by
@@ -916,7 +929,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>setScanQueryMatcher</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.409">setScanQueryMatcher</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.412">setScanQueryMatcher</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher)</pre>
 </li>
 </ul>
 <a name="isFileScanner()">
@@ -925,7 +938,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>isFileScanner</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.414">isFileScanner</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.417">isFileScanner</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#isFileScanner()">isFileScanner</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></code></dd>
@@ -939,7 +952,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getSeekCount</h4>
-<pre>static final&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.420">getSeekCount</a>()</pre>
+<pre>static final&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.423">getSeekCount</a>()</pre>
 </li>
 </ul>
 <a name="instrument()">
@@ -948,7 +961,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>instrument</h4>
-<pre>static final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.423">instrument</a>()</pre>
+<pre>static final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.426">instrument</a>()</pre>
 </li>
 </ul>
 <a name="shouldUseScanner(org.apache.hadoop.hbase.client.Scan, org.apache.hadoop.hbase.regionserver.Store, long)">
@@ -957,7 +970,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldUseScanner</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.428">shouldUseScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.431">shouldUseScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
                        long&nbsp;oldestUnexpiredTS)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#shouldUseScanner(org.apache.hadoop.hbase.client.Scan,%20org.apache.hadoop.hbase.regionserver.Store,%20long)">KeyValueScanner</a></code></strong></div>
@@ -977,7 +990,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekToPreviousRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.440">seekToPreviousRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;originalKey)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.443">seekToPreviousRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;originalKey)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#seekToPreviousRow(org.apache.hadoop.hbase.Cell)">KeyValueScanner</a></code></strong></div>
 <div class="block">Seek the scanner at the first Cell of the row which is the previous row
@@ -998,7 +1011,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekToLastRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.491">seekToLastRow</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.494">seekToLastRow</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#seekToLastRow()">KeyValueScanner</a></code></strong></div>
 <div class="block">Seek the scanner at the first KeyValue of last row</div>
@@ -1017,7 +1030,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>backwardSeek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.505">backwardSeek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.508">backwardSeek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#backwardSeek(org.apache.hadoop.hbase.Cell)">KeyValueScanner</a></code></strong></div>
 <div class="block">Seek the scanner at or before the row of specified Cell, it firstly
@@ -1041,7 +1054,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextIndexedKey</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.515">getNextIndexedKey</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.518">getNextIndexedKey</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getNextIndexedKey()">getNextIndexedKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></code></dd>
@@ -1055,7 +1068,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>shipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.520">shipped</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#line.523">shipped</a>()
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html#shipped()">Shipper</a></code></strong></div>
 <div class="block">Called after a batch of rows scanned and set to be returned to client. Any in between cleanup

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
index ce2eafa..4530a5b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.133">StoreScanner.StoreScannerCompactionRace</a>
+<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.140">StoreScanner.StoreScannerCompactionRace</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>&gt;</pre>
 </li>
 </ul>
@@ -199,7 +199,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>BEFORE_SEEK</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.134">BEFORE_SEEK</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.141">BEFORE_SEEK</a></pre>
 </li>
 </ul>
 <a name="AFTER_SEEK">
@@ -208,7 +208,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>AFTER_SEEK</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.135">AFTER_SEEK</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.142">AFTER_SEEK</a></pre>
 </li>
 </ul>
 <a name="COMPACT_COMPLETE">
@@ -217,7 +217,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>COMPACT_COMPLETE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.136">COMPACT_COMPLETE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.143">COMPACT_COMPLETE</a></pre>
 </li>
 </ul>
 </li>
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.133">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.140">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -251,7 +251,7 @@ for (StoreScanner.StoreScannerCompactionRace c : StoreScanner.StoreScannerCompac
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.133">valueOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.140">valueOf</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 


[07/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html b/xref/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
index 537a160..90d4f35 100644
--- a/xref/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
+++ b/xref/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
@@ -133,16 +133,18 @@
 <a class="jxr_linenumber" name="123" href="#123">123</a> 
 <a class="jxr_linenumber" name="124" href="#124">124</a>   @Override
 <a class="jxr_linenumber" name="125" href="#125">125</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> seekToPreviousRow(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> key) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="126" href="#126">126</a>     checkReseek();
-<a class="jxr_linenumber" name="127" href="#127">127</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.heap.seekToPreviousRow(key);
-<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>   @Override
-<a class="jxr_linenumber" name="131" href="#131">131</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> backwardSeek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> key) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="132" href="#132">132</a>     checkReseek();
-<a class="jxr_linenumber" name="133" href="#133">133</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.heap.backwardSeek(key);
-<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="126" href="#126">126</a>     <strong class="jxr_keyword">boolean</strong> flushed = checkFlushed();
+<a class="jxr_linenumber" name="127" href="#127">127</a>     checkReseek(flushed);
+<a class="jxr_linenumber" name="128" href="#128">128</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.heap.seekToPreviousRow(key);
+<a class="jxr_linenumber" name="129" href="#129">129</a>   }
+<a class="jxr_linenumber" name="130" href="#130">130</a>   
+<a class="jxr_linenumber" name="131" href="#131">131</a>   @Override
+<a class="jxr_linenumber" name="132" href="#132">132</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> backwardSeek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> key) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="133" href="#133">133</a>     <strong class="jxr_keyword">boolean</strong> flushed = checkFlushed();
+<a class="jxr_linenumber" name="134" href="#134">134</a>     checkReseek(flushed);
+<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.heap.backwardSeek(key);
+<a class="jxr_linenumber" name="136" href="#136">136</a>   }
+<a class="jxr_linenumber" name="137" href="#137">137</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


[23/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependencies.html b/hbase-spark/dependencies.html
index 7b0e3ab..4bbc8b3 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-convergence.html b/hbase-spark/dependency-convergence.html
index d309949..3cf6ebc 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-info.html b/hbase-spark/dependency-info.html
index a593f6f..c9e2b25 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-management.html b/hbase-spark/dependency-management.html
index d7a3eea..cce1980 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/distribution-management.html b/hbase-spark/distribution-management.html
index bc779c4..c9b2215 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-spark/index.html b/hbase-spark/index.html
index 9cbe0d5..5169c3b 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-spark/integration.html b/hbase-spark/integration.html
index 7cdbc03..8ec2096 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-spark/issue-tracking.html b/hbase-spark/issue-tracking.html
index 9fb4e59..56a6370 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/license.html
----------------------------------------------------------------------
diff --git a/hbase-spark/license.html b/hbase-spark/license.html
index c07e444..823e93f 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-spark/mail-lists.html b/hbase-spark/mail-lists.html
index d513417..c2e1995 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugin-management.html b/hbase-spark/plugin-management.html
index 2fa24cf..c7e2c91 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugins.html b/hbase-spark/plugins.html
index cc2103f..d407335 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-info.html b/hbase-spark/project-info.html
index 48b3b49..de715e6 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-reports.html b/hbase-spark/project-reports.html
index d5cef78..be4f77a 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-summary.html b/hbase-spark/project-summary.html
index 97921bb..888e040 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-spark/source-repository.html b/hbase-spark/source-repository.html
index 868ac39..fd71b42 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-spark/team-list.html b/hbase-spark/team-list.html
index 1b4f02e..ac216d2 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 8e4ed7d..ce9eb3c 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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" />
@@ -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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index ca03ca5..3342fa3 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 74b0c1d..cac5a5a 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 085bc85..a9c9013 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index ea90af5..cea19ad 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 772c396..3811c26 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/modules.html
----------------------------------------------------------------------
diff --git a/modules.html b/modules.html
index f20d5db..6196962 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index ac44b07..9c4632e 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index cc0d543..3f698df 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 4937f1f..e97562d 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 4351ca1..d652a78 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 6e8353d..195acd9 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index b8ae32d..b2f393a 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index cc9f126..6abecd6 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 33256d4..143cd01 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 157380a..7b89d7b 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 305291a..68f9c3e 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index a5f5018..39ab7cb 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 1a2f3ea..eeca5bb 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 275b99f..4d6a44c 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 4dbc69c..d9bd81d 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 6f94f9d..9d33f4b 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -634,6 +634,7 @@
 <li><a href="org/apache/hadoop/hbase/filter/TestColumnRangeFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestColumnRangeFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/TestColumnSchemaModel.html" title="class in org.apache.hadoop.hbase.rest.model" target="classFrame">TestColumnSchemaModel</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestColumnSeeking.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestColumnSeeking</a></li>
+<li><a href="org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestCombinedBlockCache</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/TestCompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver.compactions" target="classFrame">TestCompactedHFilesDischarger</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/TestCompactedHFilesDischarger.ScanThread.html" title="class in org.apache.hadoop.hbase.regionserver.compactions" target="classFrame">TestCompactedHFilesDischarger.ScanThread</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestCompaction.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestCompaction</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 3db4625..57d527a 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -634,6 +634,7 @@
 <li><a href="org/apache/hadoop/hbase/filter/TestColumnRangeFilter.html" title="class in org.apache.hadoop.hbase.filter">TestColumnRangeFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/model/TestColumnSchemaModel.html" title="class in org.apache.hadoop.hbase.rest.model">TestColumnSchemaModel</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestColumnSeeking.html" title="class in org.apache.hadoop.hbase.regionserver">TestColumnSeeking</a></li>
+<li><a href="org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCombinedBlockCache</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/TestCompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">TestCompactedHFilesDischarger</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/TestCompactedHFilesDischarger.ScanThread.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">TestCompactedHFilesDischarger.ScanThread</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestCompaction.html" title="class in org.apache.hadoop.hbase.regionserver">TestCompaction</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 4b15184..9b28b18 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -31307,6 +31307,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.html#testBlockedFlushesIncreaseMemstoreInSteadyState()">testBlockedFlushesIncreaseMemstoreInSteadyState()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestHeapMemoryManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testBlockEvictionAfterHBASE13082WithCompactionAndFlush()">testBlockEvictionAfterHBASE13082WithCompactionAndFlush()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html" title="class in org.apache.hadoop.hbase.client"><span class="strong">TestBlockEvictionFromClient</span></a> - Class in <a href="./org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#TestBlockEvictionFromClient()">TestBlockEvictionFromClient()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient</a></dt>
@@ -32534,6 +32536,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestColumnSeeking.html#TestColumnSeeking()">TestColumnSeeking()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestColumnSeeking.html" title="class in org.apache.hadoop.hbase.regionserver">TestColumnSeeking</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCombinedBlockCache</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/hfile/package-summary.html">org.apache.hadoop.hbase.io.hfile</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html#TestCombinedBlockCache()">TestCombinedBlockCache()</a></span> - Constructor for class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCombinedBlockCache</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html#testCombinedCacheStats()">testCombinedCacheStats()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCombinedBlockCache</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapreduce/TestTableMapReduceBase.html#testCombiner()">testCombiner()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="./org/apache/hadoop/hbase/mapreduce/TestTableMapReduceBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableMapReduceBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/zookeeper/TestZooKeeperMainServer.html#testCommandLineWorks()">testCommandLineWorks()</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="./org/apache/hadoop/hbase/zookeeper/TestZooKeeperMainServer.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZooKeeperMainServer</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html b/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
index 9217731..45c8e42 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
@@ -192,7 +192,7 @@ extends org.apache.hadoop.hbase.regionserver.HStore</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HStore</h3>
-<code>add, addChangedReaderObserver, areWritesEnabled, assertBulkLoadHFileOk, bulkLoadHFile, bulkLoadHFile, cancelRequestedCompaction, canSplit, close, closeAndArchiveCompactedFiles, compact, compact, compactRecentForTestingAssumingDefaultPolicy, createCacheConf, createFlushContext, createScanner, createStoreEngine, createWriterInTmp, createWriterInTmp, delete, deleteChangedReaderObserver, deregisterChildren, determineTTLFromFamily, flushCache, getBlockingFileCount, getBytesPerChecksum, getCacheConfig, getChecksumType, getCloseCheckInterval, getColumnFamilyName, getCompactedCellsCount, getCompactedCellsSize, getCompactionCheckMultiplier, getCompactionPressure, getCompactionProgress, getCompactPriority, getComparator, getCoprocessorHost, getDataBlockEncoder, getFamily, getFileSystem, getFlushableSize, getFlushedCellsCount, getFlushedCellsSize, getHRegion, getLastCompactSize, getMajorCompactedCellsCount, getMajorCompactedCellsSize, getMaxMemstoreTS, getMaxSequenceId, getMemstoreFlushS
 ize, getMemStoreSize, getOffPeakHours, getRegionFileSystem, getRegionInfo, getScanInfo, getScanner, getScanners, getSize, getSmallestReadPoint, getSnapshotSize, getSplitPoint, getStoreEngine, getStorefiles, getStorefilesCount, getStorefilesIndexSize, getStorefilesSize, getStoreFileTtl, getStoreHomedir, getStoreHomedir, getStoreSizeUncompressed, getTableName, getTotalStaticBloomSize, getTotalStaticIndexSize, hasReferences, hasTooManyStoreFiles, heapSize, isMajorCompaction, isPrimaryReplicaStore, needsCompaction, onConfigurationChange, refreshStoreFiles, refreshStoreFiles, registerChildren, replayCompactionMarker, requestCompaction, requestCompaction, requestCompaction, rollback, throttleCompaction, timeOfOldestEdit, toString, triggerMajorCompaction, updateColumnValue, upsert</code></li>
+<code>add, addChangedReaderObserver, areWritesEnabled, assertBulkLoadHFileOk, bulkLoadHFile, bulkLoadHFile, cancelRequestedCompaction, canSplit, close, closeAndArchiveCompactedFiles, compact, compact, compactRecentForTestingAssumingDefaultPolicy, createCacheConf, createFlushContext, createScanner, createStoreEngine, createWriterInTmp, createWriterInTmp, delete, deleteChangedReaderObserver, deregisterChildren, determineTTLFromFamily, flushCache, getBlockingFileCount, getBytesPerChecksum, getCacheConfig, getChecksumType, getCloseCheckInterval, getColumnFamilyName, getCompactedCellsCount, getCompactedCellsSize, getCompactionCheckMultiplier, getCompactionPressure, getCompactionProgress, getCompactPriority, getComparator, getCoprocessorHost, getDataBlockEncoder, getFamily, getFileSystem, getFlushableSize, getFlushedCellsCount, getFlushedCellsSize, getHRegion, getLastCompactSize, getMajorCompactedCellsCount, getMajorCompactedCellsSize, getMaxMemstoreTS, getMaxSequenceId, getMemstoreFlushS
 ize, getMemStoreSize, getOffPeakHours, getRegionFileSystem, getRegionInfo, getScanInfo, getScanner, getScanners, getScanners, getSize, getSmallestReadPoint, getSnapshotSize, getSplitPoint, getStoreEngine, getStorefiles, getStorefilesCount, getStorefilesIndexSize, getStorefilesSize, getStoreFileTtl, getStoreHomedir, getStoreHomedir, getStoreSizeUncompressed, getTableName, getTotalStaticBloomSize, getTotalStaticIndexSize, hasReferences, hasTooManyStoreFiles, heapSize, isMajorCompaction, isPrimaryReplicaStore, needsCompaction, onConfigurationChange, refreshStoreFiles, refreshStoreFiles, registerChildren, replayCompactionMarker, requestCompaction, requestCompaction, requestCompaction, rollback, throttleCompaction, timeOfOldestEdit, toString, triggerMajorCompaction, updateColumnValue, upsert</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/736088b3/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
index cc884a0..11e6925 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html
@@ -112,7 +112,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1385">TestBlockEvictionFromClient.CustomInnerRegionObserver</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1517">TestBlockEvictionFromClient.CustomInnerRegionObserver</a>
 extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 </li>
 </ul>
@@ -279,7 +279,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepTime</h4>
-<pre>static 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/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1386">sleepTime</a></pre>
+<pre>static 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/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1518">sleepTime</a></pre>
 </li>
 </ul>
 <a name="slowDownNext">
@@ -288,7 +288,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>slowDownNext</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1387">slowDownNext</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1519">slowDownNext</a></pre>
 </li>
 </ul>
 <a name="countOfNext">
@@ -297,7 +297,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>countOfNext</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1388">countOfNext</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1520">countOfNext</a></pre>
 </li>
 </ul>
 <a name="countOfGets">
@@ -306,7 +306,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>countOfGets</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1389">countOfGets</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1521">countOfGets</a></pre>
 </li>
 </ul>
 <a name="waitForGets">
@@ -315,7 +315,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForGets</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1390">waitForGets</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1522">waitForGets</a></pre>
 </li>
 </ul>
 <a name="throwException">
@@ -324,7 +324,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>throwException</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1391">throwException</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1523">throwException</a></pre>
 </li>
 </ul>
 <a name="cdl">
@@ -333,7 +333,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cdl</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1392">cdl</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1524">cdl</a></pre>
 </li>
 </ul>
 </li>
@@ -350,7 +350,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBlockEvictionFromClient.CustomInnerRegionObserver</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1385">TestBlockEvictionFromClient.CustomInnerRegionObserver</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1517">TestBlockEvictionFromClient.CustomInnerRegionObserver</a>()</pre>
 </li>
 </ul>
 </li>
@@ -367,7 +367,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>postScannerNext</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1396">postScannerNext</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1528">postScannerNext</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
                       org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;s,
                       <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.client.Result&gt;&nbsp;results,
                       int&nbsp;limit,
@@ -388,7 +388,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>postGetOp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1409">postGetOp</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1541">postGetOp</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
              org.apache.hadoop.hbase.client.Get&nbsp;get,
              <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;results)
                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>
@@ -407,7 +407,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getCdl</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1415">getCdl</a>()</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1547">getCdl</a>()</pre>
 </li>
 </ul>
 <a name="slowdownCode(org.apache.hadoop.hbase.coprocessor.ObserverContext, boolean)">
@@ -416,7 +416,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseRegionObserver</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>slowdownCode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1419">slowdownCode</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#line.1551">slowdownCode</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
                 boolean&nbsp;isGet)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
index a72d663..9390ce5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
@@ -113,7 +113,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1377">TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1509">TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserver.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.CustomInnerRegionObserver</a></pre>
 </li>
 </ul>
@@ -242,7 +242,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEviction
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html#line.1377">TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html#line.1509">TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper</a>()</pre>
 </li>
 </ul>
 </li>
@@ -259,7 +259,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEviction
 <ul class="blockListLast">
 <li class="blockList">
 <h4>postScannerOpen</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html#line.1379">postScannerOpen</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html#line.1511">postScannerOpen</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment&gt;&nbsp;e,
                                                                  org.apache.hadoop.hbase.client.Scan&nbsp;scan,
                                                                  org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;s)
                                                                    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>


[02/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 b2191eb..84acce9 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -69,15 +69,15 @@
 <a class="jxr_linenumber" name="59" href="#59">59</a>    requiredArguments = {
 <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">"deadServers"</span>, type = <span class="jxr_string">"Set&lt;ServerName&gt;"</span>),
-<a class="jxr_linenumber" name="63" href="#63">63</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"metaLocation"</span>, type = <span class="jxr_string">"ServerName"</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">"filter"</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">"catalogJanitorEnabled"</span>, type = <span class="jxr_string">"boolean"</span>),
-<a class="jxr_linenumber" name="68" href="#68">68</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="62" href="#62">62</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="63" href="#63">63</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="64" href="#64">64</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"filter"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="65" href="#65">65</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"catalogJanitorEnabled"</span>, type = <span class="jxr_string">"boolean"</span>),
+<a class="jxr_linenumber" name="66" href="#66">66</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"assignmentManager"</span>, type = <span class="jxr_string">"AssignmentManager"</span>),
+<a class="jxr_linenumber" name="67" href="#67">67</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"serverManager"</span>, type = <span class="jxr_string">"ServerManager"</span>),
+<a class="jxr_linenumber" name="68" href="#68">68</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"metaLocation"</span>, type = <span class="jxr_string">"ServerName"</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="70" href="#70">70</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="70" href="#70">70</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="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
 <a class="jxr_linenumber" name="73" href="#73">73</a>  {
@@ -118,125 +118,125 @@
 <a class="jxr_linenumber" name="108" href="#108">108</a>       <strong class="jxr_keyword">return</strong> m_master;
 <a class="jxr_linenumber" name="109" href="#109">109</a>     }
 <a class="jxr_linenumber" name="110" href="#110">110</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html">HMaster</a> m_master;
-<a class="jxr_linenumber" name="111" href="#111">111</a>     <em class="jxr_comment">// 24, 1</em>
-<a class="jxr_linenumber" name="112" href="#112">112</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setDeadServers(Set&lt;ServerName&gt; deadServers)
+<a class="jxr_linenumber" name="111" href="#111">111</a>     <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="112" href="#112">112</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="113" href="#113">113</a>     {
-<a class="jxr_linenumber" name="114" href="#114">114</a>       <em class="jxr_comment">// 24, 1</em>
-<a class="jxr_linenumber" name="115" href="#115">115</a>       m_deadServers = deadServers;
-<a class="jxr_linenumber" name="116" href="#116">116</a>       m_deadServers__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="114" href="#114">114</a>       <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="115" href="#115">115</a>       m_frags = frags;
+<a class="jxr_linenumber" name="116" href="#116">116</a>       m_frags__IsNotDefault = <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>     <strong class="jxr_keyword">public</strong> Set&lt;ServerName&gt; getDeadServers()
+<a class="jxr_linenumber" name="118" href="#118">118</a>     <strong class="jxr_keyword">public</strong> Map&lt;String,Integer&gt; getFrags()
 <a class="jxr_linenumber" name="119" href="#119">119</a>     {
-<a class="jxr_linenumber" name="120" href="#120">120</a>       <strong class="jxr_keyword">return</strong> m_deadServers;
+<a class="jxr_linenumber" name="120" href="#120">120</a>       <strong class="jxr_keyword">return</strong> m_frags;
 <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> Set&lt;ServerName&gt; m_deadServers;
-<a class="jxr_linenumber" name="123" href="#123">123</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getDeadServers__IsNotDefault()
+<a class="jxr_linenumber" name="122" href="#122">122</a>     <strong class="jxr_keyword">private</strong> Map&lt;String,Integer&gt; m_frags;
+<a class="jxr_linenumber" name="123" href="#123">123</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFrags__IsNotDefault()
 <a class="jxr_linenumber" name="124" href="#124">124</a>     {
-<a class="jxr_linenumber" name="125" href="#125">125</a>       <strong class="jxr_keyword">return</strong> m_deadServers__IsNotDefault;
+<a class="jxr_linenumber" name="125" href="#125">125</a>       <strong class="jxr_keyword">return</strong> m_frags__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_deadServers__IsNotDefault;
-<a class="jxr_linenumber" name="128" href="#128">128</a>     <em class="jxr_comment">// 22, 1</em>
-<a class="jxr_linenumber" name="129" href="#129">129</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setMetaLocation(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> metaLocation)
+<a class="jxr_linenumber" name="127" href="#127">127</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_frags__IsNotDefault;
+<a class="jxr_linenumber" name="128" href="#128">128</a>     <em class="jxr_comment">// 27, 1</em>
+<a class="jxr_linenumber" name="129" href="#129">129</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
 <a class="jxr_linenumber" name="130" href="#130">130</a>     {
-<a class="jxr_linenumber" name="131" href="#131">131</a>       <em class="jxr_comment">// 22, 1</em>
-<a class="jxr_linenumber" name="132" href="#132">132</a>       m_metaLocation = metaLocation;
-<a class="jxr_linenumber" name="133" href="#133">133</a>       m_metaLocation__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="131" href="#131">131</a>       <em class="jxr_comment">// 27, 1</em>
+<a class="jxr_linenumber" name="132" href="#132">132</a>       m_format = format;
+<a class="jxr_linenumber" name="133" href="#133">133</a>       m_format__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/ServerName.html">ServerName</a> getMetaLocation()
+<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">public</strong> String getFormat()
 <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_metaLocation;
+<a class="jxr_linenumber" name="137" href="#137">137</a>       <strong class="jxr_keyword">return</strong> m_format;
 <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/ServerName.html">ServerName</a> m_metaLocation;
-<a class="jxr_linenumber" name="140" href="#140">140</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getMetaLocation__IsNotDefault()
+<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">private</strong> String m_format;
+<a class="jxr_linenumber" name="140" href="#140">140</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__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_metaLocation__IsNotDefault;
+<a class="jxr_linenumber" name="142" href="#142">142</a>       <strong class="jxr_keyword">return</strong> m_format__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_metaLocation__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="144" href="#144">144</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_format__IsNotDefault;
+<a class="jxr_linenumber" name="145" href="#145">145</a>     <em class="jxr_comment">// 26, 1</em>
+<a class="jxr_linenumber" name="146" href="#146">146</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
 <a class="jxr_linenumber" name="147" href="#147">147</a>     {
-<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="148" href="#148">148</a>       <em class="jxr_comment">// 26, 1</em>
+<a class="jxr_linenumber" name="149" href="#149">149</a>       m_filter = filter;
+<a class="jxr_linenumber" name="150" href="#150">150</a>       m_filter__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> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> getAssignmentManager()
+<a class="jxr_linenumber" name="152" href="#152">152</a>     <strong class="jxr_keyword">public</strong> String getFilter()
 <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_assignmentManager;
+<a class="jxr_linenumber" name="154" href="#154">154</a>       <strong class="jxr_keyword">return</strong> m_filter;
 <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> <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="156" href="#156">156</a>     <strong class="jxr_keyword">private</strong> String m_filter;
+<a class="jxr_linenumber" name="157" href="#157">157</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFilter__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_assignmentManager__IsNotDefault;
+<a class="jxr_linenumber" name="159" href="#159">159</a>       <strong class="jxr_keyword">return</strong> m_filter__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_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="161" href="#161">161</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_filter__IsNotDefault;
+<a class="jxr_linenumber" name="162" href="#162">162</a>     <em class="jxr_comment">// 25, 1</em>
+<a class="jxr_linenumber" name="163" href="#163">163</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="164" href="#164">164</a>     {
-<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="165" href="#165">165</a>       <em class="jxr_comment">// 25, 1</em>
+<a class="jxr_linenumber" name="166" href="#166">166</a>       m_catalogJanitorEnabled = catalogJanitorEnabled;
+<a class="jxr_linenumber" name="167" href="#167">167</a>       m_catalogJanitorEnabled__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> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> getServerManager()
+<a class="jxr_linenumber" name="169" href="#169">169</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getCatalogJanitorEnabled()
 <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_serverManager;
+<a class="jxr_linenumber" name="171" href="#171">171</a>       <strong class="jxr_keyword">return</strong> m_catalogJanitorEnabled;
 <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> <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="173" href="#173">173</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_catalogJanitorEnabled;
+<a class="jxr_linenumber" name="174" href="#174">174</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getCatalogJanitorEnabled__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_serverManager__IsNotDefault;
+<a class="jxr_linenumber" name="176" href="#176">176</a>       <strong class="jxr_keyword">return</strong> m_catalogJanitorEnabled__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_serverManager__IsNotDefault;
-<a class="jxr_linenumber" name="179" href="#179">179</a>     <em class="jxr_comment">// 26, 1</em>
-<a class="jxr_linenumber" name="180" href="#180">180</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
+<a class="jxr_linenumber" name="178" href="#178">178</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_catalogJanitorEnabled__IsNotDefault;
+<a class="jxr_linenumber" name="179" href="#179">179</a>     <em class="jxr_comment">// 29, 1</em>
+<a class="jxr_linenumber" name="180" href="#180">180</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="181" href="#181">181</a>     {
-<a class="jxr_linenumber" name="182" href="#182">182</a>       <em class="jxr_comment">// 26, 1</em>
-<a class="jxr_linenumber" name="183" href="#183">183</a>       m_filter = filter;
-<a class="jxr_linenumber" name="184" href="#184">184</a>       m_filter__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="182" href="#182">182</a>       <em class="jxr_comment">// 29, 1</em>
+<a class="jxr_linenumber" name="183" href="#183">183</a>       m_assignmentManager = assignmentManager;
+<a class="jxr_linenumber" name="184" href="#184">184</a>       m_assignmentManager__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> String getFilter()
+<a class="jxr_linenumber" name="186" href="#186">186</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> getAssignmentManager()
 <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_filter;
+<a class="jxr_linenumber" name="188" href="#188">188</a>       <strong class="jxr_keyword">return</strong> m_assignmentManager;
 <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> String m_filter;
-<a class="jxr_linenumber" name="191" href="#191">191</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFilter__IsNotDefault()
+<a class="jxr_linenumber" name="190" href="#190">190</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="191" href="#191">191</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getAssignmentManager__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_filter__IsNotDefault;
+<a class="jxr_linenumber" name="193" href="#193">193</a>       <strong class="jxr_keyword">return</strong> m_assignmentManager__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_filter__IsNotDefault;
-<a class="jxr_linenumber" name="196" href="#196">196</a>     <em class="jxr_comment">// 25, 1</em>
-<a class="jxr_linenumber" name="197" href="#197">197</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="195" href="#195">195</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_assignmentManager__IsNotDefault;
+<a class="jxr_linenumber" name="196" href="#196">196</a>     <em class="jxr_comment">// 28, 1</em>
+<a class="jxr_linenumber" name="197" href="#197">197</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="198" href="#198">198</a>     {
-<a class="jxr_linenumber" name="199" href="#199">199</a>       <em class="jxr_comment">// 25, 1</em>
-<a class="jxr_linenumber" name="200" href="#200">200</a>       m_catalogJanitorEnabled = catalogJanitorEnabled;
-<a class="jxr_linenumber" name="201" href="#201">201</a>       m_catalogJanitorEnabled__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="199" href="#199">199</a>       <em class="jxr_comment">// 28, 1</em>
+<a class="jxr_linenumber" name="200" href="#200">200</a>       m_serverManager = serverManager;
+<a class="jxr_linenumber" name="201" href="#201">201</a>       m_serverManager__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> <strong class="jxr_keyword">boolean</strong> getCatalogJanitorEnabled()
+<a class="jxr_linenumber" name="203" href="#203">203</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> getServerManager()
 <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_catalogJanitorEnabled;
+<a class="jxr_linenumber" name="205" href="#205">205</a>       <strong class="jxr_keyword">return</strong> m_serverManager;
 <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> <strong class="jxr_keyword">boolean</strong> m_catalogJanitorEnabled;
-<a class="jxr_linenumber" name="208" href="#208">208</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getCatalogJanitorEnabled__IsNotDefault()
+<a class="jxr_linenumber" name="207" href="#207">207</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="208" href="#208">208</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getServerManager__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_catalogJanitorEnabled__IsNotDefault;
+<a class="jxr_linenumber" name="210" href="#210">210</a>       <strong class="jxr_keyword">return</strong> m_serverManager__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_catalogJanitorEnabled__IsNotDefault;
-<a class="jxr_linenumber" name="213" href="#213">213</a>     <em class="jxr_comment">// 27, 1</em>
-<a class="jxr_linenumber" name="214" href="#214">214</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
+<a class="jxr_linenumber" name="212" href="#212">212</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_serverManager__IsNotDefault;
+<a class="jxr_linenumber" name="213" href="#213">213</a>     <em class="jxr_comment">// 22, 1</em>
+<a class="jxr_linenumber" name="214" href="#214">214</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setMetaLocation(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> metaLocation)
 <a class="jxr_linenumber" name="215" href="#215">215</a>     {
-<a class="jxr_linenumber" name="216" href="#216">216</a>       <em class="jxr_comment">// 27, 1</em>
-<a class="jxr_linenumber" name="217" href="#217">217</a>       m_format = format;
-<a class="jxr_linenumber" name="218" href="#218">218</a>       m_format__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="216" href="#216">216</a>       <em class="jxr_comment">// 22, 1</em>
+<a class="jxr_linenumber" name="217" href="#217">217</a>       m_metaLocation = metaLocation;
+<a class="jxr_linenumber" name="218" href="#218">218</a>       m_metaLocation__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="219" href="#219">219</a>     }
-<a class="jxr_linenumber" name="220" href="#220">220</a>     <strong class="jxr_keyword">public</strong> String getFormat()
+<a class="jxr_linenumber" name="220" href="#220">220</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> getMetaLocation()
 <a class="jxr_linenumber" name="221" href="#221">221</a>     {
-<a class="jxr_linenumber" name="222" href="#222">222</a>       <strong class="jxr_keyword">return</strong> m_format;
+<a class="jxr_linenumber" name="222" href="#222">222</a>       <strong class="jxr_keyword">return</strong> m_metaLocation;
 <a class="jxr_linenumber" name="223" href="#223">223</a>     }
-<a class="jxr_linenumber" name="224" href="#224">224</a>     <strong class="jxr_keyword">private</strong> String m_format;
-<a class="jxr_linenumber" name="225" href="#225">225</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__IsNotDefault()
+<a class="jxr_linenumber" name="224" href="#224">224</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> m_metaLocation;
+<a class="jxr_linenumber" name="225" href="#225">225</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getMetaLocation__IsNotDefault()
 <a class="jxr_linenumber" name="226" href="#226">226</a>     {
-<a class="jxr_linenumber" name="227" href="#227">227</a>       <strong class="jxr_keyword">return</strong> m_format__IsNotDefault;
+<a class="jxr_linenumber" name="227" href="#227">227</a>       <strong class="jxr_keyword">return</strong> m_metaLocation__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_format__IsNotDefault;
+<a class="jxr_linenumber" name="229" href="#229">229</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_metaLocation__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="232" href="#232">232</a>     {
@@ -254,23 +254,23 @@
 <a class="jxr_linenumber" name="244" href="#244">244</a>       <strong class="jxr_keyword">return</strong> m_servers__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="247" href="#247">247</a>     <em class="jxr_comment">// 21, 1</em>
-<a class="jxr_linenumber" name="248" href="#248">248</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="247" href="#247">247</a>     <em class="jxr_comment">// 24, 1</em>
+<a class="jxr_linenumber" name="248" href="#248">248</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setDeadServers(Set&lt;ServerName&gt; deadServers)
 <a class="jxr_linenumber" name="249" href="#249">249</a>     {
-<a class="jxr_linenumber" name="250" href="#250">250</a>       <em class="jxr_comment">// 21, 1</em>
-<a class="jxr_linenumber" name="251" href="#251">251</a>       m_frags = frags;
-<a class="jxr_linenumber" name="252" href="#252">252</a>       m_frags__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="250" href="#250">250</a>       <em class="jxr_comment">// 24, 1</em>
+<a class="jxr_linenumber" name="251" href="#251">251</a>       m_deadServers = deadServers;
+<a class="jxr_linenumber" name="252" href="#252">252</a>       m_deadServers__IsNotDefault = <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>     <strong class="jxr_keyword">public</strong> Map&lt;String,Integer&gt; getFrags()
+<a class="jxr_linenumber" name="254" href="#254">254</a>     <strong class="jxr_keyword">public</strong> Set&lt;ServerName&gt; getDeadServers()
 <a class="jxr_linenumber" name="255" href="#255">255</a>     {
-<a class="jxr_linenumber" name="256" href="#256">256</a>       <strong class="jxr_keyword">return</strong> m_frags;
+<a class="jxr_linenumber" name="256" href="#256">256</a>       <strong class="jxr_keyword">return</strong> m_deadServers;
 <a class="jxr_linenumber" name="257" href="#257">257</a>     }
-<a class="jxr_linenumber" name="258" href="#258">258</a>     <strong class="jxr_keyword">private</strong> Map&lt;String,Integer&gt; m_frags;
-<a class="jxr_linenumber" name="259" href="#259">259</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFrags__IsNotDefault()
+<a class="jxr_linenumber" name="258" href="#258">258</a>     <strong class="jxr_keyword">private</strong> Set&lt;ServerName&gt; m_deadServers;
+<a class="jxr_linenumber" name="259" href="#259">259</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getDeadServers__IsNotDefault()
 <a class="jxr_linenumber" name="260" href="#260">260</a>     {
-<a class="jxr_linenumber" name="261" href="#261">261</a>       <strong class="jxr_keyword">return</strong> m_frags__IsNotDefault;
+<a class="jxr_linenumber" name="261" href="#261">261</a>       <strong class="jxr_keyword">return</strong> m_deadServers__IsNotDefault;
 <a class="jxr_linenumber" name="262" href="#262">262</a>     }
-<a class="jxr_linenumber" name="263" href="#263">263</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_frags__IsNotDefault;
+<a class="jxr_linenumber" name="263" href="#263">263</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_deadServers__IsNotDefault;
 <a class="jxr_linenumber" name="264" href="#264">264</a>   }
 <a class="jxr_linenumber" name="265" href="#265">265</a>   @Override
 <a class="jxr_linenumber" name="266" href="#266">266</a>   <strong class="jxr_keyword">protected</strong> org.jamon.AbstractTemplateProxy.ImplData makeImplData()
@@ -282,52 +282,52 @@
 <a class="jxr_linenumber" name="272" href="#272">272</a>     <strong class="jxr_keyword">return</strong> (ImplData) <strong class="jxr_keyword">super</strong>.getImplData();
 <a class="jxr_linenumber" name="273" href="#273">273</a>   }
 <a class="jxr_linenumber" name="274" href="#274">274</a>   
-<a class="jxr_linenumber" name="275" href="#275">275</a>   <strong class="jxr_keyword">protected</strong> Set&lt;ServerName&gt; deadServers;
-<a class="jxr_linenumber" name="276" href="#276">276</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="275" href="#275">275</a>   <strong class="jxr_keyword">protected</strong> Map&lt;String,Integer&gt; frags;
+<a class="jxr_linenumber" name="276" href="#276">276</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="277" href="#277">277</a>   {
-<a class="jxr_linenumber" name="278" href="#278">278</a>     (getImplData()).setDeadServers(p_deadServers);
+<a class="jxr_linenumber" name="278" href="#278">278</a>     (getImplData()).setFrags(p_frags);
 <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/ServerName.html">ServerName</a> metaLocation;
-<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 setMetaLocation(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> p_metaLocation)
+<a class="jxr_linenumber" name="282" href="#282">282</a>   <strong class="jxr_keyword">protected</strong> String format;
+<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 setFormat(String p_format)
 <a class="jxr_linenumber" name="284" href="#284">284</a>   {
-<a class="jxr_linenumber" name="285" href="#285">285</a>     (getImplData()).setMetaLocation(p_metaLocation);
+<a class="jxr_linenumber" name="285" href="#285">285</a>     (getImplData()).setFormat(p_format);
 <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> <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="289" href="#289">289</a>   <strong class="jxr_keyword">protected</strong> String filter;
+<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 setFilter(String p_filter)
 <a class="jxr_linenumber" name="291" href="#291">291</a>   {
-<a class="jxr_linenumber" name="292" href="#292">292</a>     (getImplData()).setAssignmentManager(p_assignmentManager);
+<a class="jxr_linenumber" name="292" href="#292">292</a>     (getImplData()).setFilter(p_filter);
 <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> <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="296" href="#296">296</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> catalogJanitorEnabled;
+<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 setCatalogJanitorEnabled(<strong class="jxr_keyword">boolean</strong> p_catalogJanitorEnabled)
 <a class="jxr_linenumber" name="298" href="#298">298</a>   {
-<a class="jxr_linenumber" name="299" href="#299">299</a>     (getImplData()).setServerManager(p_serverManager);
+<a class="jxr_linenumber" name="299" href="#299">299</a>     (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);
 <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> String filter;
-<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 setFilter(String p_filter)
+<a class="jxr_linenumber" name="303" href="#303">303</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> assignmentManager;
+<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 setAssignmentManager(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> p_assignmentManager)
 <a class="jxr_linenumber" name="305" href="#305">305</a>   {
-<a class="jxr_linenumber" name="306" href="#306">306</a>     (getImplData()).setFilter(p_filter);
+<a class="jxr_linenumber" name="306" href="#306">306</a>     (getImplData()).setAssignmentManager(p_assignmentManager);
 <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> <strong class="jxr_keyword">boolean</strong> catalogJanitorEnabled;
-<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 setCatalogJanitorEnabled(<strong class="jxr_keyword">boolean</strong> p_catalogJanitorEnabled)
+<a class="jxr_linenumber" name="310" href="#310">310</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> serverManager;
+<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 setServerManager(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> p_serverManager)
 <a class="jxr_linenumber" name="312" href="#312">312</a>   {
-<a class="jxr_linenumber" name="313" href="#313">313</a>     (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);
+<a class="jxr_linenumber" name="313" href="#313">313</a>     (getImplData()).setServerManager(p_serverManager);
 <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>   
-<a class="jxr_linenumber" name="317" href="#317">317</a>   <strong class="jxr_keyword">protected</strong> String format;
-<a class="jxr_linenumber" name="318" href="#318">318</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="317" href="#317">317</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> metaLocation;
+<a class="jxr_linenumber" name="318" href="#318">318</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> p_metaLocation)
 <a class="jxr_linenumber" name="319" href="#319">319</a>   {
-<a class="jxr_linenumber" name="320" href="#320">320</a>     (getImplData()).setFormat(p_format);
+<a class="jxr_linenumber" name="320" href="#320">320</a>     (getImplData()).setMetaLocation(p_metaLocation);
 <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>   
@@ -338,10 +338,10 @@
 <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>   
-<a class="jxr_linenumber" name="331" href="#331">331</a>   <strong class="jxr_keyword">protected</strong> Map&lt;String,Integer&gt; frags;
-<a class="jxr_linenumber" name="332" href="#332">332</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="331" href="#331">331</a>   <strong class="jxr_keyword">protected</strong> Set&lt;ServerName&gt; deadServers;
+<a class="jxr_linenumber" name="332" href="#332">332</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="333" href="#333">333</a>   {
-<a class="jxr_linenumber" name="334" href="#334">334</a>     (getImplData()).setFrags(p_frags);
+<a class="jxr_linenumber" name="334" href="#334">334</a>     (getImplData()).setDeadServers(p_deadServers);
 <a class="jxr_linenumber" name="335" href="#335">335</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="336" href="#336">336</a>   }
 <a class="jxr_linenumber" name="337" href="#337">337</a>   

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 dcc4118..ced1f4c 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -70,15 +70,15 @@
 <a class="jxr_linenumber" name="60" href="#60">60</a>  
 <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> Set&lt;ServerName&gt; deadServers;
-<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/ServerName.html">ServerName</a> metaLocation;
-<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 filter;
-<a class="jxr_linenumber" name="68" href="#68">68</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="69" href="#69">69</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
+<a class="jxr_linenumber" name="63" href="#63">63</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;String,Integer&gt; frags;
+<a class="jxr_linenumber" name="64" href="#64">64</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
+<a class="jxr_linenumber" name="65" href="#65">65</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String filter;
+<a class="jxr_linenumber" name="66" href="#66">66</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="67" href="#67">67</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="68" href="#68">68</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="69" href="#69">69</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="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="71" href="#71">71</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;String,Integer&gt; frags;
+<a class="jxr_linenumber" name="71" href="#71">71</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Set&lt;ServerName&gt; deadServers;
 <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>    
 <a class="jxr_linenumber" name="74" href="#74">74</a>    <strong class="jxr_keyword">public</strong> String formatZKString() {
@@ -108,41 +108,41 @@
 <a class="jxr_linenumber" name="98" href="#98">98</a>  
 <a class="jxr_linenumber" name="99" href="#99">99</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)
 <a class="jxr_linenumber" name="100" href="#100">100</a>   {
-<a class="jxr_linenumber" name="101" href="#101">101</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getDeadServers__IsNotDefault())
+<a class="jxr_linenumber" name="101" href="#101">101</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFrags__IsNotDefault())
 <a class="jxr_linenumber" name="102" href="#102">102</a>     {
-<a class="jxr_linenumber" name="103" href="#103">103</a>       p_implData.setDeadServers(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="103" href="#103">103</a>       p_implData.setFrags(<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.getMetaLocation__IsNotDefault())
+<a class="jxr_linenumber" name="105" href="#105">105</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFormat__IsNotDefault())
 <a class="jxr_linenumber" name="106" href="#106">106</a>     {
-<a class="jxr_linenumber" name="107" href="#107">107</a>       p_implData.setMetaLocation(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="107" href="#107">107</a>       p_implData.setFormat(<span class="jxr_string">"html"</span>);
 <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.getAssignmentManager__IsNotDefault())
+<a class="jxr_linenumber" name="109" href="#109">109</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFilter__IsNotDefault())
 <a class="jxr_linenumber" name="110" href="#110">110</a>     {
-<a class="jxr_linenumber" name="111" href="#111">111</a>       p_implData.setAssignmentManager(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="111" href="#111">111</a>       p_implData.setFilter(<span class="jxr_string">"general"</span>);
 <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.getServerManager__IsNotDefault())
+<a class="jxr_linenumber" name="113" href="#113">113</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getCatalogJanitorEnabled__IsNotDefault())
 <a class="jxr_linenumber" name="114" href="#114">114</a>     {
-<a class="jxr_linenumber" name="115" href="#115">115</a>       p_implData.setServerManager(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="115" href="#115">115</a>       p_implData.setCatalogJanitorEnabled(<strong class="jxr_keyword">true</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.getFilter__IsNotDefault())
+<a class="jxr_linenumber" name="117" href="#117">117</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getAssignmentManager__IsNotDefault())
 <a class="jxr_linenumber" name="118" href="#118">118</a>     {
-<a class="jxr_linenumber" name="119" href="#119">119</a>       p_implData.setFilter(<span class="jxr_string">"general"</span>);
+<a class="jxr_linenumber" name="119" href="#119">119</a>       p_implData.setAssignmentManager(<strong class="jxr_keyword">null</strong>);
 <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.getCatalogJanitorEnabled__IsNotDefault())
+<a class="jxr_linenumber" name="121" href="#121">121</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getServerManager__IsNotDefault())
 <a class="jxr_linenumber" name="122" href="#122">122</a>     {
-<a class="jxr_linenumber" name="123" href="#123">123</a>       p_implData.setCatalogJanitorEnabled(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="123" href="#123">123</a>       p_implData.setServerManager(<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.getFormat__IsNotDefault())
+<a class="jxr_linenumber" name="125" href="#125">125</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getMetaLocation__IsNotDefault())
 <a class="jxr_linenumber" name="126" href="#126">126</a>     {
-<a class="jxr_linenumber" name="127" href="#127">127</a>       p_implData.setFormat(<span class="jxr_string">"html"</span>);
+<a class="jxr_linenumber" name="127" href="#127">127</a>       p_implData.setMetaLocation(<strong class="jxr_keyword">null</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="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="132" href="#132">132</a>     }
-<a class="jxr_linenumber" name="133" href="#133">133</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFrags__IsNotDefault())
+<a class="jxr_linenumber" name="133" href="#133">133</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getDeadServers__IsNotDefault())
 <a class="jxr_linenumber" name="134" href="#134">134</a>     {
-<a class="jxr_linenumber" name="135" href="#135">135</a>       p_implData.setFrags(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="135" href="#135">135</a>       p_implData.setDeadServers(<strong class="jxr_keyword">null</strong>);
 <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> p_implData;
 <a class="jxr_linenumber" name="138" href="#138">138</a>   }
@@ -150,15 +150,15 @@
 <a class="jxr_linenumber" name="140" href="#140">140</a>   {
 <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>     deadServers = p_implData.getDeadServers();
-<a class="jxr_linenumber" name="144" href="#144">144</a>     metaLocation = p_implData.getMetaLocation();
-<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>     filter = p_implData.getFilter();
-<a class="jxr_linenumber" name="148" href="#148">148</a>     catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();
-<a class="jxr_linenumber" name="149" href="#149">149</a>     format = p_implData.getFormat();
+<a class="jxr_linenumber" name="143" href="#143">143</a>     frags = p_implData.getFrags();
+<a class="jxr_linenumber" name="144" href="#144">144</a>     format = p_implData.getFormat();
+<a class="jxr_linenumber" name="145" href="#145">145</a>     filter = p_implData.getFilter();
+<a class="jxr_linenumber" name="146" href="#146">146</a>     catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();
+<a class="jxr_linenumber" name="147" href="#147">147</a>     assignmentManager = p_implData.getAssignmentManager();
+<a class="jxr_linenumber" name="148" href="#148">148</a>     serverManager = p_implData.getServerManager();
+<a class="jxr_linenumber" name="149" href="#149">149</a>     metaLocation = p_implData.getMetaLocation();
 <a class="jxr_linenumber" name="150" href="#150">150</a>     servers = p_implData.getServers();
-<a class="jxr_linenumber" name="151" href="#151">151</a>     frags = p_implData.getFrags();
+<a class="jxr_linenumber" name="151" href="#151">151</a>     deadServers = p_implData.getDeadServers();
 <a class="jxr_linenumber" name="152" href="#152">152</a>   }
 <a class="jxr_linenumber" name="153" href="#153">153</a>   
 <a class="jxr_linenumber" name="154" href="#154">154</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)
@@ -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/736088b3/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..eca9f1c 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="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="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">"bcn"</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">"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,74 +79,74 @@
 <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">// 23, 1</em>
+<a class="jxr_linenumber" name="90" href="#90">90</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setBcn(String bcn)
 <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">// 23, 1</em>
+<a class="jxr_linenumber" name="93" href="#93">93</a>        m_bcn = bcn;
+<a class="jxr_linenumber" name="94" href="#94">94</a>        m_bcn__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 getBcn()
 <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_bcn;
 <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_bcn;
+<a class="jxr_linenumber" name="101" href="#101">101</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getBcn__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_bcn__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="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="105" href="#105">105</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_bcn__IsNotDefault;
+<a class="jxr_linenumber" name="106" href="#106">106</a>     <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="107" href="#107">107</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
 <a class="jxr_linenumber" name="108" href="#108">108</a>     {
-<a class="jxr_linenumber" name="109" href="#109">109</a>       <em class="jxr_comment">// 23, 1</em>
-<a class="jxr_linenumber" name="110" href="#110">110</a>       m_bcn = bcn;
-<a class="jxr_linenumber" name="111" href="#111">111</a>       m_bcn__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="109" href="#109">109</a>       <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="110" href="#110">110</a>       m_filter = filter;
+<a class="jxr_linenumber" name="111" href="#111">111</a>       m_filter__IsNotDefault = <strong class="jxr_keyword">true</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">public</strong> String getBcn()
+<a class="jxr_linenumber" name="113" href="#113">113</a>     <strong class="jxr_keyword">public</strong> String getFilter()
 <a class="jxr_linenumber" name="114" href="#114">114</a>     {
-<a class="jxr_linenumber" name="115" href="#115">115</a>       <strong class="jxr_keyword">return</strong> m_bcn;
+<a class="jxr_linenumber" name="115" href="#115">115</a>       <strong class="jxr_keyword">return</strong> m_filter;
 <a class="jxr_linenumber" name="116" href="#116">116</a>     }
-<a class="jxr_linenumber" name="117" href="#117">117</a>     <strong class="jxr_keyword">private</strong> String m_bcn;
-<a class="jxr_linenumber" name="118" href="#118">118</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getBcn__IsNotDefault()
+<a class="jxr_linenumber" name="117" href="#117">117</a>     <strong class="jxr_keyword">private</strong> String m_filter;
+<a class="jxr_linenumber" name="118" href="#118">118</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFilter__IsNotDefault()
 <a class="jxr_linenumber" name="119" href="#119">119</a>     {
-<a class="jxr_linenumber" name="120" href="#120">120</a>       <strong class="jxr_keyword">return</strong> m_bcn__IsNotDefault;
+<a class="jxr_linenumber" name="120" href="#120">120</a>       <strong class="jxr_keyword">return</strong> m_filter__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="122" href="#122">122</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_filter__IsNotDefault;
+<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,31 +158,31 @@
 <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 bcn;
+<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 setBcn(String p_bcn)
 <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()).setBcn(p_bcn);
 <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>   
-<a class="jxr_linenumber" name="165" href="#165">165</a>   <strong class="jxr_keyword">protected</strong> String bcn;
-<a class="jxr_linenumber" name="166" href="#166">166</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)
+<a class="jxr_linenumber" name="165" href="#165">165</a>   <strong class="jxr_keyword">protected</strong> String filter;
+<a class="jxr_linenumber" name="166" href="#166">166</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="167" href="#167">167</a>   {
-<a class="jxr_linenumber" name="168" href="#168">168</a>     (getImplData()).setBcn(p_bcn);
+<a class="jxr_linenumber" name="168" href="#168">168</a>     (getImplData()).setFilter(p_filter);
 <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>   


[40/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/MobCompactionStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MobCompactionStoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MobCompactionStoreScanner.html
index e0fe986..57fea97 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MobCompactionStoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MobCompactionStoreScanner.html
@@ -163,7 +163,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanne
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apa
 che/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScan
 ner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../.
 ./../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hado
 op/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushedStoreFiles">flushedStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT"
 >LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.
 html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
 </ul>
 </li>
 </ul>
@@ -217,7 +217,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanne
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek()">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkResetHeap()">checkResetHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkScanOrder(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.CellComparator)">checkScanOrder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../.
 ./../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScannersNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List,%20org.apache.hadoop.hbase.regionserver.ScannerContext)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#nullifyCurrentHeap()">nullifyCurrentHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/apache/hadoop/hbase
 /regionserver/StoreScanner.html#reseek(org.apache.hadoop.hbase.Cell)">reseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetKVHeap(java.util.List,%20org.apache.hadoop.hbase.CellComparator)">resetKVHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seek(org.apache.hadoop.hbase.Cell)">seek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekAsDirection(org.apache.hadoop.hbase.Cell)">seekAsDirection</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekScanners(java.util.List,%20org.apache.hadoop.hbase.Cell,%20boolean,%20boolean)">seekScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekToNextRow(org.apache.hadoop.hbase.Cell)">seekToNextRow</a>, <
 a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">selectScannersFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders()">updateReaders</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#addCurrentScanners(java.util.List)">addCurrentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkFlushed()">checkFlushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek(boolean)">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkScanOrder(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.CellComparator)">checkScanOrder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScannersNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List,%20org.apache.hadoop.hbase.regionserver.ScannerContext)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/ap
 ache/hadoop/hbase/regionserver/StoreScanner.html#reseek(org.apache.hadoop.hbase.Cell)">reseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetKVHeap(java.util.List,%20org.apache.hadoop.hbase.CellComparator)">resetKVHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seek(org.apache.hadoop.hbase.Cell)">seek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekAsDirection(org.apache.hadoop.hbase.Cell)">seekAsDirection</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekScanners(java.util.List,%20org.apache.hadoop.hbase.Cell,%20boolean,%20boolean)">seekScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekToNextRow(org.apache.hadoop.hbase.Cell)">see
 kToNextRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">selectScannersFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders(java.util.List)">updateReaders</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
index 8954896..6a83f3e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
@@ -174,7 +174,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanne
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apa
 che/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScan
 ner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../.
 ./../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hado
 op/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushedStoreFiles">flushedStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT"
 >LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.
 html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
 </ul>
 </li>
 </ul>
@@ -224,7 +224,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanne
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek()">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkResetHeap()">checkResetHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkScanOrder(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.CellComparator)">checkScanOrder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../.
 ./../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScannersNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#nullifyCurrentHeap()">nullifyCurrentHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#reseek(org.apache.hadoop.hbase.Cell)">reseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#reset
 KVHeap(java.util.List,%20org.apache.hadoop.hbase.CellComparator)">resetKVHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seek(org.apache.hadoop.hbase.Cell)">seek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekAsDirection(org.apache.hadoop.hbase.Cell)">seekAsDirection</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekScanners(java.util.List,%20org.apache.hadoop.hbase.Cell,%20boolean,%20boolean)">seekScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekToNextRow(org.apache.hadoop.hbase.Cell)">seekToNextRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">selectScannersFrom</a>, <a href="../../../../../org/
 apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders()">updateReaders</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#addCurrentScanners(java.util.List)">addCurrentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkFlushed()">checkFlushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek(boolean)">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkScanOrder(org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.Cell,%20org.apache.hadoop.hbase.CellComparator)">checkScanOrder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScannersNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#reseek(org.apache.hadoop.hbase.Cell)">reseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreS
 canner.html#resetKVHeap(java.util.List,%20org.apache.hadoop.hbase.CellComparator)">resetKVHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seek(org.apache.hadoop.hbase.Cell)">seek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekAsDirection(org.apache.hadoop.hbase.Cell)">seekAsDirection</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekScanners(java.util.List,%20org.apache.hadoop.hbase.Cell,%20boolean,%20boolean)">seekScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekToNextRow(org.apache.hadoop.hbase.Cell)">seekToNextRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">selectScannersFrom</a>, <a href="..
 /../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders(java.util.List)">updateReaders</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
index 9425e54..7cf842d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
@@ -179,7 +179,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedSto
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apa
 che/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScan
 ner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../.
 ./../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hado
 op/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushedStoreFiles">flushedStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT"
 >LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.
 html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
 </ul>
 </li>
 </ul>
@@ -236,7 +236,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedSto
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek()">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkResetHeap()">checkResetHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScanne
 rsNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#nullifyCurrentHeap()">nullifyCurrentHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">selectScannersFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../../org/apache/hado
 op/hbase/regionserver/StoreScanner.html#updateReaders()">updateReaders</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#addCurrentScanners(java.util.List)">addCurrentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkFlushed()">checkFlushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek(boolean)">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey
 ()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScannersNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">selectScannersFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../.
 ./org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders(java.util.List)">updateReaders</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
index 73a33ce..4102fa4 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
@@ -156,7 +156,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apa
 che/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScan
 ner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../.
 ./../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cacheBlocks">cacheBlocks</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#cellsPerHeartbeatCheck">cellsPerHeartbeatCheck</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#closing">closing</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#columns">columns</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#countPerRow">countPerRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#executor">executor</a>, <a href="../../../../../org/apache/hado
 op/hbase/regionserver/StoreScanner.html#explicitColumnQuery">explicitColumnQuery</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushed">flushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushedStoreFiles">flushedStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#get">get</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heapsForDelayedClose">heapsForDelayedClose</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lastTop">lastTop</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT"
 >LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#lazySeekEnabledGlobally">lazySeekEnabledGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#matcher">matcher</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#maxRowSize">maxRowSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#minVersions">minVersions</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#now">now</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#oldestUnexpiredTS">oldestUnexpiredTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeekEnabled">parallelSeekEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.
 html#scan">scan</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeLimit">storeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#storeOffset">storeOffset</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#useRowColBloom">useRowColBloom</a></code></li>
 </ul>
 </li>
 </ul>
@@ -271,7 +271,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek()">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkResetHeap()">checkResetHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScanne
 rsNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List,%20org.apache.hadoop.hbase.regionserver.ScannerContext)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#nullifyCurrentHeap()">nullifyCurrentHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">
 selectScannersFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders()">updateReaders</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#addCurrentScanners(java.util.List)">addCurrentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkFlushed()">checkFlushed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek(boolean)">checkReseek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#enableLazySeekGlobally(boolean)">enableLazySeekGlobally</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getAllScannersForTesting()">getAllScannersForTesting</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned()">getEstimatedNumberOfKvsScanned</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey
 ()">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getScannersNoCompaction()">getScannersNoCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getSequenceID()">getSequenceID</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next()">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#next(java.util.List,%20org.apache.hadoop.hbase.regionserver.ScannerContext)">next</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek()">peek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetScannerStack(org.apache.hadoop.hbase.Cell)">resetScannerStack</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(
 java.util.List)">selectScannersFrom</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#shipped()">shipped</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders(java.util.List)">updateReaders</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner">
@@ -528,7 +528,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>backwardSeek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html#line.131">backwardSeek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html#line.132">backwardSeek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#backwardSeek(org.apache.hadoop.hbase.Cell)">KeyValueScanner</a></code></strong></div>
 <div class="block">Seek the scanner at or before the row of specified Cell, it firstly


[36/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
index 70b1278..357a2fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
@@ -404,10 +404,14 @@
 </tr>
 <tbody>
 <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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html?is-external=true" title="class or interface in java.util">PriorityQueue</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><span class="strong">KeyValueHeap.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#heap">heap</a></strong></code>&nbsp;</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/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><span class="strong">KeyValueHeap.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#scannersForDelayedClose">scannersForDelayedClose</a></strong></code>&nbsp;</td>
 </tr>
@@ -524,6 +528,35 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><span class="strong">Store.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><span class="strong">DefaultMemStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultMemStore.html#getScanners(long)">getScanners</a></strong>(long&nbsp;readPt)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -610,66 +643,70 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#addCurrentScanners(java.util.List)">addCurrentScanners</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></td>
 <td class="colLast"><span class="strong">HRegion.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#getScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.List,%20boolean)">getScanner</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners,
                     boolean&nbsp;copyCellsFromSharedMem)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">HRegion.RegionScannerImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#initializeKVHeap(java.util.List,%20java.util.List,%20org.apache.hadoop.hbase.regionserver.HRegion)">initializeKVHeap</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">HRegion.RegionScannerImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#initializeKVHeap(java.util.List,%20java.util.List,%20org.apache.hadoop.hbase.regionserver.HRegion)">initializeKVHeap</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">ReversedRegionScannerImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html#initializeKVHeap(java.util.List,%20java.util.List,%20org.apache.hadoop.hbase.regionserver.HRegion)">initializeKVHeap</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">ReversedRegionScannerImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html#initializeKVHeap(java.util.List,%20java.util.List,%20org.apache.hadoop.hbase.regionserver.HRegion)">initializeKVHeap</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></td>
 <td class="colLast"><span class="strong">HRegion.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#instantiateRegionScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.List,%20boolean)">instantiateRegionScanner</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners,
                                                 boolean&nbsp;copyCellsFromSharedMem)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeek(java.util.List,%20org.apache.hadoop.hbase.Cell)">parallelSeek</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                         <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)</code>
 <div class="block">Seek storefiles in parallel to optimize IO latency as much as possible</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">ReversedStoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html#resetKVHeap(java.util.List,%20org.apache.hadoop.hbase.CellComparator)">resetKVHeap</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                       <a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetKVHeap(java.util.List,%20org.apache.hadoop.hbase.CellComparator)">resetKVHeap</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                       <a href="../../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">ReversedStoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html#seekScanners(java.util.List,%20org.apache.hadoop.hbase.Cell,%20boolean,%20boolean)">seekScanners</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                         <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekKey,
                         boolean&nbsp;isLazy,
                         boolean&nbsp;isParallelSeek)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seekScanners(java.util.List,%20org.apache.hadoop.hbase.Cell,%20boolean,%20boolean)">seekScanners</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                         <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekKey,
@@ -678,7 +715,7 @@
 <div class="block">Seek the specified scanners with the given key</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/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#selectScannersFrom(java.util.List)">selectScannersFrom</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;allScanners)</code>
 <div class="block">Filters the given list of scanners using Bloom filter, time range, and

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ScanQueryMatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ScanQueryMatcher.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ScanQueryMatcher.html
index f2c76c8..6dfac9b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ScanQueryMatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ScanQueryMatcher.html
@@ -140,6 +140,35 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><span class="strong">Store.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static <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/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StoreFileScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#getScannersForStoreFiles(java.util.Collection,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20long)">getScannersForStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                                                 boolean&nbsp;cacheBlocks,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/StoreFile.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/StoreFile.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/StoreFile.html
index 157ce7a..b1c371b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/StoreFile.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/StoreFile.html
@@ -497,43 +497,47 @@
 </td>
 </tr>
 <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
+<td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushedStoreFiles">flushedStoreFiles</a></strong></code>&nbsp;</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.CompactionOrFlushMergeCopy.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html#l0Results">l0Results</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>com.google.common.collect.ImmutableList&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.State.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.State.html#level0Files">level0Files</a></strong></code>
 <div class="block">Level 0.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.CompactionOrFlushMergeCopy.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html#level0Files">level0Files</a></strong></code>&nbsp;</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/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.CompactionOrFlushMergeCopy.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html#results">results</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StoreFile.Comparators.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#SEQ_ID">SEQ_ID</a></strong></code>
 <div class="block">Comparator that compares based on the Sequence Ids of the
  the StoreFiles.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private com.google.common.collect.ImmutableList&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">DefaultStoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreFileManager.html#storefiles">storefiles</a></strong></code>
 <div class="block">List of store files inside this store.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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;com.google.common.collect.ImmutableList&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.State.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.State.html#stripeFiles">stripeFiles</a></strong></code>
 <div class="block">Files by stripe.</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/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.CompactionOrFlushMergeCopy.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html#stripeFiles">stripeFiles</a></strong></code>&nbsp;</td>
 </tr>
@@ -1075,6 +1079,35 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
+<td class="colLast"><span class="strong">Store.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
+                      boolean&nbsp;cacheBlocks,
+                      boolean&nbsp;isGet,
+                      boolean&nbsp;usePread,
+                      boolean&nbsp;isCompaction,
+                      <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a>&nbsp;matcher,
+                      byte[]&nbsp;startRow,
+                      byte[]&nbsp;stopRow,
+                      long&nbsp;readPt,
+                      boolean&nbsp;includeMemstoreScanner)</code>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>static <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/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StoreFileScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#getScannersForStoreFiles(java.util.Collection,%20boolean,%20boolean,%20boolean,%20boolean,%20long)">getScannersForStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                                                 boolean&nbsp;cacheBlocks,
@@ -1236,6 +1269,10 @@
 <td class="colLast"><span class="strong">StoreEngine.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html#needsCompaction(java.util.List)">needsCompaction</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacting)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#notifyChangedReadersObservers(java.util.List)">notifyChangedReadersObservers</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <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#postCompactSelection(org.apache.hadoop.hbase.regionserver.Store,%20com.google.common.collect.ImmutableList,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">postCompactSelection</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
                                         com.google.common.collect.ImmutableList&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;selected,
@@ -1244,7 +1281,7 @@
  candidates.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">RegionCoprocessorHost.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#preCompactSelection(org.apache.hadoop.hbase.regionserver.Store,%20java.util.List,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">preCompactSelection</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
                                       <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;candidates,
@@ -1253,85 +1290,85 @@
  available candidates.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">DefaultStoreEngine.DefaultCompactionContext.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreEngine.DefaultCompactionContext.html#preSelect(java.util.List)">preSelect</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacting)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreEngine.StripeCompaction.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreEngine.StripeCompaction.html#preSelect(java.util.List)">preSelect</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacting)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.CompactionOrFlushMergeCopy.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html#processNewCandidateStripes(java.util.TreeMap)">processNewCandidateStripes</a></strong>(<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="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;newStripes)</code>
 <div class="block">See <a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html#addCompactionResults(java.util.Collection,%20java.util.Collection)"><code>StripeStoreFileManager.addCompactionResults(Collection, Collection)</code></a> - updates the stripe list with
  new candidate stripes/removes old stripes; produces new set of stripe end rows.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html#removeCompactedFiles(java.util.Collection)">removeCompactedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#removeCompactedFiles(java.util.Collection)">removeCompactedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">DefaultStoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreFileManager.html#removeCompactedFiles(java.util.Collection)">removeCompactedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;removedCompactedfiles)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">StoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFileManager.html#removeCompactedFiles(java.util.Collection)">removeCompactedFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles)</code>
 <div class="block">Remove the compacted files</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HRegionFileSystem.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#removeStoreFiles(java.lang.String,%20java.util.Collection)">removeStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                                 <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;storeFiles)</code>
 <div class="block">Closes and archives the specified store files from the specified family.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles,
                                   <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles,
                                   <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">DefaultStoreEngine.DefaultCompactionContext.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreEngine.DefaultCompactionContext.html#select(java.util.List,%20boolean,%20boolean,%20boolean)">select</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacting,
             boolean&nbsp;isUserCompaction,
             boolean&nbsp;mayUseOffPeak,
             boolean&nbsp;forceMajor)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">StripeStoreEngine.StripeCompaction.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreEngine.StripeCompaction.html#select(java.util.List,%20boolean,%20boolean,%20boolean)">select</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacting,
             boolean&nbsp;isUserCompaction,
             boolean&nbsp;mayUseOffPeak,
             boolean&nbsp;forceMajor)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">DefaultStoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreFileManager.html#sortAndSetStoreFiles(java.util.List)">sortAndSetStoreFiles</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;storeFiles)</code>&nbsp;</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">DefaultStoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreFileManager.html#sortCompactedfiles(java.util.List)">sortCompactedfiles</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;storefiles)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<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;</code></td>
 <td class="colLast"><span class="strong">SplitTransactionImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SplitTransactionImpl.html#splitStoreFiles(java.util.Map)">splitStoreFiles</a></strong>(<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;byte[],<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&gt;&nbsp;hstoreFilesToSplit)</code>
 <div class="block">Creates reference files for top and bottom half of the</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StripeStoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html#updateCandidateFilesForRowKeyBefore(java.util.Iterator,%20org.apache.hadoop.hbase.KeyValue,%20org.apache.hadoop.hbase.Cell)">updateCandidateFilesForRowKeyBefore</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;candidateFiles,
                                                                       <a href="../../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;targetKey,
@@ -1341,13 +1378,13 @@
  for details on this methods.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">DefaultStoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultStoreFileManager.html#updateCandidateFilesForRowKeyBefore(java.util.Iterator,%20org.apache.hadoop.hbase.KeyValue,%20org.apache.hadoop.hbase.Cell)">updateCandidateFilesForRowKeyBefore</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;candidateFiles,
                                                                       <a href="../../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;targetKey,
                                                                       <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;candidate)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><span class="strong">StoreFileManager.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFileManager.html#updateCandidateFilesForRowKeyBefore(java.util.Iterator,%20org.apache.hadoop.hbase.KeyValue,%20org.apache.hadoop.hbase.Cell)">updateCandidateFilesForRowKeyBefore</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;candidateFiles,
                                                                       <a href="../../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;targetKey,
@@ -1355,19 +1392,29 @@
 <div class="block">Updates the candidate list for finding row key before.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">ChangedReadersObserver.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders(java.util.List)">updateReaders</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</code>
+<div class="block">Notify observers.</div>
+</td>
+</tr>
 <tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">StoreScanner.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders(java.util.List)">updateReaders</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateStorefiles(java.util.List,%20long)">updateStorefiles</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
                                 long&nbsp;snapshotId)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#writeCompactionWalRecord(java.util.Collection,%20java.util.Collection)">writeCompactionWalRecord</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacted,
                                                 <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;newFiles)</code>
 <div class="block">Writes the compaction WAL record.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">HStore.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#writeCompactionWalRecord(java.util.Collection,%20java.util.Collection)">writeCompactionWalRecord</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacted,
                                                 <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;newFiles)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 d36d81b..d98e478 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.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/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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.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/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/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/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/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DefaultHeapMemoryTuner.StepDirection</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
index 0fb3917..8630237 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.324">HBaseInterClusterReplicationEndpoint.Replicator</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.325">HBaseInterClusterReplicationEndpoint.Replicator</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/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</pre>
 </li>
@@ -197,7 +197,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>entries</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.325">entries</a></pre>
+<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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.326">entries</a></pre>
 </li>
 </ul>
 <a name="ordinal">
@@ -206,7 +206,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ordinal</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.326">ordinal</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.327">ordinal</a></pre>
 </li>
 </ul>
 </li>
@@ -223,7 +223,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseInterClusterReplicationEndpoint.Replicator</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.327">HBaseInterClusterReplicationEndpoint.Replicator</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.328">HBaseInterClusterReplicationEndpoint.Replicator</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                                                int&nbsp;ordinal)</pre>
 </li>
 </ul>
@@ -241,7 +241,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.333">call</a>()
+<pre>public&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.334">call</a>()
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index c78777a..8048913 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -563,7 +563,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>decorateConf</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.132">decorateConf</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.133">decorateConf</a>()</pre>
 </li>
 </ul>
 <a name="connectToPeers()">
@@ -572,7 +572,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>connectToPeers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.139">connectToPeers</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.140">connectToPeers</a>()</pre>
 </li>
 </ul>
 <a name="sleepForRetries(java.lang.String, int)">
@@ -581,7 +581,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.161">sleepForRetries</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>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.162">sleepForRetries</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,
                       int&nbsp;sleepMultiplier)</pre>
 <div class="block">Do the sleeping logic</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>msg</code> - Why we sleep</dd><dd><code>sleepMultiplier</code> - by how many times the default sleeping time is augmented</dd>
@@ -594,7 +594,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>replicate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.177">replicate</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.178">replicate</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;replicateContext)</pre>
 <div class="block">Do the shipping logic</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>replicateContext</code> - a context where WAL entries and other
  parameters can be obtained.</dd></dl>
@@ -606,7 +606,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>isPeerEnabled</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.292">isPeerEnabled</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.293">isPeerEnabled</a>()</pre>
 </li>
 </ul>
 <a name="doStop()">
@@ -615,7 +615,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>doStop</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.297">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.298">doStop</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#doStop()">doStop</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></code></dd>
@@ -628,7 +628,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>stopAndWait</h4>
-<pre>public&nbsp;com.google.common.util.concurrent.Service.State&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.313">stopAndWait</a>()</pre>
+<pre>public&nbsp;com.google.common.util.concurrent.Service.State&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.314">stopAndWait</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>stopAndWait</code>&nbsp;in interface&nbsp;<code>com.google.common.util.concurrent.Service</code></dd>
@@ -643,7 +643,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createReplicator</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.319">createReplicator</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.320">createReplicator</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                                                                int&nbsp;ordinal)</pre>
 </li>
 </ul>

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

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


[15/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
index 9640466..93346d6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
@@ -929,524 +929,656 @@
 <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>  @Test<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    HTable table = null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    try {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      latch = new CountDownLatch(1);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      exceptionLatch = new CountDownLatch(1);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      // Create KV that will give you two blocks<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      // Create a table with block size as 1024<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      // get the block cache and region<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      RegionLocator locator = table.getRegionLocator();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionName);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      Store store = region.getStores().iterator().next();<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      cacheConf.setEvictOnClose(true);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      // insert data. 2 Rows are added<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      insertData(table);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      // flush the data<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      System.out.println("Flushing cache");<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      // Should create one Hfile with 2 blocks<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      region.flush(true);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      // The block would have been decremented for the scan case as it was<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      // wrapped<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // before even the postNext hook gets executed.<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // giving some time for the block to be decremented<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      Thread.sleep(100);<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      boolean usedBlocksFound = false;<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      int refCount = 0;<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      while (iterator.hasNext()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        CachedBlock next = iterator.next();<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (cache instanceof BucketCache) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          continue;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        if (refCount != 0) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // Blocks will be with count 3<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          usedBlocksFound = true;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      assertTrue(usedBlocksFound);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      exceptionLatch.countDown();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // countdown the latch<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      for (ScanThread thread : scanThreads) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        thread.join();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      iterator = cache.iterator();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      usedBlocksFound = false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      refCount = 0;<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      while (iterator.hasNext()) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        CachedBlock next = iterator.next();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        if (cache instanceof BucketCache) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        } else {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          continue;<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        if (refCount != 0) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>          // Blocks will be with count 3<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          usedBlocksFound = true;<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      }<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      assertTrue(usedBlocksFound);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Thread.sleep(5100);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      iterator = cache.iterator();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      refCount = 0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      while (iterator.hasNext()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        CachedBlock next = iterator.next();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (cache instanceof BucketCache) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>          continue;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        assertEquals(0, refCount);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    } finally {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      if (table != null) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        table.close();<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    int refCount;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    while (iterator.hasNext()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      CachedBlock next = iterator.next();<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (cache instanceof BucketCache) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      } else {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        continue;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      assertEquals(0, refCount);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  private void insertData(HTable table) throws IOException {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    Put put = new Put(ROW);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    table.put(put);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    put = new Put(ROW1);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    table.put(put);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    put = new Put(ROW);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    table.put(put);<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>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      InterruptedException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    for (ScanThread thread : scanThreads) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      thread.start();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return scanThreads;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      throws IOException, InterruptedException {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    for (GetThread thread : getThreads) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      thread.start();<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    return getThreads;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      throws IOException, InterruptedException {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      thread.start();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    return multiGetThreads;<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    int counter = NO_OF_THREADS;<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      counter = counter - 1;<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        Thread.sleep(100);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } else {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        Thread.sleep(100);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    int refCount = 0;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    while (iterator.hasNext()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      CachedBlock next = iterator.next();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (cache instanceof BucketCache) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      } else {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        if (expectOnlyZero) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          assertTrue(refCount == 0);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (refCount != 0) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          // Because the scan would have also touched up on these blocks but<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          // it<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>          // would have touched<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>          // all 3<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>          if (getClosed) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>            // If get has closed only the scan's blocks would be available<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          } else {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      } else {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // Because the get would have also touched up on these blocks but it<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // would have touched<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        // upon only 2 additionally<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        if (expectOnlyZero) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          assertTrue(refCount == 0);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        if (refCount != 0) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (getLatch == null || wrappedCp) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          } else {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private static class MultiGetThread extends Thread {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private final HTable table;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    public MultiGetThread(HTable table) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      this.table = table;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    @Override<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    public void run() {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      gets.add(new Get(ROW));<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      gets.add(new Get(ROW1));<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      try {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        Result[] r = table.get(gets);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (IOException e) {<a name="line.1169"></a>
+<span class="sourceLineNo">924</span>  public void testBlockEvictionAfterHBASE13082WithCompactionAndFlush()<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      throws IOException, InterruptedException {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    // do flush and scan in parallel<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    HTable table = null;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    try {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      latch = new CountDownLatch(1);<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      compactionLatch = new CountDownLatch(1);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      TableName tableName =<a name="line.931"></a>
+<span class="sourceLineNo">932</span>          TableName.valueOf("testBlockEvictionAfterHBASE13082WithCompactionAndFlush");<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      // Create a table with block size as 1024<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      // get the block cache and region<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      RegionLocator locator = table.getRegionLocator();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.939"></a>
+<span class="sourceLineNo">940</span>          regionName);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      Store store = region.getStores().iterator().next();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      cacheConf.setEvictOnClose(true);<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>      // insert data. 2 Rows are added<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      Put put = new Put(ROW);<a name="line.948"></a>
+<span class="sourceLineNo">949</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      table.put(put);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put = new Put(ROW1);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      table.put(put);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // Should create one Hfile with 2 blocks<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      region.flush(true);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      // read the data and expect same blocks, one new hit, no misses<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      int refCount = 0;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      // Check how this miss is happening<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // insert a second column, read the row, no new blocks, 3 new hits<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      byte[] data2 = Bytes.add(data, data);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      put = new Put(ROW);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      table.put(put);<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // flush, one new block<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      System.out.println("Flushing cache");<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      region.flush(true);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      iterateBlockCache(cache, iterator);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      // Create three sets of scan<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Thread.sleep(100);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      iterator = cache.iterator();<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      boolean usedBlocksFound = false;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      while (iterator.hasNext()) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        CachedBlock next = iterator.next();<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.978"></a>
+<span class="sourceLineNo">979</span>        if (cache instanceof BucketCache) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        } else {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          continue;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        if (refCount != 0) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>          // Blocks will be with count 3<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          usedBlocksFound = true;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        }<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      // Make a put and do a flush<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>      data2 = Bytes.add(data, data);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      put = new Put(ROW1);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      table.put(put);<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      // flush, one new block<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      System.out.println("Flushing cache");<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      region.flush(true);<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      usedBlocksFound = false;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      System.out.println("Compacting");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      assertEquals(3, store.getStorefilesCount());<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      store.triggerMajorCompaction();<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      region.compact(true);<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      assertEquals(1, store.getStorefilesCount());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      // Even after compaction is done we will have some blocks that cannot<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // be evicted this is because the scan is still referencing them<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      iterator = cache.iterator();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      while (iterator.hasNext()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        CachedBlock next = iterator.next();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        if (cache instanceof BucketCache) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        } else {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          continue;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        }<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (refCount != 0) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // Blocks will be with count 3 as they are not yet cleared<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          usedBlocksFound = true;<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>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      // Should not throw exception<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      compactionLatch.countDown();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      latch.countDown();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      for (ScanThread thread : scanThreads) {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        thread.join();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      // by this time all blocks should have been evicted<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      iterator = cache.iterator();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // Since a flush and compaction happened after a scan started<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // we need to ensure that all the original blocks of the compacted file<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // is also removed.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      iterateBlockCache(cache, iterator);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      Result r = table.get(new Get(ROW));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      // The gets would be working on new blocks<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>      iterator = cache.iterator();<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      iterateBlockCache(cache, iterator);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    } finally {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      if (table != null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        table.close();<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><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  @Test<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    HTable table = null;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      latch = new CountDownLatch(1);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      exceptionLatch = new CountDownLatch(1);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      // Create KV that will give you two blocks<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      // Create a table with block size as 1024<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      // get the block cache and region<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      RegionLocator locator = table.getRegionLocator();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          regionName);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      Store store = region.getStores().iterator().next();<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      cacheConf.setEvictOnClose(true);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      // insert data. 2 Rows are added<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      insertData(table);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      // flush the data<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      System.out.println("Flushing cache");<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // Should create one Hfile with 2 blocks<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      region.flush(true);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      // The block would have been decremented for the scan case as it was<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      // wrapped<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // before even the postNext hook gets executed.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      // giving some time for the block to be decremented<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      Thread.sleep(100);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      boolean usedBlocksFound = false;<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      int refCount = 0;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      while (iterator.hasNext()) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        CachedBlock next = iterator.next();<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        if (cache instanceof BucketCache) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        } else {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>          continue;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>        if (refCount != 0) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>          // Blocks will be with count 3<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          usedBlocksFound = true;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      assertTrue(usedBlocksFound);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      exceptionLatch.countDown();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // countdown the latch<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      for (ScanThread thread : scanThreads) {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        thread.join();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      iterator = cache.iterator();<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      usedBlocksFound = false;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      refCount = 0;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      while (iterator.hasNext()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        CachedBlock next = iterator.next();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        if (cache instanceof BucketCache) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        } else {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>          continue;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        if (refCount != 0) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>          // Blocks will be with count 3<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          usedBlocksFound = true;<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>        }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(usedBlocksFound);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      Thread.sleep(5100);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      iterator = cache.iterator();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      refCount = 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      while (iterator.hasNext()) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>        CachedBlock next = iterator.next();<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        if (cache instanceof BucketCache) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        } else {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>          continue;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        assertEquals(0, refCount);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      }<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    } finally {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      if (table != null) {<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>        table.close();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    int refCount;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    while (iterator.hasNext()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      CachedBlock next = iterator.next();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      if (cache instanceof BucketCache) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      } else {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        continue;<a name="line.1169"></a>
 <span class="sourceLineNo">1170</span>      }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    }<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  private static class GetThread extends Thread {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    private final HTable table;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    private final boolean tracker;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    private final boolean multipleCFs;<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      this.table = table;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      this.tracker = tracker;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      this.multipleCFs = multipleCFs;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span><a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    @Override<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    public void run() {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>        initiateGet(table);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      } catch (IOException e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        // do nothing<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    private void initiateGet(HTable table) throws IOException {<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      Get get = new Get(ROW);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      if (tracker) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>        // Change this<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        if (!multipleCFs) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 3));<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 8));<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 9));<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          // Unknown key<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 900));<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>        } else {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          get.addColumn(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3));<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          get.addColumn(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9));<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>          // Unknown key<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 900));<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>        }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      Result r = table.get(get);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      System.out.println(r);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (!tracker) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        if (!multipleCFs) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 3)), data2));<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 8)), data2));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 9)), data2));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        } else {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>          assertTrue(Bytes.equals(<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>              r.getValue(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3)),<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>              data2));<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          assertTrue(Bytes.equals(<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              r.getValue(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8)),<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>              data2));<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          assertTrue(Bytes.equals(<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>              r.getValue(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9)),<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>              data2));<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span><a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  private static class ScanThread extends Thread {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    private final HTable table;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    private final boolean reverse;<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    public ScanThread(HTable table, boolean reverse) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      this.table = table;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      this.reverse = reverse;<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span><a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    @Override<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    public void run() {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      try {<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        initiateScan(table);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      } catch (IOException e) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        // do nothing<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    private void initiateScan(HTable table) throws IOException {<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      Scan scan = new Scan();<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      if (reverse) {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>        scan.setReversed(true);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      ResultScanner resScanner = table.getScanner(scan);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      int i = (reverse ? ROWS.length - 1 : 0);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      boolean resultFound = false;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      for (Result result : resScanner) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        resultFound = true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        System.out.println(result);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        if (!reverse) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          i++;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>        } else {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>          i--;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      assertTrue(resultFound);<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  private void waitForStoreFileCount(Store store, int count, int timeout)<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      throws InterruptedException {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    long start = System.currentTimeMillis();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    while (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      Thread.sleep(100);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    System.out.println("start=" + start + ", now=" + System.currentTimeMillis() + ", cur="<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        + store.getStorefilesCount());<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  private static class CustomScanner implements RegionScanner {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    private RegionScanner delegate;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    public CustomScanner(RegionScanner delegate) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      this.delegate = delegate;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    public boolean next(List&lt;Cell&gt; results) throws IOException {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      return delegate.next(results);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    @Override<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext scannerContext) throws IOException {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return delegate.next(result, scannerContext);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public boolean nextRaw(List&lt;Cell&gt; result) throws IOException {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return delegate.nextRaw(result);<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    public boolean nextRaw(List&lt;Cell&gt; result, ScannerContext context) throws IOException {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      boolean nextRaw = delegate.nextRaw(result, context);<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      if (compactionLatch != null &amp;&amp; compactionLatch.getCount() &gt; 0) {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        try {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          compactionLatch.await();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        } catch (InterruptedException ie) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      if (CustomInnerRegionObserver.throwException.get()) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (exceptionLatch.getCount() &gt; 0) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          try {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            exceptionLatch.await();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          } catch (InterruptedException e) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>          throw new IOException("throw exception");<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        }<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      return nextRaw;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    @Override<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    public void close() throws IOException {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      delegate.close();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    @Override<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    public HRegionInfo getRegionInfo() {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      return delegate.getRegionInfo();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    }<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    @Override<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    public boolean isFilterDone() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return delegate.isFilterDone();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    public boolean reseek(byte[] row) throws IOException {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      return false;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span><a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    public long getMaxResultSize() {<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      return delegate.getMaxResultSize();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    public long getMvccReadPoint() {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      return delegate.getMvccReadPoint();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span><a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    @Override<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    public int getBatch() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      return delegate.getBatch();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    @Override<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    public void shipped() throws IOException {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      this.delegate.shipped();<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>  public static class CustomInnerRegionObserverWrapper extends CustomInnerRegionObserver {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    @Override<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    public RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        Scan scan, RegionScanner s) throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      return new CustomScanner(s);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>  }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  public static class CustomInnerRegionObserver extends BaseRegionObserver {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    static final AtomicLong sleepTime = new AtomicLong(0);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    static final AtomicBoolean slowDownNext = new AtomicBoolean(false);<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    static final AtomicInteger countOfNext = new AtomicInteger(0);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    static final AtomicInteger countOfGets = new AtomicInteger(0);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    static final AtomicBoolean waitForGets = new AtomicBoolean(false);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    static final AtomicBoolean throwException = new AtomicBoolean(false);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    private static final AtomicReference&lt;CountDownLatch&gt; cdl = new AtomicReference&lt;CountDownLatch&gt;(<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        new CountDownLatch(0));<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        InternalScanner s, List&lt;Result&gt; results, int limit, boolean hasMore) throws IOException {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      slowdownCode(e, false);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      if (getLatch != null &amp;&amp; getLatch.getCount() &gt; 0) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>          getLatch.await();<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        } catch (InterruptedException e1) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      return super.postScannerNext(e, s, results, limit, hasMore);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>    public void postGetOp(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Get get,<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        List&lt;Cell&gt; results) throws IOException {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      slowdownCode(e, true);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      super.postGetOp(e, get, results);<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    public static AtomicReference&lt;CountDownLatch&gt; getCdl() {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      return cdl;<a name="line.1416"></a>
+<span class="sourceLineNo">1171</span>      assertEquals(0, refCount);<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  private void insertData(HTable table) throws IOException {<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    Put put = new Put(ROW);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    table.put(put);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    put = new Put(ROW1);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    table.put(put);<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    put = new Put(ROW);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    table.put(put);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span><a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      InterruptedException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    for (ScanThread thread : scanThreads) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      thread.start();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return scanThreads;<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      throws IOException, InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    for (GetThread thread : getThreads) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      thread.start();<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    return getThreads;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      throws IOException, InterruptedException {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      thread.start();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    return multiGetThreads;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span><a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    int counter = NO_OF_THREADS;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      counter = counter - 1;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>        Thread.sleep(100);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    } else {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        Thread.sleep(100);<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    int refCount = 0;<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    while (iterator.hasNext()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      CachedBlock next = iterator.next();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      if (cache instanceof BucketCache) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        continue;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        if (expectOnlyZero) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>          assertTrue(refCount == 0);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>        if (refCount != 0) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>          // Because the scan would have also touched up on these blocks but<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>          // it<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>          // would have touched<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>          // all 3<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>          if (getClosed) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>            // If get has closed only the scan's blocks would be available<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          } else {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>        // Because the get would have also touched up on these blocks but it<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>        // would have touched<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        // upon only 2 additionally<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        if (expectOnlyZero) {<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>          assertTrue(refCount == 0);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        if (refCount != 0) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          if (getLatch == null || wrappedCp) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          } else {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span><a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  private static class MultiGetThread extends Thread {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    private final HTable table;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    public MultiGetThread(HTable table) {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      this.table = table;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    @Override<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    public void run() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      gets.add(new Get(ROW));<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      gets.add(new Get(ROW1));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      try {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        Result[] r = table.get(gets);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      } catch (IOException e) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  private static class GetThread extends Thread {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    private final HTable table;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    private final boolean tracker;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    private final boolean multipleCFs;<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      this.table = table;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      this.tracker = tracker;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      this.multipleCFs = multipleCFs;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    @Override<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    public void run() {<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      try {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        initiateGet(table);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      } catch (IOException e) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>        // do nothing<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      }<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    }<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="line.1325"></a>
+<spa

<TRUNCATED>

[33/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index a92d846..93c22b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -1050,7 +1050,7 @@
 <span class="sourceLineNo">1042</span>      this.lock.writeLock().unlock();<a name="line.1042"></a>
 <span class="sourceLineNo">1043</span>    }<a name="line.1043"></a>
 <span class="sourceLineNo">1044</span>    // notify to be called here - only in case of flushes<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    notifyChangedReadersObservers();<a name="line.1045"></a>
+<span class="sourceLineNo">1045</span>    notifyChangedReadersObservers(sfs);<a name="line.1045"></a>
 <span class="sourceLineNo">1046</span>    if (LOG.isTraceEnabled()) {<a name="line.1046"></a>
 <span class="sourceLineNo">1047</span>      long totalSize = 0;<a name="line.1047"></a>
 <span class="sourceLineNo">1048</span>      for (StoreFile sf : sfs) {<a name="line.1048"></a>
@@ -1068,9 +1068,9 @@
 <span class="sourceLineNo">1060</span>   * Notify all observers that set of Readers has changed.<a name="line.1060"></a>
 <span class="sourceLineNo">1061</span>   * @throws IOException<a name="line.1061"></a>
 <span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  private void notifyChangedReadersObservers() throws IOException {<a name="line.1063"></a>
+<span class="sourceLineNo">1063</span>  private void notifyChangedReadersObservers(List&lt;StoreFile&gt; sfs) throws IOException {<a name="line.1063"></a>
 <span class="sourceLineNo">1064</span>    for (ChangedReadersObserver o : this.changedReaderObservers) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      o.updateReaders();<a name="line.1065"></a>
+<span class="sourceLineNo">1065</span>      o.updateReaders(sfs);<a name="line.1065"></a>
 <span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  }<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span><a name="line.1068"></a>
@@ -1110,1283 +1110,1307 @@
 <span class="sourceLineNo">1102</span>  }<a name="line.1102"></a>
 <span class="sourceLineNo">1103</span><a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  @Override<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>  public void addChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    this.changedReaderObservers.add(o);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  }<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span><a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>  @Override<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>  public void deleteChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    // We don't check if observer present; it may not be (legitimately)<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    this.changedReaderObservers.remove(o);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  }<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span><a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  // Compaction<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  /**<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   * Compact the StoreFiles.  This method may take some time, so the calling<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>   * thread must be able to block for long periods.<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   *<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>   * &lt;p&gt;During this time, the Store can work as usual, getting values from<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>   * StoreFiles and writing new StoreFiles from the memstore.<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>   *<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>   * Existing StoreFiles are not destroyed until the new compacted StoreFile is<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>   * completely written-out to disk.<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>   *<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>   * &lt;p&gt;The compactLock prevents multiple simultaneous compactions.<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>   * The structureLock prevents us from interfering with other write operations.<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   *<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>   * &lt;p&gt;We don't want to hold the structureLock for the whole time, as a compact()<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>   * can be lengthy and we want to allow cache-flushes during this period.<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>   *<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>   * &lt;p&gt; Compaction event should be idempotent, since there is no IO Fencing for<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>   * the region directory in hdfs. A region server might still try to complete the<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * compaction after it lost the region. That is why the following events are carefully<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   * ordered for a compaction:<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>   *  1. Compaction writes new files under region/.tmp directory (compaction output)<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   *  2. Compaction atomically moves the temporary file under region directory<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>   *  3. Compaction appends a WAL edit containing the compaction input and output files.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>   *  Forces sync on WAL.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>   *  4. Compaction deletes the input files from the region directory.<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>   *<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>   * Failure conditions are handled like this:<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>   *  - If RS fails before 2, compaction wont complete. Even if RS lives on and finishes<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>   *  the compaction later, it will only write the new data file to the region directory.<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>   *  Since we already have this data, this will be idempotent but we will have a redundant<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>   *  copy of the data.<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>   *  - If RS fails between 2 and 3, the region will have a redundant copy of the data. The<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>   *  RS that failed won't be able to finish snyc() for WAL because of lease recovery in WAL.<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>   *  - If RS fails after 3, the region region server who opens the region will pick up the<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>   *  the compaction marker from the WAL and replay it by removing the compaction input files.<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>   *  Failed RS can also attempt to delete those files, but the operation will be idempotent<a name="line.1154"></a>
+<span class="sourceLineNo">1105</span>  public List&lt;KeyValueScanner&gt; getScanners(List&lt;StoreFile&gt; files, boolean cacheBlocks,<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      boolean isGet, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher,<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      byte[] startRow, byte[] stopRow, long readPt, boolean includeMemstoreScanner) throws IOException {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    List&lt;KeyValueScanner&gt; memStoreScanners = null;<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    if (includeMemstoreScanner) {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      this.lock.readLock().lock();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      try {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>        memStoreScanners = this.memstore.getScanners(readPt);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      } finally {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        this.lock.readLock().unlock();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    List&lt;StoreFileScanner&gt; sfScanners = StoreFileScanner.getScannersForStoreFiles(files,<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      cacheBlocks, usePread, isCompaction, false, matcher, readPt, isPrimaryReplicaStore());<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(sfScanners.size() + 1);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    scanners.addAll(sfScanners);<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    // Then the memstore scanners<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>    if (memStoreScanners != null) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      scanners.addAll(memStoreScanners);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>    }<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    return scanners;<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>  @Override<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  public void addChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    this.changedReaderObservers.add(o);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>  @Override<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>  public void deleteChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    // We don't check if observer present; it may not be (legitimately)<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    this.changedReaderObservers.remove(o);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  }<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span><a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  // Compaction<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>  /**<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>   * Compact the StoreFiles.  This method may take some time, so the calling<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>   * thread must be able to block for long periods.<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>   *<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>   * &lt;p&gt;During this time, the Store can work as usual, getting values from<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>   * StoreFiles and writing new StoreFiles from the memstore.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>   *<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>   * Existing StoreFiles are not destroyed until the new compacted StoreFile is<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>   * completely written-out to disk.<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>   *<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>   * &lt;p&gt;The compactLock prevents multiple simultaneous compactions.<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>   * The structureLock prevents us from interfering with other write operations.<a name="line.1154"></a>
 <span class="sourceLineNo">1155</span>   *<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>   * See HBASE-2231 for details.<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>   *<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   * @param compaction compaction details obtained from requestCompaction()<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>   * @throws IOException<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>   * @return Storefile we compacted into or null if we failed or opted out early.<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>   */<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>  @Override<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      CompactionThroughputController throughputController) throws IOException {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    return compact(compaction, throughputController, null);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  @Override<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    CompactionThroughputController throughputController, User user) throws IOException {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    assert compaction != null;<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    List&lt;StoreFile&gt; sfs = null;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    CompactionRequest cr = compaction.getRequest();<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    try {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      // Do all sanity checking in here if we have a valid CompactionRequest<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      // because we need to clean up after it on the way out in a finally<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>      // block below<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      long compactionStartTime = EnvironmentEdgeManager.currentTime();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      assert compaction.hasSelection();<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      Collection&lt;StoreFile&gt; filesToCompact = cr.getFiles();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      assert !filesToCompact.isEmpty();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      synchronized (filesCompacting) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>        // sanity check: we're compacting files that this store knows about<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>        // TODO: change this to LOG.error() after more debugging<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>        Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      // Ready to go. Have list of files to compact.<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>          + this + " of " + this.getRegionInfo().getRegionNameAsString()<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>          + " into tmpdir=" + fs.getTempDir() + ", totalSize="<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>          + TraditionalBinaryPrefix.long2String(cr.getSize(), "", 1));<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      // Commence the compaction.<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      List&lt;Path&gt; newFiles = compaction.compact(throughputController, user);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span><a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      // TODO: get rid of this!<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>      if (!this.conf.getBoolean("hbase.hstore.compaction.complete", true)) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        LOG.warn("hbase.hstore.compaction.complete is set to false");<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>        sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>        final boolean evictOnClose =<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>            cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>        for (Path newFile : newFiles) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>          // Create storefile around what we wrote with a reader on it.<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          StoreFile sf = createStoreFileAndReader(newFile);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          sf.closeReader(evictOnClose);<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          sfs.add(sf);<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>        }<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>        return sfs;<a name="line.1209"></a>
+<span class="sourceLineNo">1156</span>   * &lt;p&gt;We don't want to hold the structureLock for the whole time, as a compact()<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>   * can be lengthy and we want to allow cache-flushes during this period.<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>   *<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>   * &lt;p&gt; Compaction event should be idempotent, since there is no IO Fencing for<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>   * the region directory in hdfs. A region server might still try to complete the<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>   * compaction after it lost the region. That is why the following events are carefully<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>   * ordered for a compaction:<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>   *  1. Compaction writes new files under region/.tmp directory (compaction output)<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>   *  2. Compaction atomically moves the temporary file under region directory<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>   *  3. Compaction appends a WAL edit containing the compaction input and output files.<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>   *  Forces sync on WAL.<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>   *  4. Compaction deletes the input files from the region directory.<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>   *<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>   * Failure conditions are handled like this:<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>   *  - If RS fails before 2, compaction wont complete. Even if RS lives on and finishes<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   *  the compaction later, it will only write the new data file to the region directory.<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>   *  Since we already have this data, this will be idempotent but we will have a redundant<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>   *  copy of the data.<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   *  - If RS fails between 2 and 3, the region will have a redundant copy of the data. The<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>   *  RS that failed won't be able to finish snyc() for WAL because of lease recovery in WAL.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   *  - If RS fails after 3, the region region server who opens the region will pick up the<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   *  the compaction marker from the WAL and replay it by removing the compaction input files.<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>   *  Failed RS can also attempt to delete those files, but the operation will be idempotent<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   *<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>   * See HBASE-2231 for details.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>   *<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>   * @param compaction compaction details obtained from requestCompaction()<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>   * @throws IOException<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>   * @return Storefile we compacted into or null if we failed or opted out early.<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>   */<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  @Override<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>      CompactionThroughputController throughputController) throws IOException {<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    return compact(compaction, throughputController, null);<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  }<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span><a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  @Override<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    CompactionThroughputController throughputController, User user) throws IOException {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    assert compaction != null;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    List&lt;StoreFile&gt; sfs = null;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    CompactionRequest cr = compaction.getRequest();<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>    try {<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      // Do all sanity checking in here if we have a valid CompactionRequest<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>      // because we need to clean up after it on the way out in a finally<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      // block below<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      long compactionStartTime = EnvironmentEdgeManager.currentTime();<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      assert compaction.hasSelection();<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      Collection&lt;StoreFile&gt; filesToCompact = cr.getFiles();<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      assert !filesToCompact.isEmpty();<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      synchronized (filesCompacting) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>        // sanity check: we're compacting files that this store knows about<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>        // TODO: change this to LOG.error() after more debugging<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>        Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));<a name="line.1209"></a>
 <span class="sourceLineNo">1210</span>      }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      // Do the steps necessary to complete the compaction.<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      sfs = moveCompatedFilesIntoPlace(cr, newFiles, user);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      writeCompactionWalRecord(filesToCompact, sfs);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      replaceStoreFiles(filesToCompact, sfs);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (cr.isMajor()) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        majorCompactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        majorCompactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        compactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        compactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      }<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      // At this point the store will use new files for all new scanners.<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      completeCompaction(filesToCompact); // update store size.<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span><a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      logCompactionEndMessage(cr, sfs, compactionStartTime);<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      return sfs;<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    } finally {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      finishCompactionRequest(cr);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>  }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span><a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>  private List&lt;StoreFile&gt; moveCompatedFilesIntoPlace(<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      final CompactionRequest cr, List&lt;Path&gt; newFiles, User user) throws IOException {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>    List&lt;StoreFile&gt; sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    for (Path newFile : newFiles) {<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      assert newFile != null;<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      final StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      if (this.getCoprocessorHost() != null) {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>        final Store thisStore = this;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>        if (user == null) {<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>          getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>        } else {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          try {<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>            user.getUGI().doAs(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>              @Override<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>              public Void run() throws Exception {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>                getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>                return null;<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>              }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>            });<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>          } catch (InterruptedException ie) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>            InterruptedIOException iioe = new InterruptedIOException();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>            iioe.initCause(ie);<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>            throw iioe;<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>          }<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>        }<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      assert sf != null;<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      sfs.add(sf);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    return sfs;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span><a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>  // Package-visible for tests<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>  StoreFile moveFileIntoPlace(final Path newFile) throws IOException {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    validateStoreFile(newFile);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Move the file into the right spot<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    Path destPath = fs.commitStoreFile(getColumnFamilyName(), newFile);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    return createStoreFileAndReader(destPath);<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>  }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span><a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>   * Writes the compaction WAL record.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * @param filesCompacted Files compacted (input).<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * @param newFiles Files from compaction.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   */<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>  private void writeCompactionWalRecord(Collection&lt;StoreFile&gt; filesCompacted,<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>      Collection&lt;StoreFile&gt; newFiles) throws IOException {<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    if (region.getWAL() == null) return;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    List&lt;Path&gt; inputPaths = new ArrayList&lt;Path&gt;(filesCompacted.size());<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    for (StoreFile f : filesCompacted) {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      inputPaths.add(f.getPath());<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    List&lt;Path&gt; outputPaths = new ArrayList&lt;Path&gt;(newFiles.size());<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    for (StoreFile f : newFiles) {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      outputPaths.add(f.getPath());<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>    }<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    HRegionInfo info = this.region.getRegionInfo();<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    CompactionDescriptor compactionDescriptor = ProtobufUtil.toCompactionDescriptor(info,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>        family.getName(), inputPaths, outputPaths, fs.getStoreDir(getFamily().getNameAsString()));<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    WALUtil.writeCompactionMarker(region.getWAL(), this.region.getTableDesc(),<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        this.region.getRegionInfo(), compactionDescriptor, region.getMVCC());<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  }<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  @VisibleForTesting<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>  void replaceStoreFiles(final Collection&lt;StoreFile&gt; compactedFiles,<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      final Collection&lt;StoreFile&gt; result) throws IOException {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    this.lock.writeLock().lock();<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    try {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>      this.storeEngine.getStoreFileManager().addCompactionResults(compactedFiles, result);<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      filesCompacting.removeAll(compactedFiles); // safe bc: lock.writeLock();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    } finally {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      this.lock.writeLock().unlock();<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    }<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * Log a very elaborate compaction completion message.<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * @param cr Request.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * @param sfs Resulting files.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>   * @param compactionStartTime Start time.<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   */<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>  private void logCompactionEndMessage(<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      CompactionRequest cr, List&lt;StoreFile&gt; sfs, long compactionStartTime) {<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    StringBuilder message = new StringBuilder(<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      "Completed" + (cr.isMajor() ? " major" : "") + " compaction of "<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      + cr.getFiles().size() + (cr.isAllFiles() ? " (all)" : "") + " file(s) in "<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>      + this + " of " + this.getRegionInfo().getRegionNameAsString() + " into ");<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    if (sfs.isEmpty()) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>      message.append("none, ");<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    } else {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>      for (StoreFile sf: sfs) {<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        message.append(sf.getPath().getName());<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        message.append("(size=");<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        message.append(TraditionalBinaryPrefix.long2String(sf.getReader().length(), "", 1));<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>        message.append("), ");<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>      }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    message.append("total size for store is ")<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>      .append(StringUtils.TraditionalBinaryPrefix.long2String(storeSize, "", 1))<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      .append(". This selection was in queue for ")<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      .append(StringUtils.formatTimeDiff(compactionStartTime, cr.getSelectionTime()))<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      .append(", and took ").append(StringUtils.formatTimeDiff(now, compactionStartTime))<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      .append(" to execute.");<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    LOG.info(message.toString());<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    if (LOG.isTraceEnabled()) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      int fileCount = storeEngine.getStoreFileManager().getStorefileCount();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>      long resultSize = 0;<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>      for (StoreFile sf : sfs) {<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>        resultSize += sf.getReader().length();<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      }<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      String traceMessage = "COMPACTION start,end,size out,files in,files out,store size,"<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        + "store files [" + compactionStartTime + "," + now + "," + resultSize + ","<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>          + cr.getFiles().size() + "," + sfs.size() + "," +  storeSize + "," + fileCount + "]";<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>      LOG.trace(traceMessage);<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    }<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  }<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span><a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>  /**<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>   * Call to complete a compaction. Its for the case where we find in the WAL a compaction<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>   * that was not finished.  We could find one recovering a WAL after a regionserver crash.<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>   * See HBASE-2231.<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>   * @param compaction<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>   */<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>  @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>  public void replayCompactionMarker(CompactionDescriptor compaction,<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      boolean pickCompactionFiles, boolean removeFiles)<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      throws IOException {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    LOG.debug("Completing compaction from the WAL marker");<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    List&lt;String&gt; compactionInputs = compaction.getCompactionInputList();<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    List&lt;String&gt; compactionOutputs = Lists.newArrayList(compaction.getCompactionOutputList());<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span><a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    // The Compaction Marker is written after the compaction is completed,<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    // and the files moved into the region/family folder.<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    //<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    // If we crash after the entry is written, we may not have removed the<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    // input files, but the output file is present.<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    // (The unremoved input files will be removed by this function)<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    //<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    // If we scan the directory and the file is not present, it can mean that:<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    //   - The file was manually removed by the user<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>    //   - The file was removed as consequence of subsequent compaction<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    // so, we can't do anything with the "compaction output list" because those<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    // files have already been loaded when opening the region (by virtue of<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>    // being in the store's folder) or they may be missing due to a compaction.<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span><a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    String familyName = this.getColumnFamilyName();<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    List&lt;String&gt; inputFiles = new ArrayList&lt;String&gt;(compactionInputs.size());<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    for (String compactionInput : compactionInputs) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      Path inputPath = fs.getStoreFilePath(familyName, compactionInput);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      inputFiles.add(inputPath.getName());<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>    }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    //some of the input files might already be deleted<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    List&lt;StoreFile&gt; inputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionInputs.size());<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    for (StoreFile sf : this.getStorefiles()) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      if (inputFiles.contains(sf.getPath().getName())) {<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        inputStoreFiles.add(sf);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span><a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    // check whether we need to pick up the new files<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    List&lt;StoreFile&gt; outputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionOutputs.size());<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    if (pickCompactionFiles) {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      for (StoreFile sf : this.getStorefiles()) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>        compactionOutputs.remove(sf.getPath().getName());<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      }<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      for (String compactionOutput : compactionOutputs) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), compactionOutput);<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        outputStoreFiles.add(storeFile);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    if (!inputStoreFiles.isEmpty() || !outputStoreFiles.isEmpty()) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      LOG.info("Replaying compaction marker, replacing input files: " +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>          inputStoreFiles + " with output files : " + outputStoreFiles);<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>      this.replaceStoreFiles(inputStoreFiles, outputStoreFiles);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      this.completeCompaction(inputStoreFiles);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>    }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  /**<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * This method tries to compact N recent files for testing.<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * Note that because compacting "recent" files only makes sense for some policies,<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   * e.g. the default one, it assumes default policy is used. It doesn't use policy,<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>   * but instead makes a compaction candidate list by itself.<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>   * @param N Number of files.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>   */<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>  public void compactRecentForTestingAssumingDefaultPolicy(int N) throws IOException {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    List&lt;StoreFile&gt; filesToCompact;<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>    boolean isMajor;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span><a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    this.lock.readLock().lock();<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    try {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>      synchronized (filesCompacting) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        filesToCompact = Lists.newArrayList(storeEngine.getStoreFileManager().getStorefiles());<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        if (!filesCompacting.isEmpty()) {<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          // exclude all files older than the newest file we're currently<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>          // compacting. this allows us to preserve contiguity (HBASE-2856)<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>          StoreFile last = filesCompacting.get(filesCompacting.size() - 1);<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>          int idx = filesToCompact.indexOf(last);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          Preconditions.checkArgument(idx != -1);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>          filesToCompact.subList(0, idx + 1).clear();<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>        int count = filesToCompact.size();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        if (N &gt; count) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>          throw new RuntimeException("Not enough files");<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>        }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span><a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>        filesToCompact = filesToCompact.subList(count - N, count);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>        isMajor = (filesToCompact.size() == storeEngine.getStoreFileManager().getStorefileCount());<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>        filesCompacting.addAll(filesToCompact);<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        Collections.sort(filesCompacting, StoreFile.Comparators.SEQ_ID);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>    } finally {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>      this.lock.readLock().unlock();<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span><a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>    try {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>      // Ready to go. Have list of files to compact.<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>      List&lt;Path&gt; newFiles = ((DefaultCompactor)this.storeEngine.getCompactor())<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>          .compactForTesting(filesToCompact, isMajor);<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>      for (Path newFile: newFiles) {<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        // Move the compaction into place.<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        if (this.getCoprocessorHost() != null) {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>          this.getCoprocessorHost().postCompact(this, sf, null);<a name="line.1460"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      // Ready to go. Have list of files to compact.<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>          + this + " of " + this.getRegionInfo().getRegionNameAsString()<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>          + " into tmpdir=" + fs.getTempDir() + ", totalSize="<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>          + TraditionalBinaryPrefix.long2String(cr.getSize(), "", 1));<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span><a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      // Commence the compaction.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      List&lt;Path&gt; newFiles = compaction.compact(throughputController, user);<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span><a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // TODO: get rid of this!<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      if (!this.conf.getBoolean("hbase.hstore.compaction.complete", true)) {<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>        LOG.warn("hbase.hstore.compaction.complete is set to false");<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>        sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>        final boolean evictOnClose =<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>            cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>        for (Path newFile : newFiles) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>          // Create storefile around what we wrote with a reader on it.<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>          StoreFile sf = createStoreFileAndReader(newFile);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>          sf.closeReader(evictOnClose);<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>          sfs.add(sf);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        return sfs;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      // Do the steps necessary to complete the compaction.<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      sfs = moveCompatedFilesIntoPlace(cr, newFiles, user);<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      writeCompactionWalRecord(filesToCompact, sfs);<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      replaceStoreFiles(filesToCompact, sfs);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      if (cr.isMajor()) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>        majorCompactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        majorCompactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      } else {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>        compactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        compactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      }<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      // At this point the store will use new files for all new scanners.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      completeCompaction(filesToCompact); // update store size.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span><a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      logCompactionEndMessage(cr, sfs, compactionStartTime);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      return sfs;<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    } finally {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      finishCompactionRequest(cr);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span><a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>  private List&lt;StoreFile&gt; moveCompatedFilesIntoPlace(<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      final CompactionRequest cr, List&lt;Path&gt; newFiles, User user) throws IOException {<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    List&lt;StoreFile&gt; sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    for (Path newFile : newFiles) {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      assert newFile != null;<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>      final StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      if (this.getCoprocessorHost() != null) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>        final Store thisStore = this;<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        if (user == null) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        } else {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>          try {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>            user.getUGI().doAs(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>              @Override<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>              public Void run() throws Exception {<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>                getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>                return null;<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>              }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>            });<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          } catch (InterruptedException ie) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            InterruptedIOException iioe = new InterruptedIOException();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>            iioe.initCause(ie);<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            throw iioe;<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      assert sf != null;<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      sfs.add(sf);<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>    }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    return sfs;<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  }<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span><a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>  // Package-visible for tests<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  StoreFile moveFileIntoPlace(final Path newFile) throws IOException {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>    validateStoreFile(newFile);<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    // Move the file into the right spot<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    Path destPath = fs.commitStoreFile(getColumnFamilyName(), newFile);<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    return createStoreFileAndReader(destPath);<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  }<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span><a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  /**<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>   * Writes the compaction WAL record.<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>   * @param filesCompacted Files compacted (input).<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>   * @param newFiles Files from compaction.<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  private void writeCompactionWalRecord(Collection&lt;StoreFile&gt; filesCompacted,<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      Collection&lt;StoreFile&gt; newFiles) throws IOException {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    if (region.getWAL() == null) return;<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    List&lt;Path&gt; inputPaths = new ArrayList&lt;Path&gt;(filesCompacted.size());<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    for (StoreFile f : filesCompacted) {<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>      inputPaths.add(f.getPath());<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    List&lt;Path&gt; outputPaths = new ArrayList&lt;Path&gt;(newFiles.size());<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    for (StoreFile f : newFiles) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>      outputPaths.add(f.getPath());<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    }<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    HRegionInfo info = this.region.getRegionInfo();<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    CompactionDescriptor compactionDescriptor = ProtobufUtil.toCompactionDescriptor(info,<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>        family.getName(), inputPaths, outputPaths, fs.getStoreDir(getFamily().getNameAsString()));<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    WALUtil.writeCompactionMarker(region.getWAL(), this.region.getTableDesc(),<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>        this.region.getRegionInfo(), compactionDescriptor, region.getMVCC());<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>  @VisibleForTesting<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  void replaceStoreFiles(final Collection&lt;StoreFile&gt; compactedFiles,<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      final Collection&lt;StoreFile&gt; result) throws IOException {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    this.lock.writeLock().lock();<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    try {<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>      this.storeEngine.getStoreFileManager().addCompactionResults(compactedFiles, result);<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>      filesCompacting.removeAll(compactedFiles); // safe bc: lock.writeLock();<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    } finally {<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>      this.lock.writeLock().unlock();<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>    }<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>  }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span><a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>  /**<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>   * Log a very elaborate compaction completion message.<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>   * @param cr Request.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>   * @param sfs Resulting files.<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>   * @param compactionStartTime Start time.<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>   */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>  private void logCompactionEndMessage(<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      CompactionRequest cr, List&lt;StoreFile&gt; sfs, long compactionStartTime) {<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    StringBuilder message = new StringBuilder(<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      "Completed" + (cr.isMajor() ? " major" : "") + " compaction of "<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>      + cr.getFiles().size() + (cr.isAllFiles() ? " (all)" : "") + " file(s) in "<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>      + this + " of " + this.getRegionInfo().getRegionNameAsString() + " into ");<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>    if (sfs.isEmpty()) {<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>      message.append("none, ");<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    } else {<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>      for (StoreFile sf: sfs) {<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>        message.append(sf.getPath().getName());<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>        message.append("(size=");<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>        message.append(TraditionalBinaryPrefix.long2String(sf.getReader().length(), "", 1));<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>        message.append("), ");<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      }<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    }<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>    message.append("total size for store is ")<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>      .append(StringUtils.TraditionalBinaryPrefix.long2String(storeSize, "", 1))<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>      .append(". This selection was in queue for ")<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>      .append(StringUtils.formatTimeDiff(compactionStartTime, cr.getSelectionTime()))<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>      .append(", and took ").append(StringUtils.formatTimeDiff(now, compactionStartTime))<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>      .append(" to execute.");<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>    LOG.info(message.toString());<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    if (LOG.isTraceEnabled()) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      int fileCount = storeEngine.getStoreFileManager().getStorefileCount();<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>      long resultSize = 0;<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>      for (StoreFile sf : sfs) {<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>        resultSize += sf.getReader().length();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      String traceMessage = "COMPACTION start,end,size out,files in,files out,store size,"<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        + "store files [" + compactionStartTime + "," + now + "," + resultSize + ","<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          + cr.getFiles().size() + "," + sfs.size() + "," +  storeSize + "," + fileCount + "]";<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      LOG.trace(traceMessage);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>   * Call to complete a compaction. Its for the case where we find in the WAL a compaction<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>   * that was not finished.  We could find one recovering a WAL after a regionserver crash.<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * See HBASE-2231.<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * @param compaction<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   */<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>  @Override<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public void replayCompactionMarker(CompactionDescriptor compaction,<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      boolean pickCompactionFiles, boolean removeFiles)<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      throws IOException {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>    LOG.debug("Completing compaction from the WAL marker");<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    List&lt;String&gt; compactionInputs = compaction.getCompactionInputList();<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    List&lt;String&gt; compactionOutputs = Lists.newArrayList(compaction.getCompactionOutputList());<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span><a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    // The Compaction Marker is written after the compaction is completed,<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    // and the files moved into the region/family folder.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    //<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>    // If we crash after the entry is written, we may not have removed the<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>    // input files, but the output file is present.<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    // (The unremoved input files will be removed by this function)<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>    //<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    // If we scan the directory and the file is not present, it can mean that:<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>    //   - The file was manually removed by the user<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    //   - The file was removed as consequence of subsequent compaction<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    // so, we can't do anything with the "compaction output list" because those<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // files have already been loaded when opening the region (by virtue of<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    // being in the store's folder) or they may be missing due to a compaction.<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    String familyName = this.getColumnFamilyName();<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    List&lt;String&gt; inputFiles = new ArrayList&lt;String&gt;(compactionInputs.size());<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>    for (String compactionInput : compactionInputs) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>      Path inputPath = fs.getStoreFilePath(familyName, compactionInput);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      inputFiles.add(inputPath.getName());<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>    }<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span><a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    //some of the input files might already be deleted<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    List&lt;StoreFile&gt; inputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionInputs.size());<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    for (StoreFile sf : this.getStorefiles()) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (inputFiles.contains(sf.getPath().getName())) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        inputStoreFiles.add(sf);<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>    }<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span><a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    // check whether we need to pick up the new files<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>    List&lt;StoreFile&gt; outputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionOutputs.size());<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span><a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    if (pickCompactionFiles) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      for (StoreFile sf : this.getStorefiles()) {<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>        compactionOutputs.remove(sf.getPath().getName());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      for (String compactionOutput : compactionOutputs) {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), compactionOutput);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>        outputStoreFiles.add(storeFile);<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      }<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>    }<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span><a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    if (!inputStoreFiles.isEmpty() || !outputStoreFiles.isEmpty()) {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      LOG.info("Replaying compaction marker, replacing input files: " +<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>          inputStoreFiles + " with output files : " + outputStoreFiles);<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      this.replaceStoreFiles(inputStoreFiles, outputStoreFiles);<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      this.completeCompaction(inputStoreFiles);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>    }<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span><a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>  /**<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>   * This method tries to compact N recent files for testing.<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>   * Note that because compacting "recent" files only makes sense for some policies,<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>   * e.g. the default one, it assumes default policy is used. It doesn't use policy,<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>   * but instead makes a compaction candidate list by itself.<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>   * @param N Number of files.<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   */<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>  public void compactRecentForTestingAssumingDefaultPolicy(int N) throws IOException {<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>    List&lt;StoreFile&gt; filesToCompact;<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>    boolean isMajor;<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span><a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    this.lock.readLock().lock();<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    try {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      synchronized (filesCompacting) {<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>        filesToCompact = Lists.newArrayList(storeEngine.getStoreFileManager().getStorefiles());<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (!filesCompacting.isEmpty()) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          // exclude all files older than the newest file we're currently<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>          // compacting. this allows us to preserve contiguity (HBASE-2856)<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>          StoreFile last = filesCompacting.get(filesCompacting.size() - 1);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>          int idx = filesToCompact.indexOf(last);<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>          Preconditions.checkArgument(idx != -1);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>          filesToCompact.subList(0, idx + 1).clear();<a name="line.1460"></a>
 <span class="sourceLineNo">1461</span>        }<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        replaceStoreFiles(filesToCompact, Lists.newArrayList(sf));<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>        completeCompaction(filesToCompact);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    } finally {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>      synchronized (filesCompacting) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        filesCompacting.removeAll(filesToCompact);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  @Override<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>  public boolean hasReferences() {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    return StoreUtils.hasReferences(this.storeEngine.getStoreFileManager().getStorefiles());<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span><a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>  @Override<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public CompactionProgress getCompactionProgress() {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    return this.storeEngine.getCompactor().getProgress();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  @Override<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>  public boolean isMajorCompaction() throws IOException {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    for (StoreFile sf : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      // TODO: what are these reader checks all over the place?<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      if (sf.getReader() == null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>        LOG.debug("StoreFile " + sf + " has null Reader");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>        return false;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>    }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>    return storeEngine.getCompactionPolicy().isMajorCompaction(<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>        this.storeEngine.getStoreFileManager().getStorefiles());<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span><a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>  @Override<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>  public CompactionContext requestCompaction() throws IOException {<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    return requestCompaction(Store.NO_PRIORITY, null);<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  @Override<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  public CompactionContext requestCompaction(int priority, CompactionRequest baseRequest)<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      throws IOException {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    return requestCompaction(priority, baseRequest, null);<a name="line.1503"></a>
+<span class="sourceLineNo">1462</span>        int count = filesToCompact.size();<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        if (N &gt; count) {<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>          throw new RuntimeException("Not enough files");<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>        }<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span><a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        filesToCompact = filesToCompact.subList(count - N, count);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>        isMajor = (filesToCompact.size() == storeEngine.getStoreFileManager().getStorefileCount());<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>        filesCompacting.addAll(filesToCompact);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        Collections.sort(filesCompacting, StoreFile.Comparators.SEQ_ID);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>      }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    } finally {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      this.lock.readLock().unlock();<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span><a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    try {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      // Ready to go. Have list of files to compact.<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      List&lt;Path&gt; newFiles = ((DefaultCompactor)this.storeEngine.getCompactor())<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          .compactForTesting(filesToCompact, isMajor);<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      for (Path newFile: newFiles) {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Move the compaction into place.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        if (this.getCoprocessorHost() != null) {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          this.getCoprocessorHost().postCompact(this, sf, null);<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        replaceStoreFiles(filesToCompact, Lists.newArrayList(sf));<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>        completeCompaction(filesToCompact);<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      }<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    } finally {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      synchronized (filesCompacting) {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        filesCompacting.removeAll(filesToCompact);<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>    }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>  }<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span><a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>  @Override<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>  public boolean hasReferences() {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    return StoreUtils.hasReferences(this.storeEngine.getStoreFileManager().getStorefiles());<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>  }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span><a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>  @Override<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  public CompactionProgress getCompactionProgress() {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    return this.storeEngine.getCompactor().getProgress();<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span>  }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>  @Override<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>  public CompactionContext requestCompaction(int priority, final CompactionRequest baseRequest,<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      User user) throws IOException {<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // don't even select for compaction if writes are disabled<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    if (!this.areWritesEnabled()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>      return null;<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    // Before we do compaction, try to get rid of unneeded files to simplify things.<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    removeUnneededFiles();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span><a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    final CompactionContext compaction = storeEngine.createCompaction();<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    CompactionRequest request = null;<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    this.lock.readLock().lock();<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    try {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      synchronized (filesCompacting) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        final Store thisStore = this;<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>        // First, see if coprocessor would want to override selection.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        if (this.getCoprocessorHost() != nu

<TRUNCATED>

[26/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index 5e04712..e6f7370 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -37,7 +37,7 @@
 <span class="sourceLineNo">029</span>import java.util.concurrent.ExecutionException;<a name="line.29"></a>
 <span class="sourceLineNo">030</span>import java.util.concurrent.ExecutorCompletionService;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>import java.util.concurrent.Future;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.SynchronousQueue;<a name="line.32"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.LinkedBlockingQueue;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.util.concurrent.TimeUnit;<a name="line.34"></a>
 <span class="sourceLineNo">035</span><a name="line.35"></a>
@@ -121,243 +121,244 @@
 <span class="sourceLineNo">113</span>    // per sink thread pool<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    this.maxThreads = this.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,<a name="line.114"></a>
 <span class="sourceLineNo">115</span>      HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this.exec = new ThreadPoolExecutor(1, maxThreads, 60, TimeUnit.SECONDS,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        new SynchronousQueue&lt;Runnable&gt;());<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    this.replicationBulkLoadDataEnabled =<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>          HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    if (this.replicationBulkLoadDataEnabled) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    // Construct base namespace directory and hfile archive directory path<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private void decorateConf() {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private void connectToPeers() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    getRegionServers();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    int sleepMultiplier = 1;<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    // Connect to peer cluster first, unless we have to stop<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      replicationSinkMgr.chooseSinks();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>          sleepMultiplier++;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Do the sleeping logic<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param msg Why we sleep<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (LOG.isTraceEnabled()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    } catch (InterruptedException e) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<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>  /**<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Do the shipping logic<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public boolean replicate(ReplicateContext replicateContext) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    CompletionService&lt;Integer&gt; pool = new ExecutorCompletionService&lt;Integer&gt;(this.exec);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    List&lt;Entry&gt; entries = replicateContext.getEntries();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    String walGroupId = replicateContext.getWalGroupId();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    int sleepMultiplier = 1;<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      connectToPeers();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      peersSelected = true;<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>    if (replicationSinkMgr.getSinks().size() == 0) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return false;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    //  and number of current sinks<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1),<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      replicationSinkMgr.getSinks().size());<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (n == 1) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      entryLists.add(entries);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    } else {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      for (int i=0; i&lt;n; i++) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // now group by region<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      for (Entry e : entries) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    while (this.isRunning()) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (!isPeerEnabled()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          sleepMultiplier++;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        continue;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (LOG.isTraceEnabled()) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.trace("Replicating " + entries.size() +<a name="line.216"></a>
-<span class="sourceLineNo">217</span>              " entries of total size " + replicateContext.getSize());<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>        int futures = 0;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>            if (LOG.isTraceEnabled()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.224"></a>
-<span class="sourceLineNo">225</span>                  " entries of total size " + replicateContext.getSize());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>            }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            futures++;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        IOException iox = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>        for (int i=0; i&lt;futures; i++) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>            // wait for all futures, remove successful parts<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            // (only the remaining parts will be retried)<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>            entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          } catch (InterruptedException ie) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>            iox =  new IOException(ie);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          } catch (ExecutionException ee) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            // cause must be an IOException<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          // if we had any exceptions, try again<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          throw iox;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        // update metrics<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          walGroupId);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        return true;<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>      } catch (IOException ioe) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        // Didn't ship anything, but must still age the last time we did<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        if (ioe instanceof RemoteException) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          if (ioe instanceof TableNotFoundException) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.263"></a>
-<span class="sourceLineNo">264</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>              sleepMultiplier++;<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>        } else {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            // This exception means we waited for more than 60s and nothing<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            // happened, the cluster is alive and calling it right away<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            // even for a test just makes things worse.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.273"></a>
-<span class="sourceLineNo">274</span>              "call to the remote cluster timed out, which is usually " +<a name="line.274"></a>
-<span class="sourceLineNo">275</span>              "caused by a machine failure or a massive slowdown",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>              this.socketTimeoutMultiplier);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          } else if (ioe instanceof ConnectException) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            replicationSinkMgr.chooseSinks();<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          } else {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          sleepMultiplier++;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  protected void doStop() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    disconnect(); //don't call super.doStop()<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    if (this.conn != null) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      try {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        this.conn.close();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        this.conn = null;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      } catch (IOException e) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        LOG.warn("Failed to close the connection");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    exec.shutdownNow();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    notifyStopped();<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>  // is this needed? Nobody else will call doStop() otherwise<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  @Override<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public State stopAndWait() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    doStop();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return super.stopAndWait();<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>  @VisibleForTesting<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return new Replicator(entries, ordinal);<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>  @VisibleForTesting<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private List&lt;Entry&gt; entries;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int ordinal;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.entries = entries;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.ordinal = ordinal;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    public Integer call() throws IOException {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      SinkPeer sinkPeer = null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      try {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        return ordinal;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>      } catch (IOException ioe) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        if (sinkPeer != null) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        throw ioe;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>}<a name="line.352"></a>
+<span class="sourceLineNo">116</span>    this.exec = new ThreadPoolExecutor(maxThreads, maxThreads, 60, TimeUnit.SECONDS,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this.exec.allowCoreThreadTimeOut(true);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    this.replicationBulkLoadDataEnabled =<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    if (this.replicationBulkLoadDataEnabled) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // Construct base namespace directory and hfile archive directory path<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<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>  private void decorateConf() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<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><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private void connectToPeers() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    getRegionServers();<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    int sleepMultiplier = 1;<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // Connect to peer cluster first, unless we have to stop<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      replicationSinkMgr.chooseSinks();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>          sleepMultiplier++;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        }<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Do the sleeping logic<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @param msg Why we sleep<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (LOG.isTraceEnabled()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    } catch (InterruptedException e) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * Do the shipping logic<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  public boolean replicate(ReplicateContext replicateContext) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    CompletionService&lt;Integer&gt; pool = new ExecutorCompletionService&lt;Integer&gt;(this.exec);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    List&lt;Entry&gt; entries = replicateContext.getEntries();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    String walGroupId = replicateContext.getWalGroupId();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    int sleepMultiplier = 1;<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      connectToPeers();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      peersSelected = true;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    if (replicationSinkMgr.getSinks().size() == 0) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      return false;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    //  and number of current sinks<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1),<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      replicationSinkMgr.getSinks().size());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    if (n == 1) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      entryLists.add(entries);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    } else {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      for (int i=0; i&lt;n; i++) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // now group by region<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      for (Entry e : entries) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<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>    while (this.isRunning()) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!isPeerEnabled()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          sleepMultiplier++;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        continue;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      try {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        if (LOG.isTraceEnabled()) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          LOG.trace("Replicating " + entries.size() +<a name="line.217"></a>
+<span class="sourceLineNo">218</span>              " entries of total size " + replicateContext.getSize());<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>        int futures = 0;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>            if (LOG.isTraceEnabled()) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.225"></a>
+<span class="sourceLineNo">226</span>                  " entries of total size " + replicateContext.getSize());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>            futures++;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        IOException iox = null;<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>        for (int i=0; i&lt;futures; i++) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          try {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>            // wait for all futures, remove successful parts<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            // (only the remaining parts will be retried)<a name="line.238"></a>
+<span class="sourceLineNo">239</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>            entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          } catch (InterruptedException ie) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>            iox =  new IOException(ie);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          } catch (ExecutionException ee) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>            // cause must be an IOException<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          // if we had any exceptions, try again<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          throw iox;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // update metrics<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          walGroupId);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        return true;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      } catch (IOException ioe) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        // Didn't ship anything, but must still age the last time we did<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        if (ioe instanceof RemoteException) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          if (ioe instanceof TableNotFoundException) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.264"></a>
+<span class="sourceLineNo">265</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>              sleepMultiplier++;<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>        } else {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            // This exception means we waited for more than 60s and nothing<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            // happened, the cluster is alive and calling it right away<a name="line.272"></a>
+<span class="sourceLineNo">273</span>            // even for a test just makes things worse.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.274"></a>
+<span class="sourceLineNo">275</span>              "call to the remote cluster timed out, which is usually " +<a name="line.275"></a>
+<span class="sourceLineNo">276</span>              "caused by a machine failure or a massive slowdown",<a name="line.276"></a>
+<span class="sourceLineNo">277</span>              this.socketTimeoutMultiplier);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else if (ioe instanceof ConnectException) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            replicationSinkMgr.chooseSinks();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          } else {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          sleepMultiplier++;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<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>  @Override<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected void doStop() {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    disconnect(); //don't call super.doStop()<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    if (this.conn != null) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      try {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        this.conn.close();<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        this.conn = null;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      } catch (IOException e) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        LOG.warn("Failed to close the connection");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    exec.shutdownNow();<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    notifyStopped();<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>  // is this needed? Nobody else will call doStop() otherwise<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  public State stopAndWait() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    doStop();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return super.stopAndWait();<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>  @VisibleForTesting<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return new Replicator(entries, ordinal);<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>  @VisibleForTesting<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private List&lt;Entry&gt; entries;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    private int ordinal;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.entries = entries;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.ordinal = ordinal;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public Integer call() throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      SinkPeer sinkPeer = null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      try {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        return ordinal;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>      } catch (IOException ioe) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        if (sinkPeer != null) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throw ioe;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>}<a name="line.353"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 9eda00d..0d7d95a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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 = "filter", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.68"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,125 +116,125 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 24, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 24, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_deadServers = deadServers;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_deadServers__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_deadServers;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getDeadServers__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_deadServers__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_deadServers__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 22, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 22, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_metaLocation = metaLocation;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_metaLocation__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerName getMetaLocation()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_metaLocation;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerName m_metaLocation;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_metaLocation__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_metaLocation__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">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 26, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setFilter(String filter)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></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">148</span>      // 26, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_filter = filter;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_filter__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public String getFilter()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_filter;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></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">156</span>    private String m_filter;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getFilter__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_filter__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></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">161</span>    private boolean m_filter__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 25, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></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">165</span>      // 25, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public ServerManager getServerManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public boolean getCatalogJanitorEnabled()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_serverManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_catalogJanitorEnabled;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></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">173</span>    private boolean m_catalogJanitorEnabled;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 26, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFilter(String filter)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 29, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 26, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_filter = filter;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_filter__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 29, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_assignmentManager = assignmentManager;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_assignmentManager__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFilter()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public AssignmentManager getAssignmentManager()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_filter;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_assignmentManager;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_filter;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFilter__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private AssignmentManager m_assignmentManager;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_filter__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_assignmentManager__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_filter__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 28, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServerManager(ServerManager serverManager)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 28, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_serverManager = serverManager;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_serverManager__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public ServerManager getServerManager()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_serverManager;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private ServerManager m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServerManager__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_serverManager__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 27, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setFormat(String format)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 27, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_format = format;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_format__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public String getFormat()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_format;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private String m_format;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getFormat__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_format__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_format__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
 <span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
@@ -252,23 +252,23 @@
 <span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 21, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.248"></a>
+<span class="sourceLineNo">247</span>    // 24, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 21, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_frags = frags;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_frags__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 24, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_deadServers = deadServers;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_deadServers__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_frags;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_deadServers;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFrags__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getDeadServers__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_frags__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_deadServers__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_frags__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_deadServers__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,52 +280,52 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerName metaLocation;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<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 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">289</span>  protected String filter;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setFilter(p_filter);<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 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">296</span>  protected boolean catalogJanitorEnabled;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<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 String filter;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected AssignmentManager assignmentManager;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFilter(p_filter);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<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 boolean catalogJanitorEnabled;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected ServerManager serverManager;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected String format;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerName metaLocation;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setFormat(p_format);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
@@ -336,10 +336,10 @@
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setFrags(p_frags);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>


[32/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
index a92d846..93c22b9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -1050,7 +1050,7 @@
 <span class="sourceLineNo">1042</span>      this.lock.writeLock().unlock();<a name="line.1042"></a>
 <span class="sourceLineNo">1043</span>    }<a name="line.1043"></a>
 <span class="sourceLineNo">1044</span>    // notify to be called here - only in case of flushes<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    notifyChangedReadersObservers();<a name="line.1045"></a>
+<span class="sourceLineNo">1045</span>    notifyChangedReadersObservers(sfs);<a name="line.1045"></a>
 <span class="sourceLineNo">1046</span>    if (LOG.isTraceEnabled()) {<a name="line.1046"></a>
 <span class="sourceLineNo">1047</span>      long totalSize = 0;<a name="line.1047"></a>
 <span class="sourceLineNo">1048</span>      for (StoreFile sf : sfs) {<a name="line.1048"></a>
@@ -1068,9 +1068,9 @@
 <span class="sourceLineNo">1060</span>   * Notify all observers that set of Readers has changed.<a name="line.1060"></a>
 <span class="sourceLineNo">1061</span>   * @throws IOException<a name="line.1061"></a>
 <span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  private void notifyChangedReadersObservers() throws IOException {<a name="line.1063"></a>
+<span class="sourceLineNo">1063</span>  private void notifyChangedReadersObservers(List&lt;StoreFile&gt; sfs) throws IOException {<a name="line.1063"></a>
 <span class="sourceLineNo">1064</span>    for (ChangedReadersObserver o : this.changedReaderObservers) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      o.updateReaders();<a name="line.1065"></a>
+<span class="sourceLineNo">1065</span>      o.updateReaders(sfs);<a name="line.1065"></a>
 <span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
 <span class="sourceLineNo">1067</span>  }<a name="line.1067"></a>
 <span class="sourceLineNo">1068</span><a name="line.1068"></a>
@@ -1110,1283 +1110,1307 @@
 <span class="sourceLineNo">1102</span>  }<a name="line.1102"></a>
 <span class="sourceLineNo">1103</span><a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  @Override<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>  public void addChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    this.changedReaderObservers.add(o);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>  }<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span><a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>  @Override<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>  public void deleteChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    // We don't check if observer present; it may not be (legitimately)<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>    this.changedReaderObservers.remove(o);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  }<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span><a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  // Compaction<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  /**<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   * Compact the StoreFiles.  This method may take some time, so the calling<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>   * thread must be able to block for long periods.<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   *<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>   * &lt;p&gt;During this time, the Store can work as usual, getting values from<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>   * StoreFiles and writing new StoreFiles from the memstore.<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>   *<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>   * Existing StoreFiles are not destroyed until the new compacted StoreFile is<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>   * completely written-out to disk.<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>   *<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>   * &lt;p&gt;The compactLock prevents multiple simultaneous compactions.<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>   * The structureLock prevents us from interfering with other write operations.<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   *<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>   * &lt;p&gt;We don't want to hold the structureLock for the whole time, as a compact()<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>   * can be lengthy and we want to allow cache-flushes during this period.<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>   *<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>   * &lt;p&gt; Compaction event should be idempotent, since there is no IO Fencing for<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>   * the region directory in hdfs. A region server might still try to complete the<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * compaction after it lost the region. That is why the following events are carefully<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   * ordered for a compaction:<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>   *  1. Compaction writes new files under region/.tmp directory (compaction output)<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   *  2. Compaction atomically moves the temporary file under region directory<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>   *  3. Compaction appends a WAL edit containing the compaction input and output files.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>   *  Forces sync on WAL.<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>   *  4. Compaction deletes the input files from the region directory.<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>   *<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>   * Failure conditions are handled like this:<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>   *  - If RS fails before 2, compaction wont complete. Even if RS lives on and finishes<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>   *  the compaction later, it will only write the new data file to the region directory.<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>   *  Since we already have this data, this will be idempotent but we will have a redundant<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>   *  copy of the data.<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>   *  - If RS fails between 2 and 3, the region will have a redundant copy of the data. The<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>   *  RS that failed won't be able to finish snyc() for WAL because of lease recovery in WAL.<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>   *  - If RS fails after 3, the region region server who opens the region will pick up the<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>   *  the compaction marker from the WAL and replay it by removing the compaction input files.<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>   *  Failed RS can also attempt to delete those files, but the operation will be idempotent<a name="line.1154"></a>
+<span class="sourceLineNo">1105</span>  public List&lt;KeyValueScanner&gt; getScanners(List&lt;StoreFile&gt; files, boolean cacheBlocks,<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      boolean isGet, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher,<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>      byte[] startRow, byte[] stopRow, long readPt, boolean includeMemstoreScanner) throws IOException {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    List&lt;KeyValueScanner&gt; memStoreScanners = null;<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    if (includeMemstoreScanner) {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      this.lock.readLock().lock();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      try {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>        memStoreScanners = this.memstore.getScanners(readPt);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      } finally {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        this.lock.readLock().unlock();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    List&lt;StoreFileScanner&gt; sfScanners = StoreFileScanner.getScannersForStoreFiles(files,<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      cacheBlocks, usePread, isCompaction, false, matcher, readPt, isPrimaryReplicaStore());<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;KeyValueScanner&gt;(sfScanners.size() + 1);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    scanners.addAll(sfScanners);<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    // Then the memstore scanners<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>    if (memStoreScanners != null) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      scanners.addAll(memStoreScanners);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>    }<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    return scanners;<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>  @Override<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  public void addChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    this.changedReaderObservers.add(o);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>  @Override<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>  public void deleteChangedReaderObserver(ChangedReadersObserver o) {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>    // We don't check if observer present; it may not be (legitimately)<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    this.changedReaderObservers.remove(o);<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  }<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span><a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>  // Compaction<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>  /**<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>   * Compact the StoreFiles.  This method may take some time, so the calling<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>   * thread must be able to block for long periods.<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>   *<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>   * &lt;p&gt;During this time, the Store can work as usual, getting values from<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>   * StoreFiles and writing new StoreFiles from the memstore.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>   *<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>   * Existing StoreFiles are not destroyed until the new compacted StoreFile is<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>   * completely written-out to disk.<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>   *<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>   * &lt;p&gt;The compactLock prevents multiple simultaneous compactions.<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>   * The structureLock prevents us from interfering with other write operations.<a name="line.1154"></a>
 <span class="sourceLineNo">1155</span>   *<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>   * See HBASE-2231 for details.<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>   *<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   * @param compaction compaction details obtained from requestCompaction()<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>   * @throws IOException<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>   * @return Storefile we compacted into or null if we failed or opted out early.<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>   */<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>  @Override<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      CompactionThroughputController throughputController) throws IOException {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    return compact(compaction, throughputController, null);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>  }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span><a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  @Override<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    CompactionThroughputController throughputController, User user) throws IOException {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    assert compaction != null;<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    List&lt;StoreFile&gt; sfs = null;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    CompactionRequest cr = compaction.getRequest();<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    try {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>      // Do all sanity checking in here if we have a valid CompactionRequest<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      // because we need to clean up after it on the way out in a finally<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>      // block below<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      long compactionStartTime = EnvironmentEdgeManager.currentTime();<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      assert compaction.hasSelection();<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      Collection&lt;StoreFile&gt; filesToCompact = cr.getFiles();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      assert !filesToCompact.isEmpty();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      synchronized (filesCompacting) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>        // sanity check: we're compacting files that this store knows about<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>        // TODO: change this to LOG.error() after more debugging<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>        Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      // Ready to go. Have list of files to compact.<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>          + this + " of " + this.getRegionInfo().getRegionNameAsString()<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>          + " into tmpdir=" + fs.getTempDir() + ", totalSize="<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>          + TraditionalBinaryPrefix.long2String(cr.getSize(), "", 1));<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>      // Commence the compaction.<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      List&lt;Path&gt; newFiles = compaction.compact(throughputController, user);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span><a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      // TODO: get rid of this!<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>      if (!this.conf.getBoolean("hbase.hstore.compaction.complete", true)) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        LOG.warn("hbase.hstore.compaction.complete is set to false");<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>        sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>        final boolean evictOnClose =<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>            cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>        for (Path newFile : newFiles) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>          // Create storefile around what we wrote with a reader on it.<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          StoreFile sf = createStoreFileAndReader(newFile);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          sf.closeReader(evictOnClose);<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          sfs.add(sf);<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>        }<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>        return sfs;<a name="line.1209"></a>
+<span class="sourceLineNo">1156</span>   * &lt;p&gt;We don't want to hold the structureLock for the whole time, as a compact()<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>   * can be lengthy and we want to allow cache-flushes during this period.<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>   *<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>   * &lt;p&gt; Compaction event should be idempotent, since there is no IO Fencing for<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>   * the region directory in hdfs. A region server might still try to complete the<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>   * compaction after it lost the region. That is why the following events are carefully<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>   * ordered for a compaction:<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>   *  1. Compaction writes new files under region/.tmp directory (compaction output)<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>   *  2. Compaction atomically moves the temporary file under region directory<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>   *  3. Compaction appends a WAL edit containing the compaction input and output files.<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>   *  Forces sync on WAL.<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>   *  4. Compaction deletes the input files from the region directory.<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>   *<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>   * Failure conditions are handled like this:<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>   *  - If RS fails before 2, compaction wont complete. Even if RS lives on and finishes<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>   *  the compaction later, it will only write the new data file to the region directory.<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>   *  Since we already have this data, this will be idempotent but we will have a redundant<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>   *  copy of the data.<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>   *  - If RS fails between 2 and 3, the region will have a redundant copy of the data. The<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>   *  RS that failed won't be able to finish snyc() for WAL because of lease recovery in WAL.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   *  - If RS fails after 3, the region region server who opens the region will pick up the<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   *  the compaction marker from the WAL and replay it by removing the compaction input files.<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>   *  Failed RS can also attempt to delete those files, but the operation will be idempotent<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>   *<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>   * See HBASE-2231 for details.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>   *<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>   * @param compaction compaction details obtained from requestCompaction()<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>   * @throws IOException<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>   * @return Storefile we compacted into or null if we failed or opted out early.<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>   */<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  @Override<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>      CompactionThroughputController throughputController) throws IOException {<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    return compact(compaction, throughputController, null);<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  }<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span><a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  @Override<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>  public List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    CompactionThroughputController throughputController, User user) throws IOException {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    assert compaction != null;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    List&lt;StoreFile&gt; sfs = null;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    CompactionRequest cr = compaction.getRequest();<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>    try {<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      // Do all sanity checking in here if we have a valid CompactionRequest<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>      // because we need to clean up after it on the way out in a finally<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      // block below<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      long compactionStartTime = EnvironmentEdgeManager.currentTime();<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      assert compaction.hasSelection();<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      Collection&lt;StoreFile&gt; filesToCompact = cr.getFiles();<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>      assert !filesToCompact.isEmpty();<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      synchronized (filesCompacting) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>        // sanity check: we're compacting files that this store knows about<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>        // TODO: change this to LOG.error() after more debugging<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>        Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));<a name="line.1209"></a>
 <span class="sourceLineNo">1210</span>      }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      // Do the steps necessary to complete the compaction.<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      sfs = moveCompatedFilesIntoPlace(cr, newFiles, user);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      writeCompactionWalRecord(filesToCompact, sfs);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      replaceStoreFiles(filesToCompact, sfs);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (cr.isMajor()) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        majorCompactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        majorCompactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        compactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        compactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      }<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>      // At this point the store will use new files for all new scanners.<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      completeCompaction(filesToCompact); // update store size.<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span><a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      logCompactionEndMessage(cr, sfs, compactionStartTime);<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      return sfs;<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    } finally {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      finishCompactionRequest(cr);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>  }<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span><a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>  private List&lt;StoreFile&gt; moveCompatedFilesIntoPlace(<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      final CompactionRequest cr, List&lt;Path&gt; newFiles, User user) throws IOException {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>    List&lt;StoreFile&gt; sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    for (Path newFile : newFiles) {<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      assert newFile != null;<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      final StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>      if (this.getCoprocessorHost() != null) {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>        final Store thisStore = this;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>        if (user == null) {<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>          getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>        } else {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          try {<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>            user.getUGI().doAs(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>              @Override<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>              public Void run() throws Exception {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>                getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>                return null;<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>              }<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>            });<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>          } catch (InterruptedException ie) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>            InterruptedIOException iioe = new InterruptedIOException();<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>            iioe.initCause(ie);<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>            throw iioe;<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>          }<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>        }<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      assert sf != null;<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      sfs.add(sf);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>    return sfs;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>  }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span><a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>  // Package-visible for tests<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>  StoreFile moveFileIntoPlace(final Path newFile) throws IOException {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    validateStoreFile(newFile);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    // Move the file into the right spot<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    Path destPath = fs.commitStoreFile(getColumnFamilyName(), newFile);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    return createStoreFileAndReader(destPath);<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>  }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span><a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  /**<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>   * Writes the compaction WAL record.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * @param filesCompacted Files compacted (input).<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * @param newFiles Files from compaction.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   */<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>  private void writeCompactionWalRecord(Collection&lt;StoreFile&gt; filesCompacted,<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>      Collection&lt;StoreFile&gt; newFiles) throws IOException {<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    if (region.getWAL() == null) return;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    List&lt;Path&gt; inputPaths = new ArrayList&lt;Path&gt;(filesCompacted.size());<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    for (StoreFile f : filesCompacted) {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      inputPaths.add(f.getPath());<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    List&lt;Path&gt; outputPaths = new ArrayList&lt;Path&gt;(newFiles.size());<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    for (StoreFile f : newFiles) {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      outputPaths.add(f.getPath());<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>    }<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    HRegionInfo info = this.region.getRegionInfo();<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    CompactionDescriptor compactionDescriptor = ProtobufUtil.toCompactionDescriptor(info,<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>        family.getName(), inputPaths, outputPaths, fs.getStoreDir(getFamily().getNameAsString()));<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>    WALUtil.writeCompactionMarker(region.getWAL(), this.region.getTableDesc(),<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>        this.region.getRegionInfo(), compactionDescriptor, region.getMVCC());<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  }<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  @VisibleForTesting<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>  void replaceStoreFiles(final Collection&lt;StoreFile&gt; compactedFiles,<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      final Collection&lt;StoreFile&gt; result) throws IOException {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    this.lock.writeLock().lock();<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    try {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>      this.storeEngine.getStoreFileManager().addCompactionResults(compactedFiles, result);<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      filesCompacting.removeAll(compactedFiles); // safe bc: lock.writeLock();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    } finally {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      this.lock.writeLock().unlock();<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    }<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  }<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /**<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * Log a very elaborate compaction completion message.<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * @param cr Request.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   * @param sfs Resulting files.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>   * @param compactionStartTime Start time.<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>   */<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>  private void logCompactionEndMessage(<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      CompactionRequest cr, List&lt;StoreFile&gt; sfs, long compactionStartTime) {<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    StringBuilder message = new StringBuilder(<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      "Completed" + (cr.isMajor() ? " major" : "") + " compaction of "<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      + cr.getFiles().size() + (cr.isAllFiles() ? " (all)" : "") + " file(s) in "<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>      + this + " of " + this.getRegionInfo().getRegionNameAsString() + " into ");<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>    if (sfs.isEmpty()) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>      message.append("none, ");<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    } else {<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>      for (StoreFile sf: sfs) {<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        message.append(sf.getPath().getName());<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        message.append("(size=");<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>        message.append(TraditionalBinaryPrefix.long2String(sf.getReader().length(), "", 1));<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>        message.append("), ");<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>      }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    message.append("total size for store is ")<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>      .append(StringUtils.TraditionalBinaryPrefix.long2String(storeSize, "", 1))<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      .append(". This selection was in queue for ")<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      .append(StringUtils.formatTimeDiff(compactionStartTime, cr.getSelectionTime()))<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      .append(", and took ").append(StringUtils.formatTimeDiff(now, compactionStartTime))<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      .append(" to execute.");<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    LOG.info(message.toString());<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    if (LOG.isTraceEnabled()) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      int fileCount = storeEngine.getStoreFileManager().getStorefileCount();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>      long resultSize = 0;<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>      for (StoreFile sf : sfs) {<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>        resultSize += sf.getReader().length();<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      }<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      String traceMessage = "COMPACTION start,end,size out,files in,files out,store size,"<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        + "store files [" + compactionStartTime + "," + now + "," + resultSize + ","<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>          + cr.getFiles().size() + "," + sfs.size() + "," +  storeSize + "," + fileCount + "]";<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>      LOG.trace(traceMessage);<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    }<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  }<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span><a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>  /**<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>   * Call to complete a compaction. Its for the case where we find in the WAL a compaction<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>   * that was not finished.  We could find one recovering a WAL after a regionserver crash.<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>   * See HBASE-2231.<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>   * @param compaction<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>   */<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>  @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>  public void replayCompactionMarker(CompactionDescriptor compaction,<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      boolean pickCompactionFiles, boolean removeFiles)<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      throws IOException {<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    LOG.debug("Completing compaction from the WAL marker");<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    List&lt;String&gt; compactionInputs = compaction.getCompactionInputList();<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    List&lt;String&gt; compactionOutputs = Lists.newArrayList(compaction.getCompactionOutputList());<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span><a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    // The Compaction Marker is written after the compaction is completed,<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    // and the files moved into the region/family folder.<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    //<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    // If we crash after the entry is written, we may not have removed the<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    // input files, but the output file is present.<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    // (The unremoved input files will be removed by this function)<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    //<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    // If we scan the directory and the file is not present, it can mean that:<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    //   - The file was manually removed by the user<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>    //   - The file was removed as consequence of subsequent compaction<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    // so, we can't do anything with the "compaction output list" because those<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    // files have already been loaded when opening the region (by virtue of<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>    // being in the store's folder) or they may be missing due to a compaction.<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span><a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    String familyName = this.getColumnFamilyName();<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    List&lt;String&gt; inputFiles = new ArrayList&lt;String&gt;(compactionInputs.size());<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    for (String compactionInput : compactionInputs) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      Path inputPath = fs.getStoreFilePath(familyName, compactionInput);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      inputFiles.add(inputPath.getName());<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>    }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    //some of the input files might already be deleted<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    List&lt;StoreFile&gt; inputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionInputs.size());<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    for (StoreFile sf : this.getStorefiles()) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      if (inputFiles.contains(sf.getPath().getName())) {<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        inputStoreFiles.add(sf);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span><a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    // check whether we need to pick up the new files<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    List&lt;StoreFile&gt; outputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionOutputs.size());<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    if (pickCompactionFiles) {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>      for (StoreFile sf : this.getStorefiles()) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>        compactionOutputs.remove(sf.getPath().getName());<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      }<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      for (String compactionOutput : compactionOutputs) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), compactionOutput);<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        outputStoreFiles.add(storeFile);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span><a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    if (!inputStoreFiles.isEmpty() || !outputStoreFiles.isEmpty()) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      LOG.info("Replaying compaction marker, replacing input files: " +<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>          inputStoreFiles + " with output files : " + outputStoreFiles);<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>      this.replaceStoreFiles(inputStoreFiles, outputStoreFiles);<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      this.completeCompaction(inputStoreFiles);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>    }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  /**<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * This method tries to compact N recent files for testing.<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   * Note that because compacting "recent" files only makes sense for some policies,<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   * e.g. the default one, it assumes default policy is used. It doesn't use policy,<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>   * but instead makes a compaction candidate list by itself.<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>   * @param N Number of files.<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>   */<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>  public void compactRecentForTestingAssumingDefaultPolicy(int N) throws IOException {<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    List&lt;StoreFile&gt; filesToCompact;<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>    boolean isMajor;<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span><a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    this.lock.readLock().lock();<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    try {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>      synchronized (filesCompacting) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        filesToCompact = Lists.newArrayList(storeEngine.getStoreFileManager().getStorefiles());<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        if (!filesCompacting.isEmpty()) {<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          // exclude all files older than the newest file we're currently<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>          // compacting. this allows us to preserve contiguity (HBASE-2856)<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>          StoreFile last = filesCompacting.get(filesCompacting.size() - 1);<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>          int idx = filesToCompact.indexOf(last);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          Preconditions.checkArgument(idx != -1);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>          filesToCompact.subList(0, idx + 1).clear();<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>        int count = filesToCompact.size();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        if (N &gt; count) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>          throw new RuntimeException("Not enough files");<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>        }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span><a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>        filesToCompact = filesToCompact.subList(count - N, count);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>        isMajor = (filesToCompact.size() == storeEngine.getStoreFileManager().getStorefileCount());<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>        filesCompacting.addAll(filesToCompact);<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        Collections.sort(filesCompacting, StoreFile.Comparators.SEQ_ID);<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>    } finally {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>      this.lock.readLock().unlock();<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span><a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>    try {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>      // Ready to go. Have list of files to compact.<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>      List&lt;Path&gt; newFiles = ((DefaultCompactor)this.storeEngine.getCompactor())<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>          .compactForTesting(filesToCompact, isMajor);<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>      for (Path newFile: newFiles) {<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        // Move the compaction into place.<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        if (this.getCoprocessorHost() != null) {<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>          this.getCoprocessorHost().postCompact(this, sf, null);<a name="line.1460"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      // Ready to go. Have list of files to compact.<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      LOG.info("Starting compaction of " + filesToCompact.size() + " file(s) in "<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>          + this + " of " + this.getRegionInfo().getRegionNameAsString()<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>          + " into tmpdir=" + fs.getTempDir() + ", totalSize="<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>          + TraditionalBinaryPrefix.long2String(cr.getSize(), "", 1));<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span><a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      // Commence the compaction.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      List&lt;Path&gt; newFiles = compaction.compact(throughputController, user);<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span><a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      // TODO: get rid of this!<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      if (!this.conf.getBoolean("hbase.hstore.compaction.complete", true)) {<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>        LOG.warn("hbase.hstore.compaction.complete is set to false");<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>        sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>        final boolean evictOnClose =<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>            cacheConf != null? cacheConf.shouldEvictOnClose(): true;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>        for (Path newFile : newFiles) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>          // Create storefile around what we wrote with a reader on it.<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>          StoreFile sf = createStoreFileAndReader(newFile);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>          sf.closeReader(evictOnClose);<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>          sfs.add(sf);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>        }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        return sfs;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      // Do the steps necessary to complete the compaction.<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      sfs = moveCompatedFilesIntoPlace(cr, newFiles, user);<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      writeCompactionWalRecord(filesToCompact, sfs);<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      replaceStoreFiles(filesToCompact, sfs);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      if (cr.isMajor()) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>        majorCompactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>        majorCompactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      } else {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>        compactedCellsCount += getCompactionProgress().totalCompactingKVs;<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        compactedCellsSize += getCompactionProgress().totalCompactedSize;<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      }<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      // At this point the store will use new files for all new scanners.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      completeCompaction(filesToCompact); // update store size.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span><a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      logCompactionEndMessage(cr, sfs, compactionStartTime);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      return sfs;<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    } finally {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      finishCompactionRequest(cr);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    }<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span><a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>  private List&lt;StoreFile&gt; moveCompatedFilesIntoPlace(<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      final CompactionRequest cr, List&lt;Path&gt; newFiles, User user) throws IOException {<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    List&lt;StoreFile&gt; sfs = new ArrayList&lt;StoreFile&gt;(newFiles.size());<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    for (Path newFile : newFiles) {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      assert newFile != null;<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>      final StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      if (this.getCoprocessorHost() != null) {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>        final Store thisStore = this;<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        if (user == null) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        } else {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>          try {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>            user.getUGI().doAs(new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>              @Override<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>              public Void run() throws Exception {<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>                getCoprocessorHost().postCompact(thisStore, sf, cr);<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>                return null;<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>              }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>            });<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          } catch (InterruptedException ie) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            InterruptedIOException iioe = new InterruptedIOException();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>            iioe.initCause(ie);<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            throw iioe;<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      assert sf != null;<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      sfs.add(sf);<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>    }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    return sfs;<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  }<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span><a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>  // Package-visible for tests<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  StoreFile moveFileIntoPlace(final Path newFile) throws IOException {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>    validateStoreFile(newFile);<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    // Move the file into the right spot<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    Path destPath = fs.commitStoreFile(getColumnFamilyName(), newFile);<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    return createStoreFileAndReader(destPath);<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  }<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span><a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  /**<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>   * Writes the compaction WAL record.<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>   * @param filesCompacted Files compacted (input).<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>   * @param newFiles Files from compaction.<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  private void writeCompactionWalRecord(Collection&lt;StoreFile&gt; filesCompacted,<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      Collection&lt;StoreFile&gt; newFiles) throws IOException {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    if (region.getWAL() == null) return;<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    List&lt;Path&gt; inputPaths = new ArrayList&lt;Path&gt;(filesCompacted.size());<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>    for (StoreFile f : filesCompacted) {<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>      inputPaths.add(f.getPath());<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    List&lt;Path&gt; outputPaths = new ArrayList&lt;Path&gt;(newFiles.size());<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    for (StoreFile f : newFiles) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>      outputPaths.add(f.getPath());<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    }<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    HRegionInfo info = this.region.getRegionInfo();<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    CompactionDescriptor compactionDescriptor = ProtobufUtil.toCompactionDescriptor(info,<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>        family.getName(), inputPaths, outputPaths, fs.getStoreDir(getFamily().getNameAsString()));<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    WALUtil.writeCompactionMarker(region.getWAL(), this.region.getTableDesc(),<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>        this.region.getRegionInfo(), compactionDescriptor, region.getMVCC());<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>  @VisibleForTesting<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  void replaceStoreFiles(final Collection&lt;StoreFile&gt; compactedFiles,<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      final Collection&lt;StoreFile&gt; result) throws IOException {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    this.lock.writeLock().lock();<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    try {<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>      this.storeEngine.getStoreFileManager().addCompactionResults(compactedFiles, result);<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>      filesCompacting.removeAll(compactedFiles); // safe bc: lock.writeLock();<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    } finally {<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>      this.lock.writeLock().unlock();<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>    }<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>  }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span><a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>  /**<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>   * Log a very elaborate compaction completion message.<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>   * @param cr Request.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>   * @param sfs Resulting files.<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>   * @param compactionStartTime Start time.<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>   */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>  private void logCompactionEndMessage(<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      CompactionRequest cr, List&lt;StoreFile&gt; sfs, long compactionStartTime) {<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    StringBuilder message = new StringBuilder(<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      "Completed" + (cr.isMajor() ? " major" : "") + " compaction of "<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>      + cr.getFiles().size() + (cr.isAllFiles() ? " (all)" : "") + " file(s) in "<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>      + this + " of " + this.getRegionInfo().getRegionNameAsString() + " into ");<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>    if (sfs.isEmpty()) {<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>      message.append("none, ");<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    } else {<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>      for (StoreFile sf: sfs) {<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>        message.append(sf.getPath().getName());<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>        message.append("(size=");<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>        message.append(TraditionalBinaryPrefix.long2String(sf.getReader().length(), "", 1));<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>        message.append("), ");<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      }<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    }<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>    message.append("total size for store is ")<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>      .append(StringUtils.TraditionalBinaryPrefix.long2String(storeSize, "", 1))<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>      .append(". This selection was in queue for ")<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>      .append(StringUtils.formatTimeDiff(compactionStartTime, cr.getSelectionTime()))<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>      .append(", and took ").append(StringUtils.formatTimeDiff(now, compactionStartTime))<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>      .append(" to execute.");<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>    LOG.info(message.toString());<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    if (LOG.isTraceEnabled()) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      int fileCount = storeEngine.getStoreFileManager().getStorefileCount();<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>      long resultSize = 0;<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>      for (StoreFile sf : sfs) {<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>        resultSize += sf.getReader().length();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      String traceMessage = "COMPACTION start,end,size out,files in,files out,store size,"<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        + "store files [" + compactionStartTime + "," + now + "," + resultSize + ","<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          + cr.getFiles().size() + "," + sfs.size() + "," +  storeSize + "," + fileCount + "]";<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      LOG.trace(traceMessage);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>   * Call to complete a compaction. Its for the case where we find in the WAL a compaction<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>   * that was not finished.  We could find one recovering a WAL after a regionserver crash.<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * See HBASE-2231.<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * @param compaction<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   */<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>  @Override<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public void replayCompactionMarker(CompactionDescriptor compaction,<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      boolean pickCompactionFiles, boolean removeFiles)<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      throws IOException {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>    LOG.debug("Completing compaction from the WAL marker");<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    List&lt;String&gt; compactionInputs = compaction.getCompactionInputList();<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    List&lt;String&gt; compactionOutputs = Lists.newArrayList(compaction.getCompactionOutputList());<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span><a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    // The Compaction Marker is written after the compaction is completed,<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    // and the files moved into the region/family folder.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    //<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>    // If we crash after the entry is written, we may not have removed the<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>    // input files, but the output file is present.<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    // (The unremoved input files will be removed by this function)<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>    //<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    // If we scan the directory and the file is not present, it can mean that:<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>    //   - The file was manually removed by the user<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    //   - The file was removed as consequence of subsequent compaction<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    // so, we can't do anything with the "compaction output list" because those<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>    // files have already been loaded when opening the region (by virtue of<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    // being in the store's folder) or they may be missing due to a compaction.<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    String familyName = this.getColumnFamilyName();<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    List&lt;String&gt; inputFiles = new ArrayList&lt;String&gt;(compactionInputs.size());<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>    for (String compactionInput : compactionInputs) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>      Path inputPath = fs.getStoreFilePath(familyName, compactionInput);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      inputFiles.add(inputPath.getName());<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>    }<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span><a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    //some of the input files might already be deleted<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    List&lt;StoreFile&gt; inputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionInputs.size());<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    for (StoreFile sf : this.getStorefiles()) {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (inputFiles.contains(sf.getPath().getName())) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        inputStoreFiles.add(sf);<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>    }<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span><a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    // check whether we need to pick up the new files<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>    List&lt;StoreFile&gt; outputStoreFiles = new ArrayList&lt;StoreFile&gt;(compactionOutputs.size());<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span><a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>    if (pickCompactionFiles) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      for (StoreFile sf : this.getStorefiles()) {<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>        compactionOutputs.remove(sf.getPath().getName());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      for (String compactionOutput : compactionOutputs) {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), compactionOutput);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>        outputStoreFiles.add(storeFile);<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      }<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>    }<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span><a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    if (!inputStoreFiles.isEmpty() || !outputStoreFiles.isEmpty()) {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      LOG.info("Replaying compaction marker, replacing input files: " +<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>          inputStoreFiles + " with output files : " + outputStoreFiles);<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      this.replaceStoreFiles(inputStoreFiles, outputStoreFiles);<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      this.completeCompaction(inputStoreFiles);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>    }<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span><a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>  /**<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>   * This method tries to compact N recent files for testing.<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>   * Note that because compacting "recent" files only makes sense for some policies,<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>   * e.g. the default one, it assumes default policy is used. It doesn't use policy,<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>   * but instead makes a compaction candidate list by itself.<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>   * @param N Number of files.<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   */<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>  public void compactRecentForTestingAssumingDefaultPolicy(int N) throws IOException {<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>    List&lt;StoreFile&gt; filesToCompact;<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>    boolean isMajor;<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span><a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    this.lock.readLock().lock();<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    try {<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      synchronized (filesCompacting) {<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>        filesToCompact = Lists.newArrayList(storeEngine.getStoreFileManager().getStorefiles());<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (!filesCompacting.isEmpty()) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          // exclude all files older than the newest file we're currently<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>          // compacting. this allows us to preserve contiguity (HBASE-2856)<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>          StoreFile last = filesCompacting.get(filesCompacting.size() - 1);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>          int idx = filesToCompact.indexOf(last);<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>          Preconditions.checkArgument(idx != -1);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>          filesToCompact.subList(0, idx + 1).clear();<a name="line.1460"></a>
 <span class="sourceLineNo">1461</span>        }<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        replaceStoreFiles(filesToCompact, Lists.newArrayList(sf));<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>        completeCompaction(filesToCompact);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    } finally {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>      synchronized (filesCompacting) {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        filesCompacting.removeAll(filesToCompact);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  @Override<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>  public boolean hasReferences() {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    return StoreUtils.hasReferences(this.storeEngine.getStoreFileManager().getStorefiles());<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span><a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>  @Override<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public CompactionProgress getCompactionProgress() {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    return this.storeEngine.getCompactor().getProgress();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  @Override<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>  public boolean isMajorCompaction() throws IOException {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    for (StoreFile sf : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      // TODO: what are these reader checks all over the place?<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      if (sf.getReader() == null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>        LOG.debug("StoreFile " + sf + " has null Reader");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>        return false;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>    }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>    return storeEngine.getCompactionPolicy().isMajorCompaction(<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>        this.storeEngine.getStoreFileManager().getStorefiles());<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span><a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>  @Override<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>  public CompactionContext requestCompaction() throws IOException {<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    return requestCompaction(Store.NO_PRIORITY, null);<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  @Override<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  public CompactionContext requestCompaction(int priority, CompactionRequest baseRequest)<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      throws IOException {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    return requestCompaction(priority, baseRequest, null);<a name="line.1503"></a>
+<span class="sourceLineNo">1462</span>        int count = filesToCompact.size();<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        if (N &gt; count) {<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>          throw new RuntimeException("Not enough files");<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>        }<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span><a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        filesToCompact = filesToCompact.subList(count - N, count);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>        isMajor = (filesToCompact.size() == storeEngine.getStoreFileManager().getStorefileCount());<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>        filesCompacting.addAll(filesToCompact);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        Collections.sort(filesCompacting, StoreFile.Comparators.SEQ_ID);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>      }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    } finally {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      this.lock.readLock().unlock();<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span><a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    try {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      // Ready to go. Have list of files to compact.<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      List&lt;Path&gt; newFiles = ((DefaultCompactor)this.storeEngine.getCompactor())<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          .compactForTesting(filesToCompact, isMajor);<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      for (Path newFile: newFiles) {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Move the compaction into place.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        StoreFile sf = moveFileIntoPlace(newFile);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        if (this.getCoprocessorHost() != null) {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          this.getCoprocessorHost().postCompact(this, sf, null);<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        replaceStoreFiles(filesToCompact, Lists.newArrayList(sf));<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>        completeCompaction(filesToCompact);<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      }<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    } finally {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      synchronized (filesCompacting) {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        filesCompacting.removeAll(filesToCompact);<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>    }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>  }<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span><a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>  @Override<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>  public boolean hasReferences() {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    return StoreUtils.hasReferences(this.storeEngine.getStoreFileManager().getStorefiles());<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>  }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span><a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>  @Override<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  public CompactionProgress getCompactionProgress() {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    return this.storeEngine.getCompactor().getProgress();<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span>  }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>  @Override<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>  public CompactionContext requestCompaction(int priority, final CompactionRequest baseRequest,<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      User user) throws IOException {<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // don't even select for compaction if writes are disabled<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    if (!this.areWritesEnabled()) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>      return null;<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    // Before we do compaction, try to get rid of unneeded files to simplify things.<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    removeUnneededFiles();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span><a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    final CompactionContext compaction = storeEngine.createCompaction();<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    CompactionRequest request = null;<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    this.lock.readLock().lock();<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    try {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      synchronized (filesCompacting) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        final Store thisStore = this;<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>        // First, see if coprocessor would want to override selection.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        if (this.getCoprocessorHost() != null) {<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>          final 

<TRUNCATED>

[34/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 2e5830d..18ada45 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/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/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.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/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/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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 04dfd20..786ade2 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html
index 2674de5..09ac1a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html
@@ -268,34 +268,35 @@
 <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>  public double getHitRatioPastNPeriods() {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    double ratio = ((double)sum(hitCounts)/(double)sum(requestCounts));<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return Double.isNaN(ratio) ? 0 : ratio;<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>  public double getHitCachingRatioPastNPeriods() {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    double ratio =<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      ((double)sum(hitCachingCounts)/(double)sum(requestCachingCounts));<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    return Double.isNaN(ratio) ? 0 : ratio;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  public AgeSnapshot getAgeAtEvictionSnapshot() {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    return new AgeSnapshot(this.ageAtEviction);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>  private static long sum(long [] counts) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    long sum = 0;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    for (long count : counts) sum += count;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return sum;<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>  private static long [] initializeZeros(int n) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    long [] zeros = new long [n];<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    for (int i=0; i&lt;n; i++) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      zeros[i] = 0L;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    return zeros;<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">263</span>    double ratio = ((double)getSumHitCountsPastNPeriods() /<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        (double)getSumRequestCountsPastNPeriods());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return Double.isNaN(ratio) ? 0 : ratio;<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>  public double getHitCachingRatioPastNPeriods() {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    double ratio = ((double)getSumHitCachingCountsPastNPeriods() /<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        (double)getSumRequestCachingCountsPastNPeriods());<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return Double.isNaN(ratio) ? 0 : ratio;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  public AgeSnapshot getAgeAtEvictionSnapshot() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    return new AgeSnapshot(this.ageAtEviction);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private static long sum(long [] counts) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    long sum = 0;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    for (long count : counts) sum += count;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return sum;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  private static long [] initializeZeros(int n) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    long [] zeros = new long [n];<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    for (int i=0; i&lt;n; i++) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      zeros[i] = 0L;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return zeros;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
index dc894d8..1cc5963 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
@@ -211,52 +211,68 @@
 <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>    @Override<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    public double getHitRatioPastNPeriods() {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      double ratio = ((double) (lruCacheStats.getSumHitCountsPastNPeriods() + bucketCacheStats<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          .getSumHitCountsPastNPeriods()) / (double) (lruCacheStats<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          .getSumRequestCountsPastNPeriods() + bucketCacheStats<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          .getSumRequestCountsPastNPeriods()));<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return Double.isNaN(ratio) ? 0 : ratio;<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>    @Override<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    public double getHitCachingRatioPastNPeriods() {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      double ratio = ((double) (lruCacheStats<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          .getSumHitCachingCountsPastNPeriods() + bucketCacheStats<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          .getSumHitCachingCountsPastNPeriods()) / (double) (lruCacheStats<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          .getSumRequestCachingCountsPastNPeriods() + bucketCacheStats<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          .getSumRequestCachingCountsPastNPeriods()));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      return Double.isNaN(ratio) ? 0 : ratio;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  @Override<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return new BlockCachesIterator(getBlockCaches());<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>  @Override<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public BlockCache[] getBlockCaches() {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    return new BlockCache [] {this.lruCache, this.l2Cache};<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>  @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void setMaxSize(long size) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    this.lruCache.setMaxSize(size);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public void returnBlock(BlockCacheKey cacheKey, Cacheable block) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    // A noop<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    this.lruCache.returnBlock(cacheKey, block);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.l2Cache.returnBlock(cacheKey, block);<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>  @VisibleForTesting<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public int getRefCount(BlockCacheKey cacheKey) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    return ((BucketCache) this.l2Cache).getRefCount(cacheKey);<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">206</span>    public void rollMetricsPeriod() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      lruCacheStats.rollMetricsPeriod();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      bucketCacheStats.rollMetricsPeriod();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    <a name="line.210"></a>
+<span class="sourceLineNo">211</span>    @Override<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    public long getFailedInserts() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      return lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>    @Override<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    public long getSumHitCountsPastNPeriods() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return lruCacheStats.getSumHitCountsPastNPeriods()<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          + bucketCacheStats.getSumHitCountsPastNPeriods();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    <a name="line.221"></a>
+<span class="sourceLineNo">222</span>    @Override<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    public long getSumRequestCountsPastNPeriods() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      return lruCacheStats.getSumRequestCountsPastNPeriods()<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          + bucketCacheStats.getSumRequestCountsPastNPeriods();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    <a name="line.227"></a>
+<span class="sourceLineNo">228</span>    @Override<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    public long getSumHitCachingCountsPastNPeriods() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      return lruCacheStats.getSumHitCachingCountsPastNPeriods()<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          + bucketCacheStats.getSumHitCachingCountsPastNPeriods();<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>    @Override<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    public long getSumRequestCachingCountsPastNPeriods() {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      return lruCacheStats.getSumRequestCachingCountsPastNPeriods()<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  @Override<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new BlockCachesIterator(getBlockCaches());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public BlockCache[] getBlockCaches() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    return new BlockCache [] {this.lruCache, this.l2Cache};<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  @Override<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public void setMaxSize(long size) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    this.lruCache.setMaxSize(size);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  public void returnBlock(BlockCacheKey cacheKey, Cacheable block) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    // A noop<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    this.lruCache.returnBlock(cacheKey, block);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    this.l2Cache.returnBlock(cacheKey, block);<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>  @VisibleForTesting<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  public int getRefCount(BlockCacheKey cacheKey) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return ((BucketCache) this.l2Cache).getRefCount(cacheKey);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
index dc894d8..1cc5963 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
@@ -211,52 +211,68 @@
 <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>    @Override<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    public double getHitRatioPastNPeriods() {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      double ratio = ((double) (lruCacheStats.getSumHitCountsPastNPeriods() + bucketCacheStats<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          .getSumHitCountsPastNPeriods()) / (double) (lruCacheStats<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          .getSumRequestCountsPastNPeriods() + bucketCacheStats<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          .getSumRequestCountsPastNPeriods()));<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return Double.isNaN(ratio) ? 0 : ratio;<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>    @Override<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    public double getHitCachingRatioPastNPeriods() {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      double ratio = ((double) (lruCacheStats<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          .getSumHitCachingCountsPastNPeriods() + bucketCacheStats<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          .getSumHitCachingCountsPastNPeriods()) / (double) (lruCacheStats<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          .getSumRequestCachingCountsPastNPeriods() + bucketCacheStats<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          .getSumRequestCachingCountsPastNPeriods()));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      return Double.isNaN(ratio) ? 0 : ratio;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  @Override<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return new BlockCachesIterator(getBlockCaches());<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>  @Override<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public BlockCache[] getBlockCaches() {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    return new BlockCache [] {this.lruCache, this.l2Cache};<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>  @Override<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void setMaxSize(long size) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    this.lruCache.setMaxSize(size);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public void returnBlock(BlockCacheKey cacheKey, Cacheable block) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    // A noop<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    this.lruCache.returnBlock(cacheKey, block);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    this.l2Cache.returnBlock(cacheKey, block);<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>  @VisibleForTesting<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public int getRefCount(BlockCacheKey cacheKey) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    return ((BucketCache) this.l2Cache).getRefCount(cacheKey);<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">206</span>    public void rollMetricsPeriod() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      lruCacheStats.rollMetricsPeriod();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      bucketCacheStats.rollMetricsPeriod();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    <a name="line.210"></a>
+<span class="sourceLineNo">211</span>    @Override<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    public long getFailedInserts() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      return lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>    @Override<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    public long getSumHitCountsPastNPeriods() {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return lruCacheStats.getSumHitCountsPastNPeriods()<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          + bucketCacheStats.getSumHitCountsPastNPeriods();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    <a name="line.221"></a>
+<span class="sourceLineNo">222</span>    @Override<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    public long getSumRequestCountsPastNPeriods() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      return lruCacheStats.getSumRequestCountsPastNPeriods()<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          + bucketCacheStats.getSumRequestCountsPastNPeriods();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    <a name="line.227"></a>
+<span class="sourceLineNo">228</span>    @Override<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    public long getSumHitCachingCountsPastNPeriods() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      return lruCacheStats.getSumHitCachingCountsPastNPeriods()<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          + bucketCacheStats.getSumHitCachingCountsPastNPeriods();<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>    @Override<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    public long getSumRequestCachingCountsPastNPeriods() {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      return lruCacheStats.getSumRequestCachingCountsPastNPeriods()<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  @Override<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public Iterator&lt;CachedBlock&gt; iterator() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new BlockCachesIterator(getBlockCaches());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public BlockCache[] getBlockCaches() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    return new BlockCache [] {this.lruCache, this.l2Cache};<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  @Override<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public void setMaxSize(long size) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    this.lruCache.setMaxSize(size);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  public void returnBlock(BlockCacheKey cacheKey, Cacheable block) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    // A noop<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    this.lruCache.returnBlock(cacheKey, block);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    this.l2Cache.returnBlock(cacheKey, block);<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>  @VisibleForTesting<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  public int getRefCount(BlockCacheKey cacheKey) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return ((BucketCache) this.l2Cache).getRefCount(cacheKey);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
index 9bb7b45..a984bf5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
@@ -28,21 +28,22 @@
 <span class="sourceLineNo">020</span>package org.apache.hadoop.hbase.regionserver;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.25"></a>
 <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> * If set of MapFile.Readers in Store change, implementors are notified.<a name="line.28"></a>
-<span class="sourceLineNo">029</span> */<a name="line.29"></a>
-<span class="sourceLineNo">030</span>@InterfaceAudience.Private<a name="line.30"></a>
-<span class="sourceLineNo">031</span>public interface ChangedReadersObserver {<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  /**<a name="line.32"></a>
-<span class="sourceLineNo">033</span>   * Notify observers.<a name="line.33"></a>
-<span class="sourceLineNo">034</span>   * @throws IOException e<a name="line.34"></a>
-<span class="sourceLineNo">035</span>   */<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  void updateReaders() throws IOException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>}<a name="line.37"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * If set of MapFile.Readers in Store change, implementors are notified.<a name="line.29"></a>
+<span class="sourceLineNo">030</span> */<a name="line.30"></a>
+<span class="sourceLineNo">031</span>@InterfaceAudience.Private<a name="line.31"></a>
+<span class="sourceLineNo">032</span>public interface ChangedReadersObserver {<a name="line.32"></a>
+<span class="sourceLineNo">033</span>  /**<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   * Notify observers.<a name="line.34"></a>
+<span class="sourceLineNo">035</span>   * @throws IOException e<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   */<a name="line.36"></a>
+<span class="sourceLineNo">037</span>  void updateReaders(List&lt;StoreFile&gt; sfs) throws IOException;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>}<a name="line.38"></a>
 
 
 


[19/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
index 9640466..93346d6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomInnerRegionObserverWrapper.html
@@ -929,524 +929,656 @@
 <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>  @Test<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    HTable table = null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    try {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      latch = new CountDownLatch(1);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      exceptionLatch = new CountDownLatch(1);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      // Create KV that will give you two blocks<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      // Create a table with block size as 1024<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      // get the block cache and region<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      RegionLocator locator = table.getRegionLocator();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionName);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      Store store = region.getStores().iterator().next();<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      cacheConf.setEvictOnClose(true);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      // insert data. 2 Rows are added<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      insertData(table);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      // flush the data<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      System.out.println("Flushing cache");<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      // Should create one Hfile with 2 blocks<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      region.flush(true);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      // The block would have been decremented for the scan case as it was<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      // wrapped<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // before even the postNext hook gets executed.<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // giving some time for the block to be decremented<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      Thread.sleep(100);<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      boolean usedBlocksFound = false;<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      int refCount = 0;<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      while (iterator.hasNext()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        CachedBlock next = iterator.next();<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (cache instanceof BucketCache) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          continue;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        if (refCount != 0) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // Blocks will be with count 3<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          usedBlocksFound = true;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      assertTrue(usedBlocksFound);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      exceptionLatch.countDown();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // countdown the latch<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      for (ScanThread thread : scanThreads) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        thread.join();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      iterator = cache.iterator();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      usedBlocksFound = false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      refCount = 0;<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      while (iterator.hasNext()) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        CachedBlock next = iterator.next();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        if (cache instanceof BucketCache) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        } else {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          continue;<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        if (refCount != 0) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>          // Blocks will be with count 3<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          usedBlocksFound = true;<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      }<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      assertTrue(usedBlocksFound);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Thread.sleep(5100);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      iterator = cache.iterator();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      refCount = 0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      while (iterator.hasNext()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        CachedBlock next = iterator.next();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (cache instanceof BucketCache) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>          continue;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        assertEquals(0, refCount);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    } finally {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      if (table != null) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        table.close();<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    int refCount;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    while (iterator.hasNext()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      CachedBlock next = iterator.next();<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (cache instanceof BucketCache) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      } else {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        continue;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      assertEquals(0, refCount);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  private void insertData(HTable table) throws IOException {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    Put put = new Put(ROW);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    table.put(put);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    put = new Put(ROW1);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    table.put(put);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    put = new Put(ROW);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    table.put(put);<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>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      InterruptedException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    for (ScanThread thread : scanThreads) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      thread.start();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return scanThreads;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      throws IOException, InterruptedException {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    for (GetThread thread : getThreads) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      thread.start();<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    return getThreads;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      throws IOException, InterruptedException {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      thread.start();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    return multiGetThreads;<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    int counter = NO_OF_THREADS;<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      counter = counter - 1;<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        Thread.sleep(100);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } else {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        Thread.sleep(100);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    int refCount = 0;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    while (iterator.hasNext()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      CachedBlock next = iterator.next();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (cache instanceof BucketCache) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      } else {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        if (expectOnlyZero) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          assertTrue(refCount == 0);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (refCount != 0) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          // Because the scan would have also touched up on these blocks but<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          // it<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>          // would have touched<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>          // all 3<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>          if (getClosed) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>            // If get has closed only the scan's blocks would be available<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          } else {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      } else {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // Because the get would have also touched up on these blocks but it<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // would have touched<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        // upon only 2 additionally<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        if (expectOnlyZero) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          assertTrue(refCount == 0);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        if (refCount != 0) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (getLatch == null || wrappedCp) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          } else {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private static class MultiGetThread extends Thread {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private final HTable table;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    public MultiGetThread(HTable table) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      this.table = table;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    @Override<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    public void run() {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      gets.add(new Get(ROW));<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      gets.add(new Get(ROW1));<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      try {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        Result[] r = table.get(gets);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (IOException e) {<a name="line.1169"></a>
+<span class="sourceLineNo">924</span>  public void testBlockEvictionAfterHBASE13082WithCompactionAndFlush()<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      throws IOException, InterruptedException {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    // do flush and scan in parallel<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    HTable table = null;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    try {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      latch = new CountDownLatch(1);<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      compactionLatch = new CountDownLatch(1);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      TableName tableName =<a name="line.931"></a>
+<span class="sourceLineNo">932</span>          TableName.valueOf("testBlockEvictionAfterHBASE13082WithCompactionAndFlush");<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      // Create a table with block size as 1024<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      // get the block cache and region<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      RegionLocator locator = table.getRegionLocator();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.939"></a>
+<span class="sourceLineNo">940</span>          regionName);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      Store store = region.getStores().iterator().next();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      cacheConf.setEvictOnClose(true);<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>      // insert data. 2 Rows are added<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      Put put = new Put(ROW);<a name="line.948"></a>
+<span class="sourceLineNo">949</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      table.put(put);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put = new Put(ROW1);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      table.put(put);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // Should create one Hfile with 2 blocks<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      region.flush(true);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      // read the data and expect same blocks, one new hit, no misses<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      int refCount = 0;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      // Check how this miss is happening<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // insert a second column, read the row, no new blocks, 3 new hits<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      byte[] data2 = Bytes.add(data, data);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      put = new Put(ROW);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      table.put(put);<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // flush, one new block<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      System.out.println("Flushing cache");<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      region.flush(true);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      iterateBlockCache(cache, iterator);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      // Create three sets of scan<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Thread.sleep(100);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      iterator = cache.iterator();<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      boolean usedBlocksFound = false;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      while (iterator.hasNext()) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        CachedBlock next = iterator.next();<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.978"></a>
+<span class="sourceLineNo">979</span>        if (cache instanceof BucketCache) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        } else {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          continue;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        if (refCount != 0) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>          // Blocks will be with count 3<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          usedBlocksFound = true;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        }<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      // Make a put and do a flush<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>      data2 = Bytes.add(data, data);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      put = new Put(ROW1);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      table.put(put);<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      // flush, one new block<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      System.out.println("Flushing cache");<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      region.flush(true);<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      usedBlocksFound = false;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      System.out.println("Compacting");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      assertEquals(3, store.getStorefilesCount());<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      store.triggerMajorCompaction();<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      region.compact(true);<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      assertEquals(1, store.getStorefilesCount());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      // Even after compaction is done we will have some blocks that cannot<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // be evicted this is because the scan is still referencing them<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      iterator = cache.iterator();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      while (iterator.hasNext()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        CachedBlock next = iterator.next();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        if (cache instanceof BucketCache) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        } else {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          continue;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        }<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (refCount != 0) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // Blocks will be with count 3 as they are not yet cleared<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          usedBlocksFound = true;<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>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      // Should not throw exception<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      compactionLatch.countDown();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      latch.countDown();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      for (ScanThread thread : scanThreads) {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        thread.join();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      // by this time all blocks should have been evicted<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      iterator = cache.iterator();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // Since a flush and compaction happened after a scan started<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // we need to ensure that all the original blocks of the compacted file<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // is also removed.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      iterateBlockCache(cache, iterator);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      Result r = table.get(new Get(ROW));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      // The gets would be working on new blocks<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>      iterator = cache.iterator();<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      iterateBlockCache(cache, iterator);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    } finally {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      if (table != null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        table.close();<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><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  @Test<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    HTable table = null;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      latch = new CountDownLatch(1);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      exceptionLatch = new CountDownLatch(1);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      // Create KV that will give you two blocks<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      // Create a table with block size as 1024<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      // get the block cache and region<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      RegionLocator locator = table.getRegionLocator();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          regionName);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      Store store = region.getStores().iterator().next();<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      cacheConf.setEvictOnClose(true);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      // insert data. 2 Rows are added<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      insertData(table);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      // flush the data<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      System.out.println("Flushing cache");<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // Should create one Hfile with 2 blocks<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      region.flush(true);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      // The block would have been decremented for the scan case as it was<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      // wrapped<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // before even the postNext hook gets executed.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      // giving some time for the block to be decremented<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      Thread.sleep(100);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      boolean usedBlocksFound = false;<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      int refCount = 0;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      while (iterator.hasNext()) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        CachedBlock next = iterator.next();<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        if (cache instanceof BucketCache) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        } else {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>          continue;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>        if (refCount != 0) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>          // Blocks will be with count 3<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          usedBlocksFound = true;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      assertTrue(usedBlocksFound);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      exceptionLatch.countDown();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // countdown the latch<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      for (ScanThread thread : scanThreads) {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        thread.join();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      iterator = cache.iterator();<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      usedBlocksFound = false;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      refCount = 0;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      while (iterator.hasNext()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        CachedBlock next = iterator.next();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        if (cache instanceof BucketCache) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        } else {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>          continue;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        if (refCount != 0) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>          // Blocks will be with count 3<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          usedBlocksFound = true;<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>        }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(usedBlocksFound);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      Thread.sleep(5100);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      iterator = cache.iterator();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      refCount = 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      while (iterator.hasNext()) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>        CachedBlock next = iterator.next();<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        if (cache instanceof BucketCache) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        } else {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>          continue;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        assertEquals(0, refCount);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      }<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    } finally {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      if (table != null) {<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>        table.close();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    int refCount;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    while (iterator.hasNext()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      CachedBlock next = iterator.next();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      if (cache instanceof BucketCache) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      } else {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        continue;<a name="line.1169"></a>
 <span class="sourceLineNo">1170</span>      }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    }<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  private static class GetThread extends Thread {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    private final HTable table;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    private final boolean tracker;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    private final boolean multipleCFs;<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      this.table = table;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      this.tracker = tracker;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      this.multipleCFs = multipleCFs;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span><a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    @Override<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    public void run() {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>        initiateGet(table);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      } catch (IOException e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        // do nothing<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    private void initiateGet(HTable table) throws IOException {<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      Get get = new Get(ROW);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      if (tracker) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>        // Change this<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        if (!multipleCFs) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 3));<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 8));<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 9));<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          // Unknown key<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 900));<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>        } else {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          get.addColumn(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3));<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          get.addColumn(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9));<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>          // Unknown key<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 900));<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>        }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      Result r = table.get(get);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      System.out.println(r);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (!tracker) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        if (!multipleCFs) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 3)), data2));<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 8)), data2));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 9)), data2));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        } else {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>          assertTrue(Bytes.equals(<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>              r.getValue(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3)),<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>              data2));<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          assertTrue(Bytes.equals(<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              r.getValue(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8)),<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>              data2));<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          assertTrue(Bytes.equals(<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>              r.getValue(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9)),<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>              data2));<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span><a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  private static class ScanThread extends Thread {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    private final HTable table;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    private final boolean reverse;<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    public ScanThread(HTable table, boolean reverse) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      this.table = table;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      this.reverse = reverse;<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span><a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    @Override<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    public void run() {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      try {<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        initiateScan(table);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      } catch (IOException e) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        // do nothing<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    private void initiateScan(HTable table) throws IOException {<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      Scan scan = new Scan();<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      if (reverse) {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>        scan.setReversed(true);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      ResultScanner resScanner = table.getScanner(scan);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      int i = (reverse ? ROWS.length - 1 : 0);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      boolean resultFound = false;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      for (Result result : resScanner) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        resultFound = true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        System.out.println(result);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        if (!reverse) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          i++;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>        } else {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>          i--;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      assertTrue(resultFound);<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  private void waitForStoreFileCount(Store store, int count, int timeout)<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      throws InterruptedException {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    long start = System.currentTimeMillis();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    while (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      Thread.sleep(100);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    System.out.println("start=" + start + ", now=" + System.currentTimeMillis() + ", cur="<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        + store.getStorefilesCount());<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  private static class CustomScanner implements RegionScanner {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    private RegionScanner delegate;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    public CustomScanner(RegionScanner delegate) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      this.delegate = delegate;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    public boolean next(List&lt;Cell&gt; results) throws IOException {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      return delegate.next(results);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    @Override<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext scannerContext) throws IOException {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return delegate.next(result, scannerContext);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public boolean nextRaw(List&lt;Cell&gt; result) throws IOException {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return delegate.nextRaw(result);<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    public boolean nextRaw(List&lt;Cell&gt; result, ScannerContext context) throws IOException {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      boolean nextRaw = delegate.nextRaw(result, context);<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      if (compactionLatch != null &amp;&amp; compactionLatch.getCount() &gt; 0) {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        try {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          compactionLatch.await();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        } catch (InterruptedException ie) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      if (CustomInnerRegionObserver.throwException.get()) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (exceptionLatch.getCount() &gt; 0) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          try {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            exceptionLatch.await();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          } catch (InterruptedException e) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>          throw new IOException("throw exception");<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        }<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      return nextRaw;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    @Override<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    public void close() throws IOException {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      delegate.close();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    @Override<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    public HRegionInfo getRegionInfo() {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      return delegate.getRegionInfo();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    }<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    @Override<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    public boolean isFilterDone() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return delegate.isFilterDone();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    public boolean reseek(byte[] row) throws IOException {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      return false;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span><a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    public long getMaxResultSize() {<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      return delegate.getMaxResultSize();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    public long getMvccReadPoint() {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      return delegate.getMvccReadPoint();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span><a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    @Override<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    public int getBatch() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      return delegate.getBatch();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    @Override<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    public void shipped() throws IOException {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      this.delegate.shipped();<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>  public static class CustomInnerRegionObserverWrapper extends CustomInnerRegionObserver {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    @Override<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    public RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        Scan scan, RegionScanner s) throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      return new CustomScanner(s);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>  }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  public static class CustomInnerRegionObserver extends BaseRegionObserver {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    static final AtomicLong sleepTime = new AtomicLong(0);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    static final AtomicBoolean slowDownNext = new AtomicBoolean(false);<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    static final AtomicInteger countOfNext = new AtomicInteger(0);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    static final AtomicInteger countOfGets = new AtomicInteger(0);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    static final AtomicBoolean waitForGets = new AtomicBoolean(false);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    static final AtomicBoolean throwException = new AtomicBoolean(false);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    private static final AtomicReference&lt;CountDownLatch&gt; cdl = new AtomicReference&lt;CountDownLatch&gt;(<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        new CountDownLatch(0));<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        InternalScanner s, List&lt;Result&gt; results, int limit, boolean hasMore) throws IOException {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      slowdownCode(e, false);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      if (getLatch != null &amp;&amp; getLatch.getCount() &gt; 0) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>          getLatch.await();<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        } catch (InterruptedException e1) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      return super.postScannerNext(e, s, results, limit, hasMore);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>    public void postGetOp(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Get get,<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        List&lt;Cell&gt; results) throws IOException {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      slowdownCode(e, true);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      super.postGetOp(e, get, results);<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    public static AtomicReference&lt;CountDownLatch&gt; getCdl() {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      return cdl;<a name="line.1416"></a>
+<span class="sourceLineNo">1171</span>      assertEquals(0, refCount);<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  private void insertData(HTable table) throws IOException {<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    Put put = new Put(ROW);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    table.put(put);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    put = new Put(ROW1);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    table.put(put);<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    put = new Put(ROW);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    table.put(put);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span><a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      InterruptedException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    for (ScanThread thread : scanThreads) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      thread.start();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return scanThreads;<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      throws IOException, InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    for (GetThread thread : getThreads) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      thread.start();<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    return getThreads;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      throws IOException, InterruptedException {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      thread.start();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    return multiGetThreads;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span><a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    int counter = NO_OF_THREADS;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      counter = counter - 1;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>        Thread.sleep(100);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    } else {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        Thread.sleep(100);<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    int refCount = 0;<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    while (iterator.hasNext()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      CachedBlock next = iterator.next();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      if (cache instanceof BucketCache) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        continue;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        if (expectOnlyZero) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>          assertTrue(refCount == 0);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>        if (refCount != 0) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>          // Because the scan would have also touched up on these blocks but<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>          // it<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>          // would have touched<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>          // all 3<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>          if (getClosed) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>            // If get has closed only the scan's blocks would be available<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          } else {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>        // Because the get would have also touched up on these blocks but it<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>        // would have touched<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        // upon only 2 additionally<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        if (expectOnlyZero) {<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>          assertTrue(refCount == 0);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        if (refCount != 0) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          if (getLatch == null || wrappedCp) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          } else {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span><a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  private static class MultiGetThread extends Thread {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    private final HTable table;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    public MultiGetThread(HTable table) {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      this.table = table;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    @Override<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    public void run() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      gets.add(new Get(ROW));<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      gets.add(new Get(ROW1));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      try {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        Result[] r = table.get(gets);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      } catch (IOException e) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  private static class GetThread extends Thread {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    private final HTable table;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    private final boolean tracker;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    private final boolean multipleCFs;<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      this.table = table;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      this.tracker = tracker;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      this.multipleCFs = multipleCFs;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    @Override<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    public void run() {<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      try {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        initiateGet(table);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      } catch (IOException e) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>        // do nothing<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      }<a name="line.1323"></a>
+<span class="sourceLineNo">

<TRUNCATED>

[09/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref/org/apache/hadoop/hbase/io/hfile/CacheStats.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/io/hfile/CacheStats.html b/xref/org/apache/hadoop/hbase/io/hfile/CacheStats.html
index d183673..cb373fc 100644
--- a/xref/org/apache/hadoop/hbase/io/hfile/CacheStats.html
+++ b/xref/org/apache/hadoop/hbase/io/hfile/CacheStats.html
@@ -270,34 +270,35 @@
 <a class="jxr_linenumber" name="260" href="#260">260</a>   }
 <a class="jxr_linenumber" name="261" href="#261">261</a> 
 <a class="jxr_linenumber" name="262" href="#262">262</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">double</strong> getHitRatioPastNPeriods() {
-<a class="jxr_linenumber" name="263" href="#263">263</a>     <strong class="jxr_keyword">double</strong> ratio = ((<strong class="jxr_keyword">double</strong>)sum(hitCounts)/(<strong class="jxr_keyword">double</strong>)sum(requestCounts));
-<a class="jxr_linenumber" name="264" href="#264">264</a>     <strong class="jxr_keyword">return</strong> Double.isNaN(ratio) ? 0 : ratio;
-<a class="jxr_linenumber" name="265" href="#265">265</a>   }
-<a class="jxr_linenumber" name="266" href="#266">266</a> 
-<a class="jxr_linenumber" name="267" href="#267">267</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">double</strong> getHitCachingRatioPastNPeriods() {
-<a class="jxr_linenumber" name="268" href="#268">268</a>     <strong class="jxr_keyword">double</strong> ratio =
-<a class="jxr_linenumber" name="269" href="#269">269</a>       ((<strong class="jxr_keyword">double</strong>)sum(hitCachingCounts)/(<strong class="jxr_keyword">double</strong>)sum(requestCachingCounts));
-<a class="jxr_linenumber" name="270" href="#270">270</a>     <strong class="jxr_keyword">return</strong> Double.isNaN(ratio) ? 0 : ratio;
-<a class="jxr_linenumber" name="271" href="#271">271</a>   }
-<a class="jxr_linenumber" name="272" href="#272">272</a> 
-<a class="jxr_linenumber" name="273" href="#273">273</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/AgeSnapshot.html">AgeSnapshot</a> getAgeAtEvictionSnapshot() {
-<a class="jxr_linenumber" name="274" href="#274">274</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/AgeSnapshot.html">AgeSnapshot</a>(<strong class="jxr_keyword">this</strong>.ageAtEviction);
-<a class="jxr_linenumber" name="275" href="#275">275</a>   }
-<a class="jxr_linenumber" name="276" href="#276">276</a> 
-<a class="jxr_linenumber" name="277" href="#277">277</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong> sum(<strong class="jxr_keyword">long</strong> [] counts) {
-<a class="jxr_linenumber" name="278" href="#278">278</a>     <strong class="jxr_keyword">long</strong> sum = 0;
-<a class="jxr_linenumber" name="279" href="#279">279</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">long</strong> count : counts) sum += count;
-<a class="jxr_linenumber" name="280" href="#280">280</a>     <strong class="jxr_keyword">return</strong> sum;
-<a class="jxr_linenumber" name="281" href="#281">281</a>   }
-<a class="jxr_linenumber" name="282" href="#282">282</a> 
-<a class="jxr_linenumber" name="283" href="#283">283</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong> [] initializeZeros(<strong class="jxr_keyword">int</strong> n) {
-<a class="jxr_linenumber" name="284" href="#284">284</a>     <strong class="jxr_keyword">long</strong> [] zeros = <strong class="jxr_keyword">new</strong> <strong class="jxr_keyword">long</strong> [n];
-<a class="jxr_linenumber" name="285" href="#285">285</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;n; i++) {
-<a class="jxr_linenumber" name="286" href="#286">286</a>       zeros[i] = 0L;
-<a class="jxr_linenumber" name="287" href="#287">287</a>     }
-<a class="jxr_linenumber" name="288" href="#288">288</a>     <strong class="jxr_keyword">return</strong> zeros;
-<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="263" href="#263">263</a>     <strong class="jxr_keyword">double</strong> ratio = ((<strong class="jxr_keyword">double</strong>)getSumHitCountsPastNPeriods() /
+<a class="jxr_linenumber" name="264" href="#264">264</a>         (<strong class="jxr_keyword">double</strong>)getSumRequestCountsPastNPeriods());
+<a class="jxr_linenumber" name="265" href="#265">265</a>     <strong class="jxr_keyword">return</strong> Double.isNaN(ratio) ? 0 : ratio;
+<a class="jxr_linenumber" name="266" href="#266">266</a>   }
+<a class="jxr_linenumber" name="267" href="#267">267</a> 
+<a class="jxr_linenumber" name="268" href="#268">268</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">double</strong> getHitCachingRatioPastNPeriods() {
+<a class="jxr_linenumber" name="269" href="#269">269</a>     <strong class="jxr_keyword">double</strong> ratio = ((<strong class="jxr_keyword">double</strong>)getSumHitCachingCountsPastNPeriods() /
+<a class="jxr_linenumber" name="270" href="#270">270</a>         (<strong class="jxr_keyword">double</strong>)getSumRequestCachingCountsPastNPeriods());
+<a class="jxr_linenumber" name="271" href="#271">271</a>     <strong class="jxr_keyword">return</strong> Double.isNaN(ratio) ? 0 : ratio;
+<a class="jxr_linenumber" name="272" href="#272">272</a>   }
+<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/io/hfile/AgeSnapshot.html">AgeSnapshot</a> getAgeAtEvictionSnapshot() {
+<a class="jxr_linenumber" name="275" href="#275">275</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/AgeSnapshot.html">AgeSnapshot</a>(<strong class="jxr_keyword">this</strong>.ageAtEviction);
+<a class="jxr_linenumber" name="276" href="#276">276</a>   }
+<a class="jxr_linenumber" name="277" href="#277">277</a> 
+<a class="jxr_linenumber" name="278" href="#278">278</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong> sum(<strong class="jxr_keyword">long</strong> [] counts) {
+<a class="jxr_linenumber" name="279" href="#279">279</a>     <strong class="jxr_keyword">long</strong> sum = 0;
+<a class="jxr_linenumber" name="280" href="#280">280</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">long</strong> count : counts) sum += count;
+<a class="jxr_linenumber" name="281" href="#281">281</a>     <strong class="jxr_keyword">return</strong> sum;
+<a class="jxr_linenumber" name="282" href="#282">282</a>   }
+<a class="jxr_linenumber" name="283" href="#283">283</a> 
+<a class="jxr_linenumber" name="284" href="#284">284</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">long</strong> [] initializeZeros(<strong class="jxr_keyword">int</strong> n) {
+<a class="jxr_linenumber" name="285" href="#285">285</a>     <strong class="jxr_keyword">long</strong> [] zeros = <strong class="jxr_keyword">new</strong> <strong class="jxr_keyword">long</strong> [n];
+<a class="jxr_linenumber" name="286" href="#286">286</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i=0; i&lt;n; i++) {
+<a class="jxr_linenumber" name="287" href="#287">287</a>       zeros[i] = 0L;
+<a class="jxr_linenumber" name="288" href="#288">288</a>     }
+<a class="jxr_linenumber" name="289" href="#289">289</a>     <strong class="jxr_keyword">return</strong> zeros;
+<a class="jxr_linenumber" name="290" href="#290">290</a>   }
+<a class="jxr_linenumber" name="291" href="#291">291</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/736088b3/xref/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html b/xref/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
index eb17347..d6d336a 100644
--- a/xref/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
+++ b/xref/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
@@ -213,52 +213,68 @@
 <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>     @Override
-<a class="jxr_linenumber" name="206" href="#206">206</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">double</strong> getHitRatioPastNPeriods() {
-<a class="jxr_linenumber" name="207" href="#207">207</a>       <strong class="jxr_keyword">double</strong> ratio = ((<strong class="jxr_keyword">double</strong>) (lruCacheStats.getSumHitCountsPastNPeriods() + bucketCacheStats
-<a class="jxr_linenumber" name="208" href="#208">208</a>           .getSumHitCountsPastNPeriods()) / (<strong class="jxr_keyword">double</strong>) (lruCacheStats
-<a class="jxr_linenumber" name="209" href="#209">209</a>           .getSumRequestCountsPastNPeriods() + bucketCacheStats
-<a class="jxr_linenumber" name="210" href="#210">210</a>           .getSumRequestCountsPastNPeriods()));
-<a class="jxr_linenumber" name="211" href="#211">211</a>       <strong class="jxr_keyword">return</strong> Double.isNaN(ratio) ? 0 : ratio;
-<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>     @Override
-<a class="jxr_linenumber" name="215" href="#215">215</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">double</strong> getHitCachingRatioPastNPeriods() {
-<a class="jxr_linenumber" name="216" href="#216">216</a>       <strong class="jxr_keyword">double</strong> ratio = ((<strong class="jxr_keyword">double</strong>) (lruCacheStats
-<a class="jxr_linenumber" name="217" href="#217">217</a>           .getSumHitCachingCountsPastNPeriods() + bucketCacheStats
-<a class="jxr_linenumber" name="218" href="#218">218</a>           .getSumHitCachingCountsPastNPeriods()) / (<strong class="jxr_keyword">double</strong>) (lruCacheStats
-<a class="jxr_linenumber" name="219" href="#219">219</a>           .getSumRequestCachingCountsPastNPeriods() + bucketCacheStats
-<a class="jxr_linenumber" name="220" href="#220">220</a>           .getSumRequestCachingCountsPastNPeriods()));
-<a class="jxr_linenumber" name="221" href="#221">221</a>       <strong class="jxr_keyword">return</strong> Double.isNaN(ratio) ? 0 : ratio;
-<a class="jxr_linenumber" name="222" href="#222">222</a>     }
-<a class="jxr_linenumber" name="223" href="#223">223</a>   }
-<a class="jxr_linenumber" name="224" href="#224">224</a> 
-<a class="jxr_linenumber" name="225" href="#225">225</a>   @Override
-<a class="jxr_linenumber" name="226" href="#226">226</a>   <strong class="jxr_keyword">public</strong> Iterator&lt;CachedBlock&gt; iterator() {
-<a class="jxr_linenumber" name="227" href="#227">227</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html">BlockCachesIterator</a>(getBlockCaches());
-<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>   @Override
-<a class="jxr_linenumber" name="231" href="#231">231</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html">BlockCache</a>[] getBlockCaches() {
-<a class="jxr_linenumber" name="232" href="#232">232</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html">BlockCache</a> [] {<strong class="jxr_keyword">this</strong>.lruCache, <strong class="jxr_keyword">this</strong>.l2Cache};
-<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>   @Override
-<a class="jxr_linenumber" name="236" href="#236">236</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setMaxSize(<strong class="jxr_keyword">long</strong> size) {
-<a class="jxr_linenumber" name="237" href="#237">237</a>     <strong class="jxr_keyword">this</strong>.lruCache.setMaxSize(size);
-<a class="jxr_linenumber" name="238" href="#238">238</a>   }
-<a class="jxr_linenumber" name="239" href="#239">239</a> 
-<a class="jxr_linenumber" name="240" href="#240">240</a>   @Override
-<a class="jxr_linenumber" name="241" href="#241">241</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> returnBlock(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html">BlockCacheKey</a> cacheKey, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html">Cacheable</a> block) {
-<a class="jxr_linenumber" name="242" href="#242">242</a>     <em class="jxr_comment">// A noop</em>
-<a class="jxr_linenumber" name="243" href="#243">243</a>     <strong class="jxr_keyword">this</strong>.lruCache.returnBlock(cacheKey, block);
-<a class="jxr_linenumber" name="244" href="#244">244</a>     <strong class="jxr_keyword">this</strong>.l2Cache.returnBlock(cacheKey, block);
-<a class="jxr_linenumber" name="245" href="#245">245</a>   }
-<a class="jxr_linenumber" name="246" href="#246">246</a> 
-<a class="jxr_linenumber" name="247" href="#247">247</a>   @VisibleForTesting
-<a class="jxr_linenumber" name="248" href="#248">248</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getRefCount(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html">BlockCacheKey</a> cacheKey) {
-<a class="jxr_linenumber" name="249" href="#249">249</a>     <strong class="jxr_keyword">return</strong> ((BucketCache) <strong class="jxr_keyword">this</strong>.l2Cache).getRefCount(cacheKey);
-<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="206" href="#206">206</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> rollMetricsPeriod() {
+<a class="jxr_linenumber" name="207" href="#207">207</a>       lruCacheStats.rollMetricsPeriod();
+<a class="jxr_linenumber" name="208" href="#208">208</a>       bucketCacheStats.rollMetricsPeriod();
+<a class="jxr_linenumber" name="209" href="#209">209</a>     }
+<a class="jxr_linenumber" name="210" href="#210">210</a>     
+<a class="jxr_linenumber" name="211" href="#211">211</a>     @Override
+<a class="jxr_linenumber" name="212" href="#212">212</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getFailedInserts() {
+<a class="jxr_linenumber" name="213" href="#213">213</a>       <strong class="jxr_keyword">return</strong> lruCacheStats.getFailedInserts() + bucketCacheStats.getFailedInserts();
+<a class="jxr_linenumber" name="214" href="#214">214</a>     }
+<a class="jxr_linenumber" name="215" href="#215">215</a> 
+<a class="jxr_linenumber" name="216" href="#216">216</a>     @Override
+<a class="jxr_linenumber" name="217" href="#217">217</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSumHitCountsPastNPeriods() {
+<a class="jxr_linenumber" name="218" href="#218">218</a>       <strong class="jxr_keyword">return</strong> lruCacheStats.getSumHitCountsPastNPeriods()
+<a class="jxr_linenumber" name="219" href="#219">219</a>           + bucketCacheStats.getSumHitCountsPastNPeriods();
+<a class="jxr_linenumber" name="220" href="#220">220</a>     }
+<a class="jxr_linenumber" name="221" href="#221">221</a>     
+<a class="jxr_linenumber" name="222" href="#222">222</a>     @Override
+<a class="jxr_linenumber" name="223" href="#223">223</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSumRequestCountsPastNPeriods() {
+<a class="jxr_linenumber" name="224" href="#224">224</a>       <strong class="jxr_keyword">return</strong> lruCacheStats.getSumRequestCountsPastNPeriods()
+<a class="jxr_linenumber" name="225" href="#225">225</a>           + bucketCacheStats.getSumRequestCountsPastNPeriods();
+<a class="jxr_linenumber" name="226" href="#226">226</a>     }
+<a class="jxr_linenumber" name="227" href="#227">227</a>     
+<a class="jxr_linenumber" name="228" href="#228">228</a>     @Override
+<a class="jxr_linenumber" name="229" href="#229">229</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSumHitCachingCountsPastNPeriods() {
+<a class="jxr_linenumber" name="230" href="#230">230</a>       <strong class="jxr_keyword">return</strong> lruCacheStats.getSumHitCachingCountsPastNPeriods()
+<a class="jxr_linenumber" name="231" href="#231">231</a>           + bucketCacheStats.getSumHitCachingCountsPastNPeriods();
+<a class="jxr_linenumber" name="232" href="#232">232</a>     }
+<a class="jxr_linenumber" name="233" href="#233">233</a> 
+<a class="jxr_linenumber" name="234" href="#234">234</a>     @Override
+<a class="jxr_linenumber" name="235" href="#235">235</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSumRequestCachingCountsPastNPeriods() {
+<a class="jxr_linenumber" name="236" href="#236">236</a>       <strong class="jxr_keyword">return</strong> lruCacheStats.getSumRequestCachingCountsPastNPeriods()
+<a class="jxr_linenumber" name="237" href="#237">237</a>           + bucketCacheStats.getSumRequestCachingCountsPastNPeriods();
+<a class="jxr_linenumber" name="238" href="#238">238</a>     }
+<a class="jxr_linenumber" name="239" href="#239">239</a>   }
+<a class="jxr_linenumber" name="240" href="#240">240</a> 
+<a class="jxr_linenumber" name="241" href="#241">241</a>   @Override
+<a class="jxr_linenumber" name="242" href="#242">242</a>   <strong class="jxr_keyword">public</strong> Iterator&lt;CachedBlock&gt; iterator() {
+<a class="jxr_linenumber" name="243" href="#243">243</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html">BlockCachesIterator</a>(getBlockCaches());
+<a class="jxr_linenumber" name="244" href="#244">244</a>   }
+<a class="jxr_linenumber" name="245" href="#245">245</a> 
+<a class="jxr_linenumber" name="246" href="#246">246</a>   @Override
+<a class="jxr_linenumber" name="247" href="#247">247</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html">BlockCache</a>[] getBlockCaches() {
+<a class="jxr_linenumber" name="248" href="#248">248</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html">BlockCache</a> [] {<strong class="jxr_keyword">this</strong>.lruCache, <strong class="jxr_keyword">this</strong>.l2Cache};
+<a class="jxr_linenumber" name="249" href="#249">249</a>   }
+<a class="jxr_linenumber" name="250" href="#250">250</a> 
+<a class="jxr_linenumber" name="251" href="#251">251</a>   @Override
+<a class="jxr_linenumber" name="252" href="#252">252</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setMaxSize(<strong class="jxr_keyword">long</strong> size) {
+<a class="jxr_linenumber" name="253" href="#253">253</a>     <strong class="jxr_keyword">this</strong>.lruCache.setMaxSize(size);
+<a class="jxr_linenumber" name="254" href="#254">254</a>   }
+<a class="jxr_linenumber" name="255" href="#255">255</a> 
+<a class="jxr_linenumber" name="256" href="#256">256</a>   @Override
+<a class="jxr_linenumber" name="257" href="#257">257</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> returnBlock(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html">BlockCacheKey</a> cacheKey, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html">Cacheable</a> block) {
+<a class="jxr_linenumber" name="258" href="#258">258</a>     <em class="jxr_comment">// A noop</em>
+<a class="jxr_linenumber" name="259" href="#259">259</a>     <strong class="jxr_keyword">this</strong>.lruCache.returnBlock(cacheKey, block);
+<a class="jxr_linenumber" name="260" href="#260">260</a>     <strong class="jxr_keyword">this</strong>.l2Cache.returnBlock(cacheKey, block);
+<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>   @VisibleForTesting
+<a class="jxr_linenumber" name="264" href="#264">264</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getRefCount(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html">BlockCacheKey</a> cacheKey) {
+<a class="jxr_linenumber" name="265" href="#265">265</a>     <strong class="jxr_keyword">return</strong> ((BucketCache) <strong class="jxr_keyword">this</strong>.l2Cache).getRefCount(cacheKey);
+<a class="jxr_linenumber" name="266" href="#266">266</a>   }
+<a class="jxr_linenumber" name="267" href="#267">267</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/736088b3/xref/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html b/xref/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
index 2637fdc..e4ce930 100644
--- a/xref/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
+++ b/xref/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
@@ -30,21 +30,22 @@
 <a class="jxr_linenumber" name="20" href="#20">20</a>  <strong class="jxr_keyword">package</strong> org.apache.hadoop.hbase.regionserver;
 <a class="jxr_linenumber" name="21" href="#21">21</a>  
 <a class="jxr_linenumber" name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
-<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> org.apache.hadoop.hbase.classification.InterfaceAudience;
-<a class="jxr_linenumber" name="25" href="#25">25</a>  
+<a class="jxr_linenumber" name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.util.List;
+<a class="jxr_linenumber" name="24" href="#24">24</a>  
+<a class="jxr_linenumber" name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.classification.InterfaceAudience;
 <a class="jxr_linenumber" name="26" href="#26">26</a>  
-<a class="jxr_linenumber" name="27" href="#27">27</a>  <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="28" href="#28">28</a>  <em class="jxr_javadoccomment"> * If set of MapFile.Readers in Store change, implementors are notified.</em>
-<a class="jxr_linenumber" name="29" href="#29">29</a>  <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="30" href="#30">30</a>  @InterfaceAudience.Private
-<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> {
-<a class="jxr_linenumber" name="32" href="#32">32</a>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="33" href="#33">33</a>  <em class="jxr_javadoccomment">   * Notify observers.</em>
-<a class="jxr_linenumber" name="34" href="#34">34</a>  <em class="jxr_javadoccomment">   * @throws IOException e</em>
-<a class="jxr_linenumber" name="35" href="#35">35</a>  <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="36" href="#36">36</a>    <strong class="jxr_keyword">void</strong> updateReaders() <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="37" href="#37">37</a>  }
+<a class="jxr_linenumber" name="27" href="#27">27</a>  
+<a class="jxr_linenumber" name="28" href="#28">28</a>  <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="29" href="#29">29</a>  <em class="jxr_javadoccomment"> * If set of MapFile.Readers in Store change, implementors are notified.</em>
+<a class="jxr_linenumber" name="30" href="#30">30</a>  <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="31" href="#31">31</a>  @InterfaceAudience.Private
+<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> {
+<a class="jxr_linenumber" name="33" href="#33">33</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="34" href="#34">34</a>  <em class="jxr_javadoccomment">   * Notify observers.</em>
+<a class="jxr_linenumber" name="35" href="#35">35</a>  <em class="jxr_javadoccomment">   * @throws IOException e</em>
+<a class="jxr_linenumber" name="36" href="#36">36</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="37" href="#37">37</a>    <strong class="jxr_keyword">void</strong> updateReaders(List&lt;StoreFile&gt; sfs) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="38" href="#38">38</a>  }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


[43/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index ba2a943..47acb91 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2015 The Apache Software Foundation</copyright>
     <item>
       <title>File: 1655,
-             Errors: 13074,
+             Errors: 13075,
              Warnings: 0,
              Infos: 0
       </title>
@@ -17989,7 +17989,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  22
+                  23
                 </td>
               </tr>
                           <tr>
@@ -18857,7 +18857,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  9
+                  10
                 </td>
               </tr>
                           <tr>
@@ -20103,7 +20103,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  144
+                  142
                 </td>
               </tr>
                           <tr>
@@ -20481,7 +20481,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  41
+                  42
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 34f090d..c695ba1 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index 5526d5a..e692252 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index f0f3758..585baa2 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index d212499..ed47595 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 0063bda..8646609 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 0e6aad4..f72c5b2 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 42363e6..ac06c56 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -1204,6 +1204,8 @@
 <dd>
 <div class="block">Add a table coprocessor to this table.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#addCurrentScanners(java.util.List)">addCurrentScanners(List&lt;? extends KeyValueScanner&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/MetaTableAccessor.html#addDaughter(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.ServerName,%20long)">addDaughter(Connection, HRegionInfo, ServerName, long)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/MetaTableAccessor.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor</a></dt>
 <dd>
 <div class="block">Adds a daughter region entry to meta.</div>
@@ -7586,6 +7588,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/BaseEncoder.html#checkFlushed()">checkFlushed()</a></span> - Method in class org.apache.hadoop.hbase.codec.<a href="./org/apache/hadoop/hbase/codec/BaseEncoder.html" title="class in org.apache.hadoop.hbase.codec">BaseEncoder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkFlushed()">checkFlushed()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/ParseFilter.html#checkForAnd(byte[],%20int)">checkForAnd(byte[], int)</a></span> - Static method in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/ParseFilter.html" title="class in org.apache.hadoop.hbase.filter">ParseFilter</a></dt>
 <dd>
 <div class="block">Checks if the current index of filter string we are on is the beginning of the keyword 'AND'</div>
@@ -7881,9 +7885,7 @@
 <dd>
 <div class="block">Write out an info file under the stored region directory.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek()">checkReseek()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkResetHeap()">checkResetHeap()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#checkReseek(boolean)">checkReseek(boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.html#checkResources()">checkResources()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
@@ -9518,6 +9520,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html#closed">closed</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#closed">closed</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#closed">closed</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/trace/SpanReceiverHost.html#closed">closed</a></span> - Variable in class org.apache.hadoop.hbase.trace.<a href="./org/apache/hadoop/hbase/trace/SpanReceiverHost.html" title="class in org.apache.hadoop.hbase.trace">SpanReceiverHost</a></dt>
@@ -15693,6 +15697,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html#currentScannerCallable">currentScannerCallable</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html" title="class in org.apache.hadoop.hbase.client">ScannerCallableWithReplicas</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.ReplicationSourceWorkerThread.html#currentSize">currentSize</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.ReplicationSourceWorkerThread.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource.ReplicationSourceWorkerThread</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.html#currentSourceHash">currentSourceHash</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="./org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">SyncTable.SyncMapper</a></dt>
@@ -23632,6 +23638,8 @@
 <dd>
 <div class="block">The last flushed sequence id for a region.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushedStoreFiles">flushedStoreFiles</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#flushHandlers">flushHandlers</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html#flushing">flushing</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.WriteState</a></dt>
@@ -23653,6 +23661,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.html#flushLock">flushLock</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">DefaultStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#flushLock">flushLock</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.html#flushLock">flushLock</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#flushLogId">flushLogId</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
@@ -28174,6 +28184,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getFailedInserts()">getFailedInserts()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getFailedInserts()">getFailedInserts()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/ServerRpcController.html#getFailedOn()">getFailedOn()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/ServerRpcController.html" title="class in org.apache.hadoop.hbase.ipc">ServerRpcController</a></dt>
 <dd>
 <div class="block">Returns any exception thrown during service method invocation, or <code>null</code> if no exception
@@ -29059,8 +29071,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCachingRatioPastNPeriods()">getHitCachingRatioPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitCachingRatioPastNPeriods()">getHitCachingRatioPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCount()">getHitCount()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitCount()">getHitCount()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
@@ -29081,8 +29091,6 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitRatioPastNPeriods()">getHitRatioPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitRatioPastNPeriods()">getHitRatioPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/HDFSBlocksDistribution.HostAndWeight.html#getHost()">getHost()</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/HDFSBlocksDistribution.HostAndWeight.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution.HostAndWeight</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#getHostAddress()">getHostAddress()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a></dt>
@@ -34893,6 +34901,8 @@
 <div class="block">Get all scanners with no filtering based on TTL (that happens further down
  the line).</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners(List&lt;StoreFile&gt;, boolean, boolean, boolean, boolean, ScanQueryMatcher, byte[], byte[], long, boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStore.html#getScanners(long)">getScanners(long)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStore.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Store.html#getScanners(boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long)">getScanners(boolean, boolean, boolean, boolean, ScanQueryMatcher, byte[], byte[], long)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
@@ -34900,6 +34910,11 @@
 <div class="block">Get all scanners with no filtering based on TTL (that happens further down
  the line).</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners(List&lt;StoreFile&gt;, boolean, boolean, boolean, boolean, ScanQueryMatcher, byte[], byte[], long, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
+<dd>
+<div class="block">Create scanners on the given files and if needed on the memstore with no filtering based on TTL
+ (that happens further down the line).</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#getScannersForStoreFiles(java.util.Collection,%20boolean,%20boolean,%20long)">getScannersForStoreFiles(Collection&lt;StoreFile&gt;, boolean, boolean, long)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
 <dd>
 <div class="block">Return an array of scanners corresponding to the given
@@ -36383,16 +36398,24 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCachingCountsPastNPeriods()">getSumHitCachingCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumHitCachingCountsPastNPeriods()">getSumHitCachingCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCountsPastNPeriods()">getSumHitCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumHitCountsPastNPeriods()">getSumHitCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/CellUtil.html#getSumOfCellElementLengths(org.apache.hadoop.hbase.Cell)">getSumOfCellElementLengths(Cell)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/CellUtil.html#getSumOfCellKeyElementLengths(org.apache.hadoop.hbase.Cell)">getSumOfCellKeyElementLengths(Cell)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCachingCountsPastNPeriods()">getSumRequestCachingCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumRequestCachingCountsPastNPeriods()">getSumRequestCachingCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCountsPastNPeriods()">getSumRequestCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumRequestCountsPastNPeriods()">getSumRequestCountsPastNPeriods()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/security/Superusers.html#getSuperUsers()">getSuperUsers()</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="./org/apache/hadoop/hbase/security/Superusers.html" title="class in org.apache.hadoop.hbase.security">Superusers</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/compress/Compression.html#getSupportedAlgorithms()">getSupportedAlgorithms()</a></span> - Static method in class org.apache.hadoop.hbase.io.compress.<a href="./org/apache/hadoop/hbase/io/compress/Compression.html" title="class in org.apache.hadoop.hbase.io.compress">Compression</a></dt>
@@ -57309,7 +57332,7 @@
 <div class="block">The conf object has been repopulated from disk, and we have to notify
  all the observers that are expressed interest to do that.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#notifyChangedReadersObservers()">notifyChangedReadersObservers()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#notifyChangedReadersObservers(java.util.List)">notifyChangedReadersObservers(List&lt;StoreFile&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#notifyFlushRequest(org.apache.hadoop.hbase.regionserver.Region,%20boolean)">notifyFlushRequest(Region, boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
@@ -57393,8 +57416,6 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/NullComparator.html#NullComparator()">NullComparator()</a></span> - Constructor for class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/NullComparator.html" title="class in org.apache.hadoop.hbase.filter">NullComparator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#nullifyCurrentHeap()">nullifyCurrentHeap()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/CollectionUtils.html#nullSafe(java.util.Collection)">nullSafe(Collection&lt;T&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/CollectionUtils.html" title="class in org.apache.hadoop.hbase.util">CollectionUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/IterableUtils.html#nullSafe(java.lang.Iterable)">nullSafe(Iterable&lt;T&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/IterableUtils.html" title="class in org.apache.hadoop.hbase.util">IterableUtils</a></dt>
@@ -71717,6 +71738,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#rollMetricsPeriod()">rollMetricsPeriod()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#rollMetricsPeriod()">rollMetricsPeriod()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache.CombinedCacheStats</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/LogRoller.html#rollperiod">rollperiod</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#rollRetries">rollRetries</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
@@ -88301,11 +88324,11 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/namespace/NamespaceAuditor.html#updateQuotaForRegionMerge(org.apache.hadoop.hbase.HRegionInfo)">updateQuotaForRegionMerge(HRegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.namespace.<a href="./org/apache/hadoop/hbase/namespace/NamespaceAuditor.html" title="class in org.apache.hadoop.hbase.namespace">NamespaceAuditor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders()">updateReaders()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders(java.util.List)">updateReaders(List&lt;StoreFile&gt;)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a></dt>
 <dd>
 <div class="block">Notify observers.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders()">updateReaders()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html#updateReaders(java.util.List)">updateReaders(List&lt;StoreFile&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.html#updateReadRequestsCount(long)">updateReadRequestsCount(long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 24d6aac..00535d3 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/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/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/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Consistency</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheStats.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheStats.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheStats.html
index cd2ad12..1cf7e1b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheStats.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheStats.html
@@ -1025,7 +1025,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getHitCachingRatioPastNPeriods</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.267">getHitCachingRatioPastNPeriods</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.268">getHitCachingRatioPastNPeriods</a>()</pre>
 </li>
 </ul>
 <a name="getAgeAtEvictionSnapshot()">
@@ -1034,7 +1034,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getAgeAtEvictionSnapshot</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/AgeSnapshot.html" title="class in org.apache.hadoop.hbase.io.hfile">AgeSnapshot</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.273">getAgeAtEvictionSnapshot</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/AgeSnapshot.html" title="class in org.apache.hadoop.hbase.io.hfile">AgeSnapshot</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.274">getAgeAtEvictionSnapshot</a>()</pre>
 </li>
 </ul>
 <a name="sum(long[])">
@@ -1043,7 +1043,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sum</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.277">sum</a>(long[]&nbsp;counts)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.278">sum</a>(long[]&nbsp;counts)</pre>
 </li>
 </ul>
 <a name="initializeZeros(int)">
@@ -1052,7 +1052,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initializeZeros</h4>
-<pre>private static&nbsp;long[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.283">initializeZeros</a>(int&nbsp;n)</pre>
+<pre>private static&nbsp;long[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheStats.html#line.284">initializeZeros</a>(int&nbsp;n)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
index a997f9e..2497915 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html
@@ -182,47 +182,63 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.h
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitCachingCount()">getHitCachingCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getFailedInserts()">getFailedInserts</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>double</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitCachingRatioPastNPeriods()">getHitCachingRatioPastNPeriods</a></strong>()</code>&nbsp;</td>
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitCachingCount()">getHitCachingCount</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/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitCount()">getHitCount</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>double</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getHitRatioPastNPeriods()">getHitRatioPastNPeriods</a></strong>()</code>&nbsp;</td>
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getMissCachingCount()">getMissCachingCount</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/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getMissCachingCount()">getMissCachingCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getMissCount()">getMissCount</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getMissCount()">getMissCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getPrimaryEvictedCount()">getPrimaryEvictedCount</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/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getPrimaryEvictedCount()">getPrimaryEvictedCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getPrimaryHitCount()">getPrimaryHitCount</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getPrimaryHitCount()">getPrimaryHitCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getPrimaryMissCount()">getPrimaryMissCount</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/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getPrimaryMissCount()">getPrimaryMissCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getRequestCachingCount()">getRequestCachingCount</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getRequestCachingCount()">getRequestCachingCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getRequestCount()">getRequestCount</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/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getRequestCount()">getRequestCount</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumHitCachingCountsPastNPeriods()">getSumHitCachingCountsPastNPeriods</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumHitCountsPastNPeriods()">getSumHitCountsPastNPeriods</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/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumRequestCachingCountsPastNPeriods()">getSumRequestCachingCountsPastNPeriods</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#getSumRequestCountsPastNPeriods()">getSumRequestCountsPastNPeriods</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/io/hfile/CombinedBlockCache.CombinedCacheStats.html#rollMetricsPeriod()">rollMetricsPeriod</a></strong>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -230,7 +246,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.h
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#evict()">evict</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#evicted(long,%20boolean)">evicted</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#evictedPerEviction()">evictedPerEviction</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#failInsert()">failInsert</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getAgeAtEvictionSnapshot()">getAgeAtEvictionSnapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getFailedInserts()">getFailedInserts</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCachingRatio()">getHitCachingRatio</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitRatio()">getHitRatio</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats
 .html#getMissCachingRatio()">getMissCachingRatio</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getMissRatio()">getMissRatio</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCachingCountsPastNPeriods()">getSumHitCachingCountsPastNPeriods</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCountsPastNPeriods()">getSumHitCountsPastNPeriods</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCachingCountsPastNPeriods()">getSumRequestCachingCountsPastNPeriods</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCountsPastNPeriods()">getSumRequestCountsPastNPeriods</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#hit(boolean)">hit</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#hit(boolean,%20boolean)">hit</a>, <a href="../../../..
 /../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#miss(boolean,%20boolean)">miss</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#rollMetricsPeriod()">rollMetricsPeriod</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#toString()">toString</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#evict()">evict</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#evicted(long,%20boolean)">evicted</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#evictedPerEviction()">evictedPerEviction</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#failInsert()">failInsert</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getAgeAtEvictionSnapshot()">getAgeAtEvictionSnapshot</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCachingRatio()">getHitCachingRatio</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCachingRatioPastNPeriods()">getHitCachingRatioPastNPeriods</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitRatio()">getHitRatio</a>, <a href="../../../../../../org/apache/hado
 op/hbase/io/hfile/CacheStats.html#getHitRatioPastNPeriods()">getHitRatioPastNPeriods</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getMissCachingRatio()">getMissCachingRatio</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getMissRatio()">getMissRatio</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#hit(boolean)">hit</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#hit(boolean,%20boolean)">hit</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#miss(boolean,%20boolean)">miss</a>, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#toString()">toString</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -440,29 +456,81 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.h
 </dl>
 </li>
 </ul>
-<a name="getHitRatioPastNPeriods()">
+<a name="rollMetricsPeriod()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rollMetricsPeriod</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.206">rollMetricsPeriod</a>()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#rollMetricsPeriod()">rollMetricsPeriod</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getFailedInserts()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFailedInserts</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.212">getFailedInserts</a>()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getFailedInserts()">getFailedInserts</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getSumHitCountsPastNPeriods()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getSumHitCountsPastNPeriods</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.217">getSumHitCountsPastNPeriods</a>()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCountsPastNPeriods()">getSumHitCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getSumRequestCountsPastNPeriods()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getSumRequestCountsPastNPeriods</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.223">getSumRequestCountsPastNPeriods</a>()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCountsPastNPeriods()">getSumRequestCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getSumHitCachingCountsPastNPeriods()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getHitRatioPastNPeriods</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.206">getHitRatioPastNPeriods</a>()</pre>
+<h4>getSumHitCachingCountsPastNPeriods</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.229">getSumHitCachingCountsPastNPeriods</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitRatioPastNPeriods()">getHitRatioPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumHitCachingCountsPastNPeriods()">getSumHitCachingCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
 </dl>
 </li>
 </ul>
-<a name="getHitCachingRatioPastNPeriods()">
+<a name="getSumRequestCachingCountsPastNPeriods()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getHitCachingRatioPastNPeriods</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.215">getHitCachingRatioPastNPeriods</a>()</pre>
+<h4>getSumRequestCachingCountsPastNPeriods</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.CombinedCacheStats.html#line.235">getSumRequestCachingCountsPastNPeriods</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getHitCachingRatioPastNPeriods()">getHitCachingRatioPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html#getSumRequestCachingCountsPastNPeriods()">getSumRequestCachingCountsPastNPeriods</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></dd>
 </dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
index 911b58f..9b94eb3 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html
@@ -571,7 +571,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Resizable
 <ul class="blockList">
 <li class="blockList">
 <h4>iterator</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.226">iterator</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.242">iterator</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;</code></dd>
@@ -586,7 +586,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Resizable
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCaches</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.231">getBlockCaches</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.247">getBlockCaches</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getBlockCaches()">getBlockCaches</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
@@ -599,7 +599,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Resizable
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.236">setMaxSize</a>(long&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.252">setMaxSize</a>(long&nbsp;size)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.html#setMaxSize(long)">ResizableBlockCache</a></code></strong></div>
 <div class="block">Sets the max heap size that can be used by the BlockCache.</div>
 <dl>
@@ -614,7 +614,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Resizable
 <ul class="blockList">
 <li class="blockList">
 <h4>returnBlock</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.241">returnBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.257">returnBlock</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
                <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;block)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#returnBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,%20org.apache.hadoop.hbase.io.hfile.Cacheable)">BlockCache</a></code></strong></div>
 <div class="block">Called when the scanner using the block decides to return the block once its usage
@@ -635,7 +635,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Resizable
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRefCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.248">getRefCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#line.264">getRefCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 ee02972..b868a2a 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -290,12 +290,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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/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/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.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/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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..cc11b08 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/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/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/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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/736088b3/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 def6fa4..d5d0a59 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/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.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/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>
+<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>
 </ul>
 </li>
 </ul>


[17/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
index 9640466..93346d6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
@@ -929,524 +929,656 @@
 <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>  @Test<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    HTable table = null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    try {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      latch = new CountDownLatch(1);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      exceptionLatch = new CountDownLatch(1);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      // Create KV that will give you two blocks<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      // Create a table with block size as 1024<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      // get the block cache and region<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      RegionLocator locator = table.getRegionLocator();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionName);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      Store store = region.getStores().iterator().next();<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      cacheConf.setEvictOnClose(true);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      // insert data. 2 Rows are added<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      insertData(table);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      // flush the data<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      System.out.println("Flushing cache");<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      // Should create one Hfile with 2 blocks<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      region.flush(true);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      // The block would have been decremented for the scan case as it was<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      // wrapped<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // before even the postNext hook gets executed.<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // giving some time for the block to be decremented<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      Thread.sleep(100);<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      boolean usedBlocksFound = false;<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      int refCount = 0;<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      while (iterator.hasNext()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        CachedBlock next = iterator.next();<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (cache instanceof BucketCache) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          continue;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        if (refCount != 0) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // Blocks will be with count 3<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          usedBlocksFound = true;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      assertTrue(usedBlocksFound);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      exceptionLatch.countDown();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // countdown the latch<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      for (ScanThread thread : scanThreads) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        thread.join();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      iterator = cache.iterator();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      usedBlocksFound = false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      refCount = 0;<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      while (iterator.hasNext()) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        CachedBlock next = iterator.next();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        if (cache instanceof BucketCache) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        } else {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          continue;<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        if (refCount != 0) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>          // Blocks will be with count 3<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          usedBlocksFound = true;<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      }<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      assertTrue(usedBlocksFound);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Thread.sleep(5100);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      iterator = cache.iterator();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      refCount = 0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      while (iterator.hasNext()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        CachedBlock next = iterator.next();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (cache instanceof BucketCache) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>          continue;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        assertEquals(0, refCount);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    } finally {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      if (table != null) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        table.close();<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    int refCount;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    while (iterator.hasNext()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      CachedBlock next = iterator.next();<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (cache instanceof BucketCache) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      } else {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        continue;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      assertEquals(0, refCount);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  private void insertData(HTable table) throws IOException {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    Put put = new Put(ROW);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    table.put(put);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    put = new Put(ROW1);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    table.put(put);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    put = new Put(ROW);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    table.put(put);<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>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      InterruptedException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    for (ScanThread thread : scanThreads) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      thread.start();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return scanThreads;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      throws IOException, InterruptedException {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    for (GetThread thread : getThreads) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      thread.start();<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    return getThreads;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      throws IOException, InterruptedException {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      thread.start();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    return multiGetThreads;<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    int counter = NO_OF_THREADS;<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      counter = counter - 1;<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        Thread.sleep(100);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } else {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        Thread.sleep(100);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    int refCount = 0;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    while (iterator.hasNext()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      CachedBlock next = iterator.next();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (cache instanceof BucketCache) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      } else {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        if (expectOnlyZero) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          assertTrue(refCount == 0);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (refCount != 0) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          // Because the scan would have also touched up on these blocks but<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          // it<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>          // would have touched<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>          // all 3<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>          if (getClosed) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>            // If get has closed only the scan's blocks would be available<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          } else {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      } else {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // Because the get would have also touched up on these blocks but it<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // would have touched<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        // upon only 2 additionally<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        if (expectOnlyZero) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          assertTrue(refCount == 0);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        if (refCount != 0) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (getLatch == null || wrappedCp) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          } else {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private static class MultiGetThread extends Thread {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private final HTable table;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    public MultiGetThread(HTable table) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      this.table = table;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    @Override<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    public void run() {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      gets.add(new Get(ROW));<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      gets.add(new Get(ROW1));<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      try {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        Result[] r = table.get(gets);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (IOException e) {<a name="line.1169"></a>
+<span class="sourceLineNo">924</span>  public void testBlockEvictionAfterHBASE13082WithCompactionAndFlush()<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      throws IOException, InterruptedException {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    // do flush and scan in parallel<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    HTable table = null;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    try {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      latch = new CountDownLatch(1);<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      compactionLatch = new CountDownLatch(1);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      TableName tableName =<a name="line.931"></a>
+<span class="sourceLineNo">932</span>          TableName.valueOf("testBlockEvictionAfterHBASE13082WithCompactionAndFlush");<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      // Create a table with block size as 1024<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      // get the block cache and region<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      RegionLocator locator = table.getRegionLocator();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.939"></a>
+<span class="sourceLineNo">940</span>          regionName);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      Store store = region.getStores().iterator().next();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      cacheConf.setEvictOnClose(true);<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>      // insert data. 2 Rows are added<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      Put put = new Put(ROW);<a name="line.948"></a>
+<span class="sourceLineNo">949</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      table.put(put);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put = new Put(ROW1);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      table.put(put);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // Should create one Hfile with 2 blocks<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      region.flush(true);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      // read the data and expect same blocks, one new hit, no misses<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      int refCount = 0;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      // Check how this miss is happening<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // insert a second column, read the row, no new blocks, 3 new hits<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      byte[] data2 = Bytes.add(data, data);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      put = new Put(ROW);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      table.put(put);<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // flush, one new block<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      System.out.println("Flushing cache");<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      region.flush(true);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      iterateBlockCache(cache, iterator);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      // Create three sets of scan<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Thread.sleep(100);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      iterator = cache.iterator();<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      boolean usedBlocksFound = false;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      while (iterator.hasNext()) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        CachedBlock next = iterator.next();<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.978"></a>
+<span class="sourceLineNo">979</span>        if (cache instanceof BucketCache) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        } else {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          continue;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        if (refCount != 0) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>          // Blocks will be with count 3<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          usedBlocksFound = true;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        }<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      // Make a put and do a flush<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>      data2 = Bytes.add(data, data);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      put = new Put(ROW1);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      table.put(put);<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      // flush, one new block<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      System.out.println("Flushing cache");<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      region.flush(true);<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      usedBlocksFound = false;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      System.out.println("Compacting");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      assertEquals(3, store.getStorefilesCount());<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      store.triggerMajorCompaction();<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      region.compact(true);<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      assertEquals(1, store.getStorefilesCount());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      // Even after compaction is done we will have some blocks that cannot<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // be evicted this is because the scan is still referencing them<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      iterator = cache.iterator();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      while (iterator.hasNext()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        CachedBlock next = iterator.next();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        if (cache instanceof BucketCache) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        } else {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          continue;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        }<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (refCount != 0) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // Blocks will be with count 3 as they are not yet cleared<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          usedBlocksFound = true;<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>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      // Should not throw exception<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      compactionLatch.countDown();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      latch.countDown();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      for (ScanThread thread : scanThreads) {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        thread.join();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      // by this time all blocks should have been evicted<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      iterator = cache.iterator();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // Since a flush and compaction happened after a scan started<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // we need to ensure that all the original blocks of the compacted file<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // is also removed.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      iterateBlockCache(cache, iterator);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      Result r = table.get(new Get(ROW));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      // The gets would be working on new blocks<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>      iterator = cache.iterator();<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      iterateBlockCache(cache, iterator);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    } finally {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      if (table != null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        table.close();<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><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  @Test<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    HTable table = null;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      latch = new CountDownLatch(1);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      exceptionLatch = new CountDownLatch(1);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      // Create KV that will give you two blocks<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      // Create a table with block size as 1024<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      // get the block cache and region<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      RegionLocator locator = table.getRegionLocator();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          regionName);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      Store store = region.getStores().iterator().next();<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      cacheConf.setEvictOnClose(true);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      // insert data. 2 Rows are added<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      insertData(table);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      // flush the data<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      System.out.println("Flushing cache");<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // Should create one Hfile with 2 blocks<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      region.flush(true);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      // The block would have been decremented for the scan case as it was<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      // wrapped<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // before even the postNext hook gets executed.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      // giving some time for the block to be decremented<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      Thread.sleep(100);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      boolean usedBlocksFound = false;<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      int refCount = 0;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      while (iterator.hasNext()) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        CachedBlock next = iterator.next();<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        if (cache instanceof BucketCache) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        } else {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>          continue;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>        if (refCount != 0) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>          // Blocks will be with count 3<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          usedBlocksFound = true;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      assertTrue(usedBlocksFound);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      exceptionLatch.countDown();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // countdown the latch<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      for (ScanThread thread : scanThreads) {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        thread.join();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      iterator = cache.iterator();<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      usedBlocksFound = false;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      refCount = 0;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      while (iterator.hasNext()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        CachedBlock next = iterator.next();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        if (cache instanceof BucketCache) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        } else {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>          continue;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        if (refCount != 0) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>          // Blocks will be with count 3<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          usedBlocksFound = true;<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>        }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(usedBlocksFound);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      Thread.sleep(5100);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      iterator = cache.iterator();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      refCount = 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      while (iterator.hasNext()) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>        CachedBlock next = iterator.next();<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        if (cache instanceof BucketCache) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        } else {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>          continue;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        assertEquals(0, refCount);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      }<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    } finally {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      if (table != null) {<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>        table.close();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    int refCount;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    while (iterator.hasNext()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      CachedBlock next = iterator.next();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      if (cache instanceof BucketCache) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      } else {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        continue;<a name="line.1169"></a>
 <span class="sourceLineNo">1170</span>      }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    }<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  private static class GetThread extends Thread {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    private final HTable table;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    private final boolean tracker;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    private final boolean multipleCFs;<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      this.table = table;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      this.tracker = tracker;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      this.multipleCFs = multipleCFs;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span><a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    @Override<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    public void run() {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>        initiateGet(table);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      } catch (IOException e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        // do nothing<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    private void initiateGet(HTable table) throws IOException {<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      Get get = new Get(ROW);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      if (tracker) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>        // Change this<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        if (!multipleCFs) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 3));<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 8));<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 9));<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          // Unknown key<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 900));<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>        } else {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          get.addColumn(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3));<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          get.addColumn(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9));<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>          // Unknown key<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 900));<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>        }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      Result r = table.get(get);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      System.out.println(r);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (!tracker) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        if (!multipleCFs) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 3)), data2));<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 8)), data2));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 9)), data2));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        } else {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>          assertTrue(Bytes.equals(<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>              r.getValue(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3)),<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>              data2));<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          assertTrue(Bytes.equals(<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              r.getValue(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8)),<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>              data2));<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          assertTrue(Bytes.equals(<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>              r.getValue(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9)),<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>              data2));<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span><a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  private static class ScanThread extends Thread {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    private final HTable table;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    private final boolean reverse;<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    public ScanThread(HTable table, boolean reverse) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      this.table = table;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      this.reverse = reverse;<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span><a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    @Override<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    public void run() {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      try {<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        initiateScan(table);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      } catch (IOException e) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        // do nothing<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    private void initiateScan(HTable table) throws IOException {<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      Scan scan = new Scan();<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      if (reverse) {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>        scan.setReversed(true);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      ResultScanner resScanner = table.getScanner(scan);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      int i = (reverse ? ROWS.length - 1 : 0);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      boolean resultFound = false;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      for (Result result : resScanner) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        resultFound = true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        System.out.println(result);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        if (!reverse) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          i++;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>        } else {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>          i--;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      assertTrue(resultFound);<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  private void waitForStoreFileCount(Store store, int count, int timeout)<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      throws InterruptedException {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    long start = System.currentTimeMillis();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    while (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      Thread.sleep(100);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    System.out.println("start=" + start + ", now=" + System.currentTimeMillis() + ", cur="<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        + store.getStorefilesCount());<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  private static class CustomScanner implements RegionScanner {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    private RegionScanner delegate;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    public CustomScanner(RegionScanner delegate) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      this.delegate = delegate;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    public boolean next(List&lt;Cell&gt; results) throws IOException {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      return delegate.next(results);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    @Override<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext scannerContext) throws IOException {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return delegate.next(result, scannerContext);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public boolean nextRaw(List&lt;Cell&gt; result) throws IOException {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return delegate.nextRaw(result);<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    public boolean nextRaw(List&lt;Cell&gt; result, ScannerContext context) throws IOException {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      boolean nextRaw = delegate.nextRaw(result, context);<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      if (compactionLatch != null &amp;&amp; compactionLatch.getCount() &gt; 0) {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        try {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          compactionLatch.await();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        } catch (InterruptedException ie) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      if (CustomInnerRegionObserver.throwException.get()) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (exceptionLatch.getCount() &gt; 0) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          try {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            exceptionLatch.await();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          } catch (InterruptedException e) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>          throw new IOException("throw exception");<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        }<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      return nextRaw;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    @Override<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    public void close() throws IOException {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      delegate.close();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    @Override<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    public HRegionInfo getRegionInfo() {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      return delegate.getRegionInfo();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    }<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    @Override<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    public boolean isFilterDone() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return delegate.isFilterDone();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    public boolean reseek(byte[] row) throws IOException {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      return false;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span><a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    public long getMaxResultSize() {<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      return delegate.getMaxResultSize();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    public long getMvccReadPoint() {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      return delegate.getMvccReadPoint();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span><a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    @Override<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    public int getBatch() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      return delegate.getBatch();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    @Override<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    public void shipped() throws IOException {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      this.delegate.shipped();<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>  public static class CustomInnerRegionObserverWrapper extends CustomInnerRegionObserver {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    @Override<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    public RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        Scan scan, RegionScanner s) throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      return new CustomScanner(s);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>  }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  public static class CustomInnerRegionObserver extends BaseRegionObserver {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    static final AtomicLong sleepTime = new AtomicLong(0);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    static final AtomicBoolean slowDownNext = new AtomicBoolean(false);<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    static final AtomicInteger countOfNext = new AtomicInteger(0);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    static final AtomicInteger countOfGets = new AtomicInteger(0);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    static final AtomicBoolean waitForGets = new AtomicBoolean(false);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    static final AtomicBoolean throwException = new AtomicBoolean(false);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    private static final AtomicReference&lt;CountDownLatch&gt; cdl = new AtomicReference&lt;CountDownLatch&gt;(<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        new CountDownLatch(0));<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        InternalScanner s, List&lt;Result&gt; results, int limit, boolean hasMore) throws IOException {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      slowdownCode(e, false);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      if (getLatch != null &amp;&amp; getLatch.getCount() &gt; 0) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>          getLatch.await();<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        } catch (InterruptedException e1) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      return super.postScannerNext(e, s, results, limit, hasMore);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>    public void postGetOp(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Get get,<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        List&lt;Cell&gt; results) throws IOException {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      slowdownCode(e, true);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      super.postGetOp(e, get, results);<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    public static AtomicReference&lt;CountDownLatch&gt; getCdl() {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      return cdl;<a name="line.1416"></a>
+<span class="sourceLineNo">1171</span>      assertEquals(0, refCount);<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  private void insertData(HTable table) throws IOException {<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    Put put = new Put(ROW);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    table.put(put);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    put = new Put(ROW1);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    table.put(put);<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    put = new Put(ROW);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    table.put(put);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span><a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      InterruptedException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    for (ScanThread thread : scanThreads) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      thread.start();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return scanThreads;<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      throws IOException, InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    for (GetThread thread : getThreads) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      thread.start();<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    return getThreads;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      throws IOException, InterruptedException {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      thread.start();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    return multiGetThreads;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span><a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    int counter = NO_OF_THREADS;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      counter = counter - 1;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>        Thread.sleep(100);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    } else {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        Thread.sleep(100);<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    int refCount = 0;<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    while (iterator.hasNext()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      CachedBlock next = iterator.next();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      if (cache instanceof BucketCache) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        continue;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        if (expectOnlyZero) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>          assertTrue(refCount == 0);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>        if (refCount != 0) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>          // Because the scan would have also touched up on these blocks but<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>          // it<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>          // would have touched<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>          // all 3<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>          if (getClosed) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>            // If get has closed only the scan's blocks would be available<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          } else {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>        // Because the get would have also touched up on these blocks but it<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>        // would have touched<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        // upon only 2 additionally<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        if (expectOnlyZero) {<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>          assertTrue(refCount == 0);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        if (refCount != 0) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          if (getLatch == null || wrappedCp) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          } else {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span><a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  private static class MultiGetThread extends Thread {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    private final HTable table;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    public MultiGetThread(HTable table) {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      this.table = table;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    @Override<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    public void run() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      gets.add(new Get(ROW));<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      gets.add(new Get(ROW1));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      try {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        Result[] r = table.get(gets);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      } catch (IOException e) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  private static class GetThread extends Thread {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    private final HTable table;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    private final boolean tracker;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    private final boolean multipleCFs;<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      this.table = table;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      this.tracker = tracker;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      this.multipleCFs = multipleCFs;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    @Override<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    public void run() {<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      try {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        initiateGet(table);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      } catch (IOException e) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>        // do nothing<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      }<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    }<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="line.1325"></a>
+<span cla

<TRUNCATED>

[13/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
index 139d5ca..b5e49bc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
@@ -462,9 +462,9 @@
 <span class="sourceLineNo">454</span>    // normally cause an NPE because scan.store is null.  So as long as we get through these<a name="line.454"></a>
 <span class="sourceLineNo">455</span>    // two calls we are good and the bug was quashed.<a name="line.455"></a>
 <span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    scan.updateReaders();<a name="line.457"></a>
+<span class="sourceLineNo">457</span>    scan.updateReaders(new ArrayList&lt;StoreFile&gt;());<a name="line.457"></a>
 <span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    scan.updateReaders();<a name="line.459"></a>
+<span class="sourceLineNo">459</span>    scan.updateReaders(new ArrayList&lt;StoreFile&gt;());<a name="line.459"></a>
 <span class="sourceLineNo">460</span><a name="line.460"></a>
 <span class="sourceLineNo">461</span>    scan.peek();<a name="line.461"></a>
 <span class="sourceLineNo">462</span>  }<a name="line.462"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestWideScanner.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
index f58b223..c122e77 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
@@ -138,7 +138,7 @@
 <span class="sourceLineNo">130</span>          ((HRegion.RegionScannerImpl)s).storeHeap.getHeap().iterator();<a name="line.130"></a>
 <span class="sourceLineNo">131</span>        while (scanners.hasNext()) {<a name="line.131"></a>
 <span class="sourceLineNo">132</span>          StoreScanner ss = (StoreScanner)scanners.next();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>          ss.updateReaders();<a name="line.133"></a>
+<span class="sourceLineNo">133</span>          ss.updateReaders(new ArrayList&lt;StoreFile&gt;());<a name="line.133"></a>
 <span class="sourceLineNo">134</span>        }<a name="line.134"></a>
 <span class="sourceLineNo">135</span>      } while (more);<a name="line.135"></a>
 <span class="sourceLineNo">136</span><a name="line.136"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
index 8c2bc05..2ffc548 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
@@ -168,7 +168,7 @@
 <span class="sourceLineNo">160</span>   * Test snapshotting a table that is online without flushing<a name="line.160"></a>
 <span class="sourceLineNo">161</span>   * @throws Exception<a name="line.161"></a>
 <span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Ignore ("Flakey test") @Test(timeout=30000)<a name="line.163"></a>
+<span class="sourceLineNo">163</span>  @Test(timeout=30000)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  public void testSkipFlushTableSnapshot() throws Exception {<a name="line.164"></a>
 <span class="sourceLineNo">165</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    // make sure we don't fail on listing snapshots<a name="line.166"></a>
@@ -177,364 +177,365 @@
 <span class="sourceLineNo">169</span>    // put some stuff in the table<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    Table table = UTIL.getConnection().getTable(TABLE_NAME);<a name="line.170"></a>
 <span class="sourceLineNo">171</span>    UTIL.loadTable(table, TEST_FAM);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    LOG.debug("FS state before snapshot:");<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // take a snapshot of the enabled table<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    String snapshotString = "skipFlushTableSnapshot";<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    byte[] snapshot = Bytes.toBytes(snapshotString);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    admin.snapshot(snapshotString, TABLE_NAME, SnapshotDescription.Type.SKIPFLUSH);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    LOG.debug("Snapshot completed.");<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // make sure we have the snapshot<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        snapshot, TABLE_NAME);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // make sure its a valid snapshot<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    LOG.debug("FS state after snapshot:");<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>    admin.deleteSnapshot(snapshot);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    snapshots = admin.listSnapshots();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">172</span>    UTIL.flush(TABLE_NAME);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>    LOG.debug("FS state before snapshot:");<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    // take a snapshot of the enabled table<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    String snapshotString = "skipFlushTableSnapshot";<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    byte[] snapshot = Bytes.toBytes(snapshotString);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    admin.snapshot(snapshotString, TABLE_NAME, SnapshotDescription.Type.SKIPFLUSH);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    LOG.debug("Snapshot completed.");<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // make sure we have the snapshot<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        snapshot, TABLE_NAME);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // make sure its a valid snapshot<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    LOG.debug("FS state after snapshot:");<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>    admin.deleteSnapshot(snapshot);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    snapshots = admin.listSnapshots();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<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>  /**<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * Test simple flush snapshotting a table that is online<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @throws Exception<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  @Test (timeout=300000)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public void testFlushTableSnapshotWithProcedure() throws Exception {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // make sure we don't fail on listing snapshots<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // put some stuff in the table<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    LOG.debug("FS state before snapshot:");<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // take a snapshot of the enabled table<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    String snapshotString = "offlineTableSnapshot";<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    byte[] snapshot = Bytes.toBytes(snapshotString);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    Map&lt;String, String&gt; props = new HashMap&lt;String, String&gt;();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    props.put("table", TABLE_NAME.getNameAsString());<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    admin.execProcedure(SnapshotManager.ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        snapshotString, props);<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * Test simple flush snapshotting a table that is online<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * @throws Exception<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  @Test (timeout=300000)<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public void testFlushTableSnapshotWithProcedure() throws Exception {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // make sure we don't fail on listing snapshots<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // put some stuff in the table<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    LOG.debug("FS state before snapshot:");<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // take a snapshot of the enabled table<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    String snapshotString = "offlineTableSnapshot";<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    byte[] snapshot = Bytes.toBytes(snapshotString);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    Map&lt;String, String&gt; props = new HashMap&lt;String, String&gt;();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    props.put("table", TABLE_NAME.getNameAsString());<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    admin.execProcedure(SnapshotManager.ONLINE_SNAPSHOT_CONTROLLER_DESCRIPTION,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        snapshotString, props);<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>    LOG.debug("Snapshot completed.");<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    // make sure we have the snapshot<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      snapshot, TABLE_NAME);<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    // make sure its a valid snapshot<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    LOG.debug("FS state after snapshot:");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);<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>  @Test (timeout=300000)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public void testSnapshotFailsOnNonExistantTable() throws Exception {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    // make sure we don't fail on listing snapshots<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    TableName tableName = TableName.valueOf("_not_a_table");<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // make sure the table doesn't exist<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    boolean fail = false;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    do {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    try {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      admin.getTableDescriptor(tableName);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      fail = true;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      LOG.error("Table:" + tableName + " already exists, checking a new name");<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      tableName = TableName.valueOf(tableName+"!");<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    } catch (TableNotFoundException e) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      fail = false;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    } while (fail);<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // snapshot the non-existant table<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    try {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      admin.snapshot("fail", tableName, SnapshotDescription.Type.FLUSH);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      fail("Snapshot succeeded even though there is not table.");<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    } catch (SnapshotCreationException e) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      LOG.info("Correctly failed to snapshot a non-existant table:" + e.getMessage());<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>  @Test(timeout = 300000)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public void testAsyncFlushSnapshot() throws Exception {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    SnapshotDescription snapshot = SnapshotDescription.newBuilder().setName("asyncSnapshot")<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        .setTable(TABLE_NAME.getNameAsString())<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        .setType(SnapshotDescription.Type.FLUSH)<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        .build();<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    // take the snapshot async<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    admin.takeSnapshotAsync(snapshot);<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // constantly loop, looking for the snapshot to complete<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    HMaster master = UTIL.getMiniHBaseCluster().getMaster();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    SnapshotTestingUtils.waitForSnapshotToComplete(master, snapshot, 200);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    LOG.info(" === Async Snapshot Completed ===");<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>    // make sure we get the snapshot<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    SnapshotTestingUtils.assertOneSnapshotThatMatches(admin, snapshot);<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>  @Test (timeout=300000)<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public void testSnapshotStateAfterMerge() throws Exception {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    int numRows = DEFAULT_NUM_ROWS;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    // make sure we don't fail on listing snapshots<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    // load the table so we have some data<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>    // Take a snapshot<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    String snapshotBeforeMergeName = "snapshotBeforeMerge";<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    admin.snapshot(snapshotBeforeMergeName, TABLE_NAME, SnapshotDescription.Type.FLUSH);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    // Clone the table<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    TableName cloneBeforeMergeName = TableName.valueOf("cloneBeforeMerge");<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    admin.cloneSnapshot(snapshotBeforeMergeName, cloneBeforeMergeName);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneBeforeMergeName);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // Merge two regions<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    Collections.sort(regions, new Comparator&lt;HRegionInfo&gt;() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      public int compare(HRegionInfo r1, HRegionInfo r2) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        return Bytes.compareTo(r1.getStartKey(), r2.getStartKey());<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>    int numRegions = admin.getTableRegions(TABLE_NAME).size();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    int numRegionsAfterMerge = numRegions - 2;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        regions.get(2).getEncodedNameAsBytes(), true);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        regions.get(6).getEncodedNameAsBytes(), true);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    // Verify that there's one region less<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    waitRegionsAfterMerge(numRegionsAfterMerge);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>    // Clone the table<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    TableName cloneAfterMergeName = TableName.valueOf("cloneAfterMerge");<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    admin.cloneSnapshot(snapshotBeforeMergeName, cloneAfterMergeName);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneAfterMergeName);<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>    verifyRowCount(UTIL, TABLE_NAME, numRows);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    verifyRowCount(UTIL, cloneBeforeMergeName, numRows);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    verifyRowCount(UTIL, cloneAfterMergeName, numRows);<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // test that we can delete the snapshot<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    UTIL.deleteTable(cloneAfterMergeName);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    UTIL.deleteTable(cloneBeforeMergeName);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  @Test (timeout=300000)<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public void testTakeSnapshotAfterMerge() throws Exception {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    int numRows = DEFAULT_NUM_ROWS;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    // make sure we don't fail on listing snapshots<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    // load the table so we have some data<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Merge two regions<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    Collections.sort(regions, new Comparator&lt;HRegionInfo&gt;() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      public int compare(HRegionInfo r1, HRegionInfo r2) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        return Bytes.compareTo(r1.getStartKey(), r2.getStartKey());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    });<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    int numRegions = admin.getTableRegions(TABLE_NAME).size();<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    int numRegionsAfterMerge = numRegions - 2;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        regions.get(2).getEncodedNameAsBytes(), true);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        regions.get(6).getEncodedNameAsBytes(), true);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    waitRegionsAfterMerge(numRegionsAfterMerge);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    // Take a snapshot<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    String snapshotName = "snapshotAfterMerge";<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    SnapshotTestingUtils.snapshot(admin, snapshotName, TABLE_NAME.getNameAsString(),<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      SnapshotDescription.Type.FLUSH, 3);<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>    // Clone the table<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    TableName cloneName = TableName.valueOf("cloneMerge");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    admin.cloneSnapshot(snapshotName, cloneName);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneName);<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>    verifyRowCount(UTIL, TABLE_NAME, numRows);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    verifyRowCount(UTIL, cloneName, numRows);<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>    // test that we can delete the snapshot<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    UTIL.deleteTable(cloneName);<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>   * Basic end-to-end test of simple-flush-based snapshots<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  @Test (timeout=300000)<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  public void testFlushCreateListDestroy() throws Exception {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    LOG.debug("------- Starting Snapshot test -------------");<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // make sure we don't fail on listing snapshots<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // load the table so we have some data<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    String snapshotName = "flushSnapshotCreateListDestroy";<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    FileSystem fs = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getFileSystem();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    Path rootDir = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getRootDir();<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    SnapshotTestingUtils.createSnapshotAndValidate(admin, TABLE_NAME, Bytes.toString(TEST_FAM),<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      snapshotName, rootDir, fs, true);<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>  /**<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Demonstrate that we reject snapshot requests if there is a snapshot already running on the<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * same table currently running and that concurrent snapshots on different tables can both<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * succeed concurretly.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  @Test(timeout=300000)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  public void testConcurrentSnapshottingAttempts() throws IOException, InterruptedException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    final TableName TABLE2_NAME = TableName.valueOf(TABLE_NAME + "2");<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    int ssNum = 20;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    // make sure we don't fail on listing snapshots<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    // create second testing table<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    SnapshotTestingUtils.createTable(UTIL, TABLE2_NAME, TEST_FAM);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // load the table so we have some data<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    SnapshotTestingUtils.loadData(UTIL, TABLE2_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    final CountDownLatch toBeSubmitted = new CountDownLatch(ssNum);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    // We'll have one of these per thread<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    class SSRunnable implements Runnable {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      SnapshotDescription ss;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      SSRunnable(SnapshotDescription ss) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.ss = ss;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>      @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      public void run() {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        try {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          Admin admin = UTIL.getHBaseAdmin();<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          LOG.info("Submitting snapshot request: " + ClientSnapshotDescriptionUtils.toString(ss));<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          admin.takeSnapshotAsync(ss);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        } catch (Exception e) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          LOG.info("Exception during snapshot request: " + ClientSnapshotDescriptionUtils.toString(<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              ss)<a name="line.435"></a>
-<span class="sourceLineNo">436</span>              + ".  This is ok, we expect some", e);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        LOG.info("Submitted snapshot request: " + ClientSnapshotDescriptionUtils.toString(ss));<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        toBeSubmitted.countDown();<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    };<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    // build descriptions<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    SnapshotDescription[] descs = new SnapshotDescription[ssNum];<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    for (int i = 0; i &lt; ssNum; i++) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      SnapshotDescription.Builder builder = SnapshotDescription.newBuilder();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      builder.setTable(((i % 2) == 0 ? TABLE_NAME : TABLE2_NAME).getNameAsString());<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      builder.setName("ss"+i);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      builder.setType(SnapshotDescription.Type.FLUSH);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      descs[i] = builder.build();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>    // kick each off its own thread<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    for (int i=0 ; i &lt; ssNum; i++) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      new Thread(new SSRunnable(descs[i])).start();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>    // wait until all have been submitted<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    toBeSubmitted.await();<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    // loop until all are done.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    while (true) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      int doneCount = 0;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      for (SnapshotDescription ss : descs) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        try {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          if (admin.isSnapshotFinished(ss)) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>            doneCount++;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        } catch (Exception e) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          LOG.warn("Got an exception when checking for snapshot " + ss.getName(), e);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          doneCount++;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      if (doneCount == descs.length) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        break;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      Thread.sleep(100);<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>    // dump for debugging<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>    List&lt;SnapshotDescription&gt; taken = admin.listSnapshots();<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    int takenSize = taken.size();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Taken " + takenSize + " snapshots:  " + taken);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    assertTrue("We expect at least 1 request to be rejected because of we concurrently" +<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        " issued many requests", takenSize &lt; ssNum &amp;&amp; takenSize &gt; 0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    // Verify that there's at least one snapshot per table<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    int t1SnapshotsCount = 0;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    int t2SnapshotsCount = 0;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    for (SnapshotDescription ss : taken) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (TableName.valueOf(ss.getTable()).equals(TABLE_NAME)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        t1SnapshotsCount++;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      } else if (TableName.valueOf(ss.getTable()).equals(TABLE2_NAME)) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        t2SnapshotsCount++;<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>    assertTrue("We expect at least 1 snapshot of table1 ", t1SnapshotsCount &gt; 0);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    assertTrue("We expect at least 1 snapshot of table2 ", t2SnapshotsCount &gt; 0);<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    UTIL.deleteTable(TABLE2_NAME);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>  private void waitRegionsAfterMerge(final long numRegionsAfterMerge)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      throws IOException, InterruptedException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // Verify that there's one region less<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    long startTime = System.currentTimeMillis();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    while (admin.getTableRegions(TABLE_NAME).size() != numRegionsAfterMerge) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      // This may be flaky... if after 15sec the merge is not complete give up<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      // it will fail in the assertEquals(numRegionsAfterMerge).<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if ((System.currentTimeMillis() - startTime) &gt; 15000)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        break;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      Thread.sleep(100);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, TABLE_NAME);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    LOG.debug("Snapshot completed.");<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    // make sure we have the snapshot<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    List&lt;SnapshotDescription&gt; snapshots = SnapshotTestingUtils.assertOneSnapshotThatMatches(admin,<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      snapshot, TABLE_NAME);<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // make sure its a valid snapshot<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    LOG.debug("FS state after snapshot:");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>    SnapshotTestingUtils.confirmSnapshotValid(UTIL, snapshots.get(0), TABLE_NAME, TEST_FAM);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>  @Test (timeout=300000)<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public void testSnapshotFailsOnNonExistantTable() throws Exception {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    // make sure we don't fail on listing snapshots<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    TableName tableName = TableName.valueOf("_not_a_table");<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // make sure the table doesn't exist<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    boolean fail = false;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    do {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    try {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      admin.getTableDescriptor(tableName);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      fail = true;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      LOG.error("Table:" + tableName + " already exists, checking a new name");<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      tableName = TableName.valueOf(tableName+"!");<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    } catch (TableNotFoundException e) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      fail = false;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    } while (fail);<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    // snapshot the non-existant table<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    try {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      admin.snapshot("fail", tableName, SnapshotDescription.Type.FLUSH);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      fail("Snapshot succeeded even though there is not table.");<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    } catch (SnapshotCreationException e) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      LOG.info("Correctly failed to snapshot a non-existant table:" + e.getMessage());<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>  @Test(timeout = 300000)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  public void testAsyncFlushSnapshot() throws Exception {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    SnapshotDescription snapshot = SnapshotDescription.newBuilder().setName("asyncSnapshot")<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        .setTable(TABLE_NAME.getNameAsString())<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        .setType(SnapshotDescription.Type.FLUSH)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        .build();<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>    // take the snapshot async<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    admin.takeSnapshotAsync(snapshot);<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    // constantly loop, looking for the snapshot to complete<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    HMaster master = UTIL.getMiniHBaseCluster().getMaster();<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    SnapshotTestingUtils.waitForSnapshotToComplete(master, snapshot, 200);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    LOG.info(" === Async Snapshot Completed ===");<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>    // make sure we get the snapshot<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    SnapshotTestingUtils.assertOneSnapshotThatMatches(admin, snapshot);<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>  @Test (timeout=300000)<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  public void testSnapshotStateAfterMerge() throws Exception {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    int numRows = DEFAULT_NUM_ROWS;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    // make sure we don't fail on listing snapshots<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // load the table so we have some data<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>    // Take a snapshot<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    String snapshotBeforeMergeName = "snapshotBeforeMerge";<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    admin.snapshot(snapshotBeforeMergeName, TABLE_NAME, SnapshotDescription.Type.FLUSH);<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    // Clone the table<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    TableName cloneBeforeMergeName = TableName.valueOf("cloneBeforeMerge");<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    admin.cloneSnapshot(snapshotBeforeMergeName, cloneBeforeMergeName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneBeforeMergeName);<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>    // Merge two regions<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    Collections.sort(regions, new Comparator&lt;HRegionInfo&gt;() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      public int compare(HRegionInfo r1, HRegionInfo r2) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        return Bytes.compareTo(r1.getStartKey(), r2.getStartKey());<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>    int numRegions = admin.getTableRegions(TABLE_NAME).size();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    int numRegionsAfterMerge = numRegions - 2;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        regions.get(2).getEncodedNameAsBytes(), true);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        regions.get(6).getEncodedNameAsBytes(), true);<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    // Verify that there's one region less<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    waitRegionsAfterMerge(numRegionsAfterMerge);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>    // Clone the table<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    TableName cloneAfterMergeName = TableName.valueOf("cloneAfterMerge");<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    admin.cloneSnapshot(snapshotBeforeMergeName, cloneAfterMergeName);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneAfterMergeName);<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    verifyRowCount(UTIL, TABLE_NAME, numRows);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    verifyRowCount(UTIL, cloneBeforeMergeName, numRows);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    verifyRowCount(UTIL, cloneAfterMergeName, numRows);<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    // test that we can delete the snapshot<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    UTIL.deleteTable(cloneAfterMergeName);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    UTIL.deleteTable(cloneBeforeMergeName);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  @Test (timeout=300000)<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  public void testTakeSnapshotAfterMerge() throws Exception {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    int numRows = DEFAULT_NUM_ROWS;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    // make sure we don't fail on listing snapshots<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // load the table so we have some data<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, numRows, TEST_FAM);<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Merge two regions<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    List&lt;HRegionInfo&gt; regions = admin.getTableRegions(TABLE_NAME);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    Collections.sort(regions, new Comparator&lt;HRegionInfo&gt;() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      public int compare(HRegionInfo r1, HRegionInfo r2) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        return Bytes.compareTo(r1.getStartKey(), r2.getStartKey());<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    });<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    int numRegions = admin.getTableRegions(TABLE_NAME).size();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    int numRegionsAfterMerge = numRegions - 2;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    admin.mergeRegions(regions.get(1).getEncodedNameAsBytes(),<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        regions.get(2).getEncodedNameAsBytes(), true);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    admin.mergeRegions(regions.get(5).getEncodedNameAsBytes(),<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        regions.get(6).getEncodedNameAsBytes(), true);<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>    waitRegionsAfterMerge(numRegionsAfterMerge);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    assertEquals(numRegionsAfterMerge, admin.getTableRegions(TABLE_NAME).size());<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>    // Take a snapshot<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    String snapshotName = "snapshotAfterMerge";<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    SnapshotTestingUtils.snapshot(admin, snapshotName, TABLE_NAME.getNameAsString(),<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      SnapshotDescription.Type.FLUSH, 3);<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>    // Clone the table<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    TableName cloneName = TableName.valueOf("cloneMerge");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    admin.cloneSnapshot(snapshotName, cloneName);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, cloneName);<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>    verifyRowCount(UTIL, TABLE_NAME, numRows);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    verifyRowCount(UTIL, cloneName, numRows);<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    // test that we can delete the snapshot<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    UTIL.deleteTable(cloneName);<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>   * Basic end-to-end test of simple-flush-based snapshots<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  @Test (timeout=300000)<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  public void testFlushCreateListDestroy() throws Exception {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    LOG.debug("------- Starting Snapshot test -------------");<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    // make sure we don't fail on listing snapshots<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    // load the table so we have some data<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>    String snapshotName = "flushSnapshotCreateListDestroy";<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    FileSystem fs = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getFileSystem();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    Path rootDir = UTIL.getHBaseCluster().getMaster().getMasterFileSystem().getRootDir();<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    SnapshotTestingUtils.createSnapshotAndValidate(admin, TABLE_NAME, Bytes.toString(TEST_FAM),<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      snapshotName, rootDir, fs, true);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * Demonstrate that we reject snapshot requests if there is a snapshot already running on the<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * same table currently running and that concurrent snapshots on different tables can both<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * succeed concurretly.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  @Test(timeout=300000)<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  public void testConcurrentSnapshottingAttempts() throws IOException, InterruptedException {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    final TableName TABLE2_NAME = TableName.valueOf(TABLE_NAME + "2");<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    int ssNum = 20;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    // make sure we don't fail on listing snapshots<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    SnapshotTestingUtils.assertNoSnapshots(admin);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // create second testing table<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    SnapshotTestingUtils.createTable(UTIL, TABLE2_NAME, TEST_FAM);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    // load the table so we have some data<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    SnapshotTestingUtils.loadData(UTIL, TABLE_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    SnapshotTestingUtils.loadData(UTIL, TABLE2_NAME, DEFAULT_NUM_ROWS, TEST_FAM);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    final CountDownLatch toBeSubmitted = new CountDownLatch(ssNum);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    // We'll have one of these per thread<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    class SSRunnable implements Runnable {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      SnapshotDescription ss;<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      SSRunnable(SnapshotDescription ss) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.ss = ss;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>      @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      public void run() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        try {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          Admin admin = UTIL.getHBaseAdmin();<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          LOG.info("Submitting snapshot request: " + ClientSnapshotDescriptionUtils.toString(ss));<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          admin.takeSnapshotAsync(ss);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>        } catch (Exception e) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          LOG.info("Exception during snapshot request: " + ClientSnapshotDescriptionUtils.toString(<a name="line.435"></a>
+<span class="sourceLineNo">436</span>              ss)<a name="line.436"></a>
+<span class="sourceLineNo">437</span>              + ".  This is ok, we expect some", e);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        LOG.info("Submitted snapshot request: " + ClientSnapshotDescriptionUtils.toString(ss));<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        toBeSubmitted.countDown();<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    };<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // build descriptions<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    SnapshotDescription[] descs = new SnapshotDescription[ssNum];<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    for (int i = 0; i &lt; ssNum; i++) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      SnapshotDescription.Builder builder = SnapshotDescription.newBuilder();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      builder.setTable(((i % 2) == 0 ? TABLE_NAME : TABLE2_NAME).getNameAsString());<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      builder.setName("ss"+i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      builder.setType(SnapshotDescription.Type.FLUSH);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      descs[i] = builder.build();<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>    // kick each off its own thread<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    for (int i=0 ; i &lt; ssNum; i++) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      new Thread(new SSRunnable(descs[i])).start();<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>    // wait until all have been submitted<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    toBeSubmitted.await();<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    // loop until all are done.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    while (true) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      int doneCount = 0;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      for (SnapshotDescription ss : descs) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        try {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          if (admin.isSnapshotFinished(ss)) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            doneCount++;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>          }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        } catch (Exception e) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>          LOG.warn("Got an exception when checking for snapshot " + ss.getName(), e);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>          doneCount++;<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>      if (doneCount == descs.length) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        break;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      Thread.sleep(100);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // dump for debugging<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    UTIL.getHBaseCluster().getMaster().getMasterFileSystem().logFileSystemState(LOG);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    List&lt;SnapshotDescription&gt; taken = admin.listSnapshots();<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    int takenSize = taken.size();<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    LOG.info("Taken " + takenSize + " snapshots:  " + taken);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    assertTrue("We expect at least 1 request to be rejected because of we concurrently" +<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        " issued many requests", takenSize &lt; ssNum &amp;&amp; takenSize &gt; 0);<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>    // Verify that there's at least one snapshot per table<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    int t1SnapshotsCount = 0;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    int t2SnapshotsCount = 0;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    for (SnapshotDescription ss : taken) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      if (TableName.valueOf(ss.getTable()).equals(TABLE_NAME)) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>        t1SnapshotsCount++;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      } else if (TableName.valueOf(ss.getTable()).equals(TABLE2_NAME)) {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>        t2SnapshotsCount++;<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>    assertTrue("We expect at least 1 snapshot of table1 ", t1SnapshotsCount &gt; 0);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    assertTrue("We expect at least 1 snapshot of table2 ", t2SnapshotsCount &gt; 0);<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span>    UTIL.deleteTable(TABLE2_NAME);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span>  private void waitRegionsAfterMerge(final long numRegionsAfterMerge)<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      throws IOException, InterruptedException {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    Admin admin = UTIL.getHBaseAdmin();<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    // Verify that there's one region less<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    long startTime = System.currentTimeMillis();<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    while (admin.getTableRegions(TABLE_NAME).size() != numRegionsAfterMerge) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      // This may be flaky... if after 15sec the merge is not complete give up<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      // it will fail in the assertEquals(numRegionsAfterMerge).<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if ((System.currentTimeMillis() - startTime) &gt; 15000)<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        break;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      Thread.sleep(100);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    SnapshotTestingUtils.waitForTableToBeOnline(UTIL, TABLE_NAME);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
 <span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>  protected void verifyRowCount(final HBaseTestingUtility util, final TableName tableName,<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      long expectedRows) throws IOException {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    SnapshotTestingUtils.verifyRowCount(util, tableName, expectedRows);<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>  protected int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    return UTIL.countRows(table, families);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>}<a name="line.529"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>  protected void verifyRowCount(final HBaseTestingUtility util, final TableName tableName,<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      long expectedRows) throws IOException {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    SnapshotTestingUtils.verifyRowCount(util, tableName, expectedRows);<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">526</span><a name="line.526"></a>
+<span class="sourceLineNo">527</span>  protected int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return UTIL.countRows(table, families);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span>}<a name="line.530"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/xref-test/allclasses-frame.html b/xref-test/allclasses-frame.html
index 492f0de..7f456de 100644
--- a/xref-test/allclasses-frame.html
+++ b/xref-test/allclasses-frame.html
@@ -2568,6 +2568,9 @@
 				<a href="org/apache/hadoop/hbase/regionserver/TestColumnSeeking.html" target="classFrame">TestColumnSeeking</a>
 			</li>
 						<li>
+				<a href="org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" target="classFrame">TestCombinedBlockCache</a>
+			</li>
+						<li>
 				<a href="org/apache/hadoop/hbase/regionserver/TestCompactSplitThread.html" target="classFrame">TestCompactSplitThread</a>
 			</li>
 						<li>


[31/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
index a5f8b02..a6fcb88 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
@@ -131,16 +131,18 @@
 <span class="sourceLineNo">123</span><a name="line.123"></a>
 <span class="sourceLineNo">124</span>  @Override<a name="line.124"></a>
 <span class="sourceLineNo">125</span>  public boolean seekToPreviousRow(Cell key) throws IOException {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    checkReseek();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return this.heap.seekToPreviousRow(key);<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>  @Override<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public boolean backwardSeek(Cell key) throws IOException {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    checkReseek();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    return this.heap.backwardSeek(key);<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">126</span>    boolean flushed = checkFlushed();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    checkReseek(flushed);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return this.heap.seekToPreviousRow(key);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  <a name="line.130"></a>
+<span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public boolean backwardSeek(Cell key) throws IOException {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    boolean flushed = checkFlushed();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    checkReseek(flushed);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return this.heap.backwardSeek(key);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>}<a name="line.137"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
index 3e4c0fa..972a7d3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
@@ -113,373 +113,392 @@
 <span class="sourceLineNo">105</span>    byte[] stopRow,<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    long readPt<a name="line.106"></a>
 <span class="sourceLineNo">107</span>  ) throws IOException;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  <a name="line.108"></a>
-<span class="sourceLineNo">109</span>  ScanInfo getScanInfo();<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>   * Adds or replaces the specified KeyValues.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * &lt;p&gt;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * For each KeyValue specified, if a cell with the same row, family, and qualifier exists in<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * MemStore, it will be replaced. Otherwise, it will just be inserted to MemStore.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * &lt;p&gt;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * This operation is atomic on each KeyValue (row/family/qualifier) but not necessarily atomic<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * across all of them.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param cells<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param readpoint readpoint below which we can safely remove duplicate KVs<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @return memstore size delta<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @throws IOException<a name="line.122"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Create scanners on the given files and if needed on the memstore with no filtering based on TTL<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * (that happens further down the line).<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @param files the list of files on which the scanners has to be created<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * @param cacheBlocks cache the blocks or not<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * @param isGet true if it is get, false if not<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param usePread true to use pread, false if not<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param isCompaction true if the scanner is created for compaction<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param matcher the scan query matcher<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @param startRow the start row<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @param stopRow the stop row<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param readPt the read point of the current scan<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param includeMemstoreScanner true if memstore has to be included<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @return scanners on the given files and on the memstore if specified<a name="line.122"></a>
 <span class="sourceLineNo">123</span>   */<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * Adds a value to the memstore<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param cell<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @return memstore size delta<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  long add(Cell cell);<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>   * When was the last edit done in the memstore<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  long timeOfOldestEdit();<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>   * Removes a Cell from the memstore. The Cell is removed only if its key<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * &amp;amp; memstoreTS match the key &amp;amp; memstoreTS value of the cell<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * parameter.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * @param cell<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  void rollback(final Cell cell);<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  FileSystem getFileSystem();<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>  /**<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param maxKeyCount<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param compression Compression algorithm to use<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @param isCompaction whether we are creating a new file in a compaction<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @param includeMVCCReadpoint whether we should out the MVCC readpoint<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * @return Writer for a new StoreFile in the tmp dir.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  StoreFile.Writer createWriterInTmp(<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      long maxKeyCount,<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      Compression.Algorithm compression,<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      boolean isCompaction,<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      boolean includeMVCCReadpoint,<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      boolean includesTags<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  ) throws IOException;<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>   * @param maxKeyCount<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param compression Compression algorithm to use<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @param isCompaction whether we are creating a new file in a compaction<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @param includeMVCCReadpoint whether we should out the MVCC readpoint<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * @param shouldDropBehind should the writer drop caches behind writes<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * @return Writer for a new StoreFile in the tmp dir.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  StoreFile.Writer createWriterInTmp(<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    long maxKeyCount,<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    Compression.Algorithm compression,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    boolean isCompaction,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    boolean includeMVCCReadpoint,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    boolean includesTags,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    boolean shouldDropBehind<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  ) throws IOException;<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">124</span>   List&lt;KeyValueScanner&gt; getScanners(List&lt;StoreFile&gt; files, boolean cacheBlocks, boolean isGet,<a name="line.124"></a>
+<span class="sourceLineNo">125</span>          boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, byte[] startRow,<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          byte[] stopRow, long readPt, boolean includeMemstoreScanner) throws IOException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  <a name="line.127"></a>
+<span class="sourceLineNo">128</span>  ScanInfo getScanInfo();<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  /**<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   * Adds or replaces the specified KeyValues.<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * &lt;p&gt;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * For each KeyValue specified, if a cell with the same row, family, and qualifier exists in<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * MemStore, it will be replaced. Otherwise, it will just be inserted to MemStore.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * &lt;p&gt;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * This operation is atomic on each KeyValue (row/family/qualifier) but not necessarily atomic<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * across all of them.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @param cells<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @param readpoint readpoint below which we can safely remove duplicate KVs<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @return memstore size delta<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @throws IOException<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException;<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>   * Adds a value to the memstore<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param cell<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @return memstore size delta<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  long add(Cell cell);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * When was the last edit done in the memstore<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  long timeOfOldestEdit();<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>   * Removes a Cell from the memstore. The Cell is removed only if its key<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * &amp;amp; memstoreTS match the key &amp;amp; memstoreTS value of the cell<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * parameter.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param cell<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  void rollback(final Cell cell);<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  FileSystem getFileSystem();<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>  /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param maxKeyCount<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * @param compression Compression algorithm to use<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * @param isCompaction whether we are creating a new file in a compaction<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @param includeMVCCReadpoint whether we should out the MVCC readpoint<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @return Writer for a new StoreFile in the tmp dir.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  StoreFile.Writer createWriterInTmp(<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      long maxKeyCount,<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      Compression.Algorithm compression,<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      boolean isCompaction,<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      boolean includeMVCCReadpoint,<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      boolean includesTags<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  ) throws IOException;<a name="line.181"></a>
 <span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  // Compaction oriented methods<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  boolean throttleCompaction(long compactionSize);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * getter for CompactionProgress object<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @return CompactionProgress object; can be null<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  CompactionProgress getCompactionProgress();<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  CompactionContext requestCompaction() throws IOException;<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  /**<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * @deprecated see requestCompaction(int, CompactionRequest, User)<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  @Deprecated<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  CompactionContext requestCompaction(int priority, CompactionRequest baseRequest)<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      throws IOException;<a name="line.201"></a>
+<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @param maxKeyCount<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * @param compression Compression algorithm to use<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * @param isCompaction whether we are creating a new file in a compaction<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * @param includeMVCCReadpoint whether we should out the MVCC readpoint<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @param shouldDropBehind should the writer drop caches behind writes<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @return Writer for a new StoreFile in the tmp dir.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  StoreFile.Writer createWriterInTmp(<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    long maxKeyCount,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    Compression.Algorithm compression,<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    boolean isCompaction,<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    boolean includeMVCCReadpoint,<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    boolean includesTags,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    boolean shouldDropBehind<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  ) throws IOException;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
 <span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  CompactionContext requestCompaction(int priority, CompactionRequest baseRequest, User user)<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      throws IOException;<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  void cancelRequestedCompaction(CompactionContext compaction);<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>   * @deprecated see compact(CompactionContext, CompactionThroughputController, User)<a name="line.209"></a>
+<span class="sourceLineNo">203</span>  // Compaction oriented methods<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  boolean throttleCompaction(long compactionSize);<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>   * getter for CompactionProgress object<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   * @return CompactionProgress object; can be null<a name="line.209"></a>
 <span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @Deprecated<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      CompactionThroughputController throughputController) throws IOException;<a name="line.213"></a>
+<span class="sourceLineNo">211</span>  CompactionProgress getCompactionProgress();<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  CompactionContext requestCompaction() throws IOException;<a name="line.213"></a>
 <span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    CompactionThroughputController throughputController, User user) throws IOException;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * @return true if we should run a major compaction.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  boolean isMajorCompaction() throws IOException;<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  void triggerMajorCompaction();<a name="line.223"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @deprecated see requestCompaction(int, CompactionRequest, User)<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  @Deprecated<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  CompactionContext requestCompaction(int priority, CompactionRequest baseRequest)<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      throws IOException;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  CompactionContext requestCompaction(int priority, CompactionRequest baseRequest, User user)<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      throws IOException;<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>   * See if there's too much store files in this store<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @return true if number of store files is greater than the number defined in minFilesToCompact<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  boolean needsCompaction();<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  int getCompactPriority();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  StoreFlushContext createFlushContext(long cacheFlushId);<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>   * Call to complete a compaction. Its for the case where we find in the WAL a compaction<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * that was not finished.  We could find one recovering a WAL after a regionserver crash.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * See HBASE-2331.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param compaction the descriptor for compaction<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param pickCompactionFiles whether or not pick up the new compaction output files and<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * add it to the store<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * @param removeFiles whether to remove/archive files from filesystem<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  void replayCompactionMarker(CompactionDescriptor compaction, boolean pickCompactionFiles,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      boolean removeFiles)<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      throws IOException;<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  // Split oriented methods<a name="line.248"></a>
+<span class="sourceLineNo">225</span>  void cancelRequestedCompaction(CompactionContext compaction);<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>  /**<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @deprecated see compact(CompactionContext, CompactionThroughputController, User)<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  @Deprecated<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      CompactionThroughputController throughputController) throws IOException;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  List&lt;StoreFile&gt; compact(CompactionContext compaction,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    CompactionThroughputController throughputController, User user) throws IOException;<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * @return true if we should run a major compaction.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  boolean isMajorCompaction() throws IOException;<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  void triggerMajorCompaction();<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * See if there's too much store files in this store<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @return true if number of store files is greater than the number defined in minFilesToCompact<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  boolean needsCompaction();<a name="line.248"></a>
 <span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  boolean canSplit();<a name="line.250"></a>
+<span class="sourceLineNo">250</span>  int getCompactPriority();<a name="line.250"></a>
 <span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  /**<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * Determines if Store should be split<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * @return byte[] if store should be split, null otherwise.<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  byte[] getSplitPoint();<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  // Bulk Load methods<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * This throws a WrongRegionException if the HFile does not fit in this region, or an<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * InvalidHFileException if the HFile is not valid.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  void assertBulkLoadHFileOk(Path srcPath) throws IOException;<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>   * This method should only be called from Region. It is assumed that the ranges of values in the<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * HFile fit within the stores assigned region. (assertBulkLoadHFileOk checks this)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   *<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @param srcPathStr<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param sequenceId sequence Id associated with the HFile<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   */<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  Path bulkLoadHFile(String srcPathStr, long sequenceId) throws IOException;<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  // General accessors into the state of the store<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // TODO abstract some of this out into a metrics class<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the store has any underlying reference files to older HFiles<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  boolean hasReferences();<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  /**<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * @return The size of this store's memstore, in bytes<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  long getMemStoreSize();<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>   * @return The amount of memory we could flush from this memstore; usually this is equal to<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * {@link #getMemStoreSize()} unless we are carrying snapshots and then it will be the size of<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * outstanding snapshots.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  long getFlushableSize();<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>   * Returns the memstore snapshot size<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return size of the memstore snapshot<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  long getSnapshotSize();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>  HColumnDescriptor getFamily();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return The maximum sequence id in all store files.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  long getMaxSequenceId();<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>   * @return The maximum memstoreTS in all store files.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   */<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  long getMaxMemstoreTS();<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>   * @return the data block encoder<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  HFileDataBlockEncoder getDataBlockEncoder();<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /** @return aggregate size of all HStores used in the last compaction */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  long getLastCompactSize();<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  /** @return aggregate size of HStore */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  long getSize();<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>   * @return Count of store files<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  int getStorefilesCount();<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>   * @return The size of the store files, in bytes, uncompressed.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  long getStoreSizeUncompressed();<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>   * @return The size of the store files, in bytes.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  long getStorefilesSize();<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>   * @return The size of the store file indexes, in bytes.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  long getStorefilesIndexSize();<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>   * Returns the total size of all index blocks in the data block indexes, including the root level,<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * intermediate levels, and the leaf level for multi-level indexes, or just the root level for<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * single-level indexes.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @return the total size of block indexes in the store<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  long getTotalStaticIndexSize();<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  /**<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * Bloom blocks currently not loaded into the block cache are counted.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   * @return the total size of all Bloom filters in the store<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   */<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  long getTotalStaticBloomSize();<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  // Test-helper methods<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  /**<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * Used for tests.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @return cache configuration for this Store.<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  CacheConfig getCacheConfig();<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>   * @return the parent region info hosting this store<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  HRegionInfo getRegionInfo();<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  boolean areWritesEnabled();<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @return The smallest mvcc readPoint across all the scanners in this<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * region. Writes older than this readPoint, are included  in every<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * read operation.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  long getSmallestReadPoint();<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  String getColumnFamilyName();<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  TableName getTableName();<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>   * @return The number of cells flushed to disk<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   */<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  long getFlushedCellsCount();<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>   * @return The total size of data flushed to disk, in bytes<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  long getFlushedCellsSize();<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>   * @return The number of cells processed during minor compactions<a name="line.398"></a>
+<span class="sourceLineNo">252</span>  StoreFlushContext createFlushContext(long cacheFlushId);<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * Call to complete a compaction. Its for the case where we find in the WAL a compaction<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * that was not finished.  We could find one recovering a WAL after a regionserver crash.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * See HBASE-2331.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * @param compaction the descriptor for compaction<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @param pickCompactionFiles whether or not pick up the new compaction output files and<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * add it to the store<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @param removeFiles whether to remove/archive files from filesystem<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  void replayCompactionMarker(CompactionDescriptor compaction, boolean pickCompactionFiles,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      boolean removeFiles)<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throws IOException;<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  // Split oriented methods<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  boolean canSplit();<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>   * Determines if Store should be split<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * @return byte[] if store should be split, null otherwise.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  byte[] getSplitPoint();<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  // Bulk Load methods<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>   * This throws a WrongRegionException if the HFile does not fit in this region, or an<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * InvalidHFileException if the HFile is not valid.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  void assertBulkLoadHFileOk(Path srcPath) throws IOException;<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>   * This method should only be called from Region. It is assumed that the ranges of values in the<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * HFile fit within the stores assigned region. (assertBulkLoadHFileOk checks this)<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   *<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * @param srcPathStr<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * @param sequenceId sequence Id associated with the HFile<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  Path bulkLoadHFile(String srcPathStr, long sequenceId) throws IOException;<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  // General accessors into the state of the store<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  // TODO abstract some of this out into a metrics class<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the store has any underlying reference files to older HFiles<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  boolean hasReferences();<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @return The size of this store's memstore, in bytes<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  long getMemStoreSize();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * @return The amount of memory we could flush from this memstore; usually this is equal to<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * {@link #getMemStoreSize()} unless we are carrying snapshots and then it will be the size of<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * outstanding snapshots.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  long getFlushableSize();<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>   * Returns the memstore snapshot size<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @return size of the memstore snapshot<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  long getSnapshotSize();<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  HColumnDescriptor getFamily();<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>   * @return The maximum sequence id in all store files.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  long getMaxSequenceId();<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * @return The maximum memstoreTS in all store files.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  long getMaxMemstoreTS();<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>  /**<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @return the data block encoder<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  HFileDataBlockEncoder getDataBlockEncoder();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /** @return aggregate size of all HStores used in the last compaction */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  long getLastCompactSize();<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /** @return aggregate size of HStore */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  long getSize();<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>   * @return Count of store files<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  int getStorefilesCount();<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>   * @return The size of the store files, in bytes, uncompressed.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  long getStoreSizeUncompressed();<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  /**<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * @return The size of the store files, in bytes.<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  long getStorefilesSize();<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>   * @return The size of the store file indexes, in bytes.<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  long getStorefilesIndexSize();<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>   * Returns the total size of all index blocks in the data block indexes, including the root level,<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * intermediate levels, and the leaf level for multi-level indexes, or just the root level for<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * single-level indexes.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * @return the total size of block indexes in the store<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  long getTotalStaticIndexSize();<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>   * Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * Bloom blocks currently not loaded into the block cache are counted.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @return the total size of all Bloom filters in the store<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  long getTotalStaticBloomSize();<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  // Test-helper methods<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>   * Used for tests.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @return cache configuration for this Store.<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  CacheConfig getCacheConfig();<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>  /**<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * @return the parent region info hosting this store<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   */<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  HRegionInfo getRegionInfo();<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  boolean areWritesEnabled();<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return The smallest mvcc readPoint across all the scanners in this<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * region. Writes older than this readPoint, are included  in every<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * read operation.<a name="line.398"></a>
 <span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  long getCompactedCellsCount();<a name="line.400"></a>
+<span class="sourceLineNo">400</span>  long getSmallestReadPoint();<a name="line.400"></a>
 <span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * @return The total amount of data processed during minor compactions, in bytes<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  long getCompactedCellsSize();<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * @return The number of cells processed during major compactions<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  long getMajorCompactedCellsCount();<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @return The total amount of data processed during major compactions, in bytes<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  long getMajorCompactedCellsSize();<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>   * @param o Observer who wants to know about changes in set of Readers<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   */<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  void addChangedReaderObserver(ChangedReadersObserver o);<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>   * @param o Observer no longer interested in changes in set of Readers.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  void deleteChangedReaderObserver(ChangedReadersObserver o);<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>  /**<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @return Whether this store has too many store files.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  boolean hasTooManyStoreFiles();<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>   * Checks the underlying store files, and opens the files that  have not<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * been opened, and removes the store file readers for store files no longer<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * available. Mainly used by secondary region replicas to keep up to date with<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * the primary region files.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @throws IOException<a name="line.437"></a>
+<span class="sourceLineNo">402</span>  String getColumnFamilyName();<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  TableName getTableName();<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>  /**<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * @return The number of cells flushed to disk<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  long getFlushedCellsCount();<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>   * @return The total size of data flushed to disk, in bytes<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  long getFlushedCellsSize();<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>   * @return The number of cells processed during minor compactions<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  long getCompactedCellsCount();<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return The total amount of data processed during minor compactions, in bytes<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  long getCompactedCellsSize();<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  /**<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @return The number of cells processed during major compactions<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  long getMajorCompactedCellsCount();<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>   * @return The total amount of data processed during major compactions, in bytes<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  long getMajorCompactedCellsSize();<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>   * @param o Observer who wants to know about changes in set of Readers<a name="line.437"></a>
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  void refreshStoreFiles() throws IOException;<a name="line.439"></a>
+<span class="sourceLineNo">439</span>  void addChangedReaderObserver(ChangedReadersObserver o);<a name="line.439"></a>
 <span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * This value can represent the degree of emergency of compaction for this store. It should be<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * &lt;ul&gt;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * &lt;li&gt;if getStorefilesCount &amp;lt;= getMinFilesToCompact, return 0.0&lt;/li&gt;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;li&gt;return (getStorefilesCount - getMinFilesToCompact) / (blockingFileCount -<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * getMinFilesToCompact)&lt;/li&gt;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * &lt;/ul&gt;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * &lt;p&gt;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * And for striped stores, we should calculate this value by the files in each stripe separately<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * and return the maximum value.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * &lt;p&gt;<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * It is similar to {@link #getCompactPriority()} except that it is more suitable to use in a<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   * linear formula.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   */<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  double getCompactionPressure();<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>    * Replaces the store files that the store has with the given files. Mainly used by<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    * secondary region replicas to keep up to date with<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    * the primary region files.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    * @throws IOException<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    */<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  void refreshStoreFiles(Collection&lt;String&gt; newFiles) throws IOException;<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  void bulkLoadHFile(StoreFileInfo fileInfo) throws IOException;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  boolean isPrimaryReplicaStore();<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>  /**<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * Closes and archives the compacted files under this store<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   */<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  void closeAndArchiveCompactedFiles() throws IOException;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>}<a name="line.474"></a>
+<span class="sourceLineNo">441</span>  /*<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @param o Observer no longer interested in changes in set of Readers.<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   */<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  void deleteChangedReaderObserver(ChangedReadersObserver o);<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>   * @return Whether this store has too many store files.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
+<span class="sourceLineNo">449</span>  boolean hasTooManyStoreFiles();<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span>  /**<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * Checks the underlying store files, and opens the files that  have not<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * been opened, and removes the store file readers for store files no longer<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   * available. Mainly used by secondary region replicas to keep up to date with<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   * the primary region files.<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   * @throws IOException<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  void refreshStoreFiles() throws IOException;<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 value can represent the degree of emergency of compaction for this store. It should be<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * &lt;ul&gt;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * &lt;li&gt;if getStorefilesCount &amp;lt;= getMinFilesToCompact, return 0.0&lt;/li&gt;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * &lt;li&gt;return (getStorefilesCount - getMinFilesToCompact) / (blockingFileCount -<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * getMinFilesToCompact)&lt;/li&gt;<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * &lt;/ul&gt;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * &lt;p&gt;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * And for striped stores, we should calculate this value by the files in each stripe separately<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * and return the maximum value.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * &lt;p&gt;<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * It is similar to {@link #getCompactPriority()} except that it is more suitable to use in a<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * linear formula.<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  double getCompactionPressure();<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>    * Replaces the store files that the store has with the given files. Mainly used by<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    * secondary region replicas to keep up to date with<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    * the primary region files.<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void refreshStoreFiles(Collection&lt;String&gt; newFiles) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  void bulkLoadHFile(StoreFileInfo fileInfo) throws IOException;<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  boolean isPrimaryReplicaStore();<a name="line.487"></a>
+<span class="sourceLineNo">488</span><a name="line.488"></a>
+<span class="sourceLineNo">489</span>  /**<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * Closes and archives the compacted files under this store<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   */<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  void closeAndArchiveCompactedFiles() throws IOException;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>}<a name="line.493"></a>
 
 
 


[45/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.


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

Branch: refs/heads/asf-site
Commit: 736088b30e1d2420558304e06750570490a53d9c
Parents: 900a947
Author: jenkins <bu...@apache.org>
Authored: Mon Dec 14 16:00:51 2015 +0000
Committer: Misty Stanley-Jones <ms...@cloudera.com>
Committed: Mon Dec 14 08:37:02 2015 -0800

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |   Bin 14187212 -> 14187212 bytes
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 book.html                                       |     2 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 11436 +++++++++--------
 checkstyle.rss                                  |    10 +-
 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                       |    47 +-
 .../class-use/InterfaceStability.Unstable.html  |    12 +-
 .../hbase/classification/package-tree.html      |     8 +-
 .../hadoop/hbase/client/package-tree.html       |     6 +-
 .../hadoop/hbase/filter/package-tree.html       |     6 +-
 .../hadoop/hbase/io/hfile/CacheStats.html       |     8 +-
 .../CombinedBlockCache.CombinedCacheStats.html  |   110 +-
 .../hbase/io/hfile/CombinedBlockCache.html      |    10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     4 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     2 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |     8 +-
 .../hadoop/hbase/quotas/package-tree.html       |     6 +-
 .../regionserver/ChangedReadersObserver.html    |     8 +-
 .../hadoop/hbase/regionserver/HMobStore.html    |     2 +-
 .../regionserver/HStore.StoreFlusherImpl.html   |    28 +-
 .../hadoop/hbase/regionserver/HStore.html       |   313 +-
 .../regionserver/MobCompactionStoreScanner.html |     4 +-
 .../hbase/regionserver/MobStoreScanner.html     |     4 +-
 .../regionserver/ReversedMobStoreScanner.html   |     4 +-
 .../regionserver/ReversedStoreScanner.html      |     6 +-
 .../apache/hadoop/hbase/regionserver/Store.html |   223 +-
 .../hbase/regionserver/StoreFileScanner.html    |   117 +-
 ...StoreScanner.StoreScannerCompactionRace.html |    12 +-
 .../hadoop/hbase/regionserver/StoreScanner.html |   302 +-
 .../regionserver/class-use/KeyValueScanner.html |    61 +-
 .../class-use/ScanQueryMatcher.html             |    29 +
 .../hbase/regionserver/class-use/StoreFile.html |   103 +-
 .../hadoop/hbase/regionserver/package-tree.html |    26 +-
 ...erClusterReplicationEndpoint.Replicator.html |    10 +-
 .../HBaseInterClusterReplicationEndpoint.html   |    16 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     4 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    96 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    48 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   120 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    48 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    24 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     4 +-
 .../hadoop/hbase/io/hfile/CacheStats.html       |    57 +-
 .../CombinedBlockCache.CombinedCacheStats.html  |   108 +-
 .../hbase/io/hfile/CombinedBlockCache.html      |   108 +-
 .../regionserver/ChangedReadersObserver.html    |    29 +-
 .../regionserver/HStore.StoreFlusherImpl.html   |  2540 ++--
 .../hadoop/hbase/regionserver/HStore.html       |  2540 ++--
 .../regionserver/ReversedStoreScanner.html      |    22 +-
 .../apache/hadoop/hbase/regionserver/Store.html |   729 +-
 .../hbase/regionserver/StoreFileScanner.html    |   945 +-
 ...StoreScanner.StoreScannerCompactionRace.html |  1684 +--
 .../hadoop/hbase/regionserver/StoreScanner.html |  1684 +--
 ...erClusterReplicationEndpoint.Replicator.html |   477 +-
 .../HBaseInterClusterReplicationEndpoint.html   |   477 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    68 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   120 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |   120 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   120 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    36 +-
 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                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 modules.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |     4 +-
 project-info.html                               |     4 +-
 project-reports.html                            |     4 +-
 project-summary.html                            |     4 +-
 pseudo-distributed.html                         |     4 +-
 replication.html                                |     4 +-
 resources.html                                  |     4 +-
 source-repository.html                          |     4 +-
 sponsors.html                                   |     4 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testdevapidocs/allclasses-frame.html            |     1 +
 testdevapidocs/allclasses-noframe.html          |     1 +
 testdevapidocs/index-all.html                   |     8 +
 ...cing.BlockCompactionsInCompletionHStore.html |     2 +-
 ...ionFromClient.CustomInnerRegionObserver.html |    26 +-
 ...Client.CustomInnerRegionObserverWrapper.html |     6 +-
 ...stBlockEvictionFromClient.CustomScanner.html |    30 +-
 .../TestBlockEvictionFromClient.GetThread.html  |    14 +-
 ...tBlockEvictionFromClient.MultiGetThread.html |    10 +-
 .../TestBlockEvictionFromClient.ScanThread.html |    12 +-
 .../client/TestBlockEvictionFromClient.html     |    58 +-
 .../io/hfile/TestChecksum.FSReaderImplTest.html |     4 +-
 .../hbase/io/hfile/TestFixedFileTrailer.html    |     4 +-
 .../hadoop/hbase/io/hfile/package-frame.html    |     1 +
 .../hadoop/hbase/io/hfile/package-summary.html  |    58 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     3 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hadoop/hbase/regionserver/package-tree.html |     4 +-
 .../snapshot/TestFlushSnapshotFromClient.html   |    20 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 testdevapidocs/overview-tree.html               |     1 +
 ...ionFromClient.CustomInnerRegionObserver.html |  1162 +-
 ...Client.CustomInnerRegionObserverWrapper.html |  1162 +-
 ...stBlockEvictionFromClient.CustomScanner.html |  1162 +-
 .../TestBlockEvictionFromClient.GetThread.html  |  1162 +-
 ...tBlockEvictionFromClient.MultiGetThread.html |  1162 +-
 .../TestBlockEvictionFromClient.ScanThread.html |  1162 +-
 .../client/TestBlockEvictionFromClient.html     |  1162 +-
 .../hbase/regionserver/TestStoreScanner.html    |     4 +-
 .../hbase/regionserver/TestWideScanner.html     |     2 +-
 .../snapshot/TestFlushSnapshotFromClient.html   |   713 +-
 xref-test/allclasses-frame.html                 |     3 +
 .../client/TestBlockEvictionFromClient.html     |  1162 +-
 .../hadoop/hbase/io/hfile/package-frame.html    |     3 +
 .../hadoop/hbase/io/hfile/package-summary.html  |     5 +
 .../hbase/regionserver/TestStoreScanner.html    |     4 +-
 .../hbase/regionserver/TestWideScanner.html     |     2 +-
 .../snapshot/TestFlushSnapshotFromClient.html   |   713 +-
 .../hadoop/hbase/io/hfile/CacheStats.html       |    57 +-
 .../hbase/io/hfile/CombinedBlockCache.html      |   108 +-
 .../regionserver/ChangedReadersObserver.html    |    29 +-
 .../hadoop/hbase/regionserver/HStore.html       |  2540 ++--
 .../regionserver/ReversedStoreScanner.html      |    22 +-
 .../apache/hadoop/hbase/regionserver/Store.html |   731 +-
 .../hbase/regionserver/StoreFileScanner.html    |   945 +-
 .../hadoop/hbase/regionserver/StoreScanner.html |  1684 +--
 .../HBaseInterClusterReplicationEndpoint.html   |   477 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    68 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   120 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    36 +-
 189 files changed, 23119 insertions(+), 21431 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 20028dc..8f0e1e1 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index c928e94..73c0d2b 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/736088b3/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index 9161721..3e67473 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:20151211145803)
-  /CreationDate (D:20151211145803)
+  /ModDate (D:20151214155717)
+  /CreationDate (D:20151214155717)
   /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/736088b3/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index c3d02ad..f00258f 100644
--- a/book.html
+++ b/book.html
@@ -32882,7 +32882,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-11 14:33:34 UTC
+Last updated 2015-12-14 15:26:14 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index a737f1f..d9887cc 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 


[06/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref/org/apache/hadoop/hbase/regionserver/Store.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/regionserver/Store.html b/xref/org/apache/hadoop/hbase/regionserver/Store.html
index a8a9e46..e3c0af9 100644
--- a/xref/org/apache/hadoop/hbase/regionserver/Store.html
+++ b/xref/org/apache/hadoop/hbase/regionserver/Store.html
@@ -115,373 +115,392 @@
 <a class="jxr_linenumber" name="105" href="#105">105</a>     byte[] stopRow,
 <a class="jxr_linenumber" name="106" href="#106">106</a>     <strong class="jxr_keyword">long</strong> readPt
 <a class="jxr_linenumber" name="107" href="#107">107</a>   ) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="108" href="#108">108</a>   
-<a class="jxr_linenumber" name="109" href="#109">109</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> getScanInfo();
-<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">   * Adds or replaces the specified KeyValues.</em>
-<a class="jxr_linenumber" name="113" href="#113">113</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="114" href="#114">114</a> <em class="jxr_javadoccomment">   * For each KeyValue specified, if a cell with the same row, family, and qualifier exists in</em>
-<a class="jxr_linenumber" name="115" href="#115">115</a> <em class="jxr_javadoccomment">   * MemStore, it will be replaced. Otherwise, it will just be inserted to MemStore.</em>
-<a class="jxr_linenumber" name="116" href="#116">116</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="117" href="#117">117</a> <em class="jxr_javadoccomment">   * This operation is atomic on each KeyValue (row/family/qualifier) but not necessarily atomic</em>
-<a class="jxr_linenumber" name="118" href="#118">118</a> <em class="jxr_javadoccomment">   * across all of them.</em>
-<a class="jxr_linenumber" name="119" href="#119">119</a> <em class="jxr_javadoccomment">   * @param cells</em>
-<a class="jxr_linenumber" name="120" href="#120">120</a> <em class="jxr_javadoccomment">   * @param readpoint readpoint below which we can safely remove duplicate KVs</em>
-<a class="jxr_linenumber" name="121" href="#121">121</a> <em class="jxr_javadoccomment">   * @return memstore size delta</em>
-<a class="jxr_linenumber" name="122" href="#122">122</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<a class="jxr_linenumber" name="108" href="#108">108</a> 
+<a class="jxr_linenumber" name="109" href="#109">109</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="110" href="#110">110</a> <em class="jxr_javadoccomment">   * Create scanners on the given files and if needed on the memstore with no filtering based on TTL</em>
+<a class="jxr_linenumber" name="111" href="#111">111</a> <em class="jxr_javadoccomment">   * (that happens further down the line).</em>
+<a class="jxr_linenumber" name="112" href="#112">112</a> <em class="jxr_javadoccomment">   * @param files the list of files on which the scanners has to be created</em>
+<a class="jxr_linenumber" name="113" href="#113">113</a> <em class="jxr_javadoccomment">   * @param cacheBlocks cache the blocks or not</em>
+<a class="jxr_linenumber" name="114" href="#114">114</a> <em class="jxr_javadoccomment">   * @param isGet true if it is get, false if not</em>
+<a class="jxr_linenumber" name="115" href="#115">115</a> <em class="jxr_javadoccomment">   * @param usePread true to use pread, false if not</em>
+<a class="jxr_linenumber" name="116" href="#116">116</a> <em class="jxr_javadoccomment">   * @param isCompaction true if the scanner is created for compaction</em>
+<a class="jxr_linenumber" name="117" href="#117">117</a> <em class="jxr_javadoccomment">   * @param matcher the scan query matcher</em>
+<a class="jxr_linenumber" name="118" href="#118">118</a> <em class="jxr_javadoccomment">   * @param startRow the start row</em>
+<a class="jxr_linenumber" name="119" href="#119">119</a> <em class="jxr_javadoccomment">   * @param stopRow the stop row</em>
+<a class="jxr_linenumber" name="120" href="#120">120</a> <em class="jxr_javadoccomment">   * @param readPt the read point of the current scan</em>
+<a class="jxr_linenumber" name="121" href="#121">121</a> <em class="jxr_javadoccomment">   * @param includeMemstoreScanner true if memstore has to be included</em>
+<a class="jxr_linenumber" name="122" href="#122">122</a> <em class="jxr_javadoccomment">   * @return scanners on the given files and on the memstore if specified</em>
 <a class="jxr_linenumber" name="123" href="#123">123</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="124" href="#124">124</a>   <strong class="jxr_keyword">long</strong> upsert(Iterable&lt;Cell&gt; cells, <strong class="jxr_keyword">long</strong> readpoint) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="125" href="#125">125</a> 
-<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> <em class="jxr_javadoccomment">   * Adds a value to the memstore</em>
-<a class="jxr_linenumber" name="128" href="#128">128</a> <em class="jxr_javadoccomment">   * @param cell</em>
-<a class="jxr_linenumber" name="129" href="#129">129</a> <em class="jxr_javadoccomment">   * @return memstore size delta</em>
-<a class="jxr_linenumber" name="130" href="#130">130</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="131" href="#131">131</a>   <strong class="jxr_keyword">long</strong> add(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> cell);
-<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">   * When was the last edit done in the memstore</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">long</strong> timeOfOldestEdit();
-<a class="jxr_linenumber" name="137" href="#137">137</a> 
-<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> <em class="jxr_javadoccomment">   * Removes a Cell from the memstore. The Cell is removed only if its key</em>
-<a class="jxr_linenumber" name="140" href="#140">140</a> <em class="jxr_javadoccomment">   * &amp;amp; memstoreTS match the key &amp;amp; memstoreTS value of the cell</em>
-<a class="jxr_linenumber" name="141" href="#141">141</a> <em class="jxr_javadoccomment">   * parameter.</em>
-<a class="jxr_linenumber" name="142" href="#142">142</a> <em class="jxr_javadoccomment">   * @param cell</em>
-<a class="jxr_linenumber" name="143" href="#143">143</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="144" href="#144">144</a>   <strong class="jxr_keyword">void</strong> rollback(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> cell);
-<a class="jxr_linenumber" name="145" href="#145">145</a> 
-<a class="jxr_linenumber" name="146" href="#146">146</a>   FileSystem getFileSystem();
-<a class="jxr_linenumber" name="147" href="#147">147</a> 
-<a class="jxr_linenumber" name="148" href="#148">148</a> 
-<a class="jxr_linenumber" name="149" href="#149">149</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="150" href="#150">150</a> <em class="jxr_javadoccomment">   * @param maxKeyCount</em>
-<a class="jxr_linenumber" name="151" href="#151">151</a> <em class="jxr_javadoccomment">   * @param compression Compression algorithm to use</em>
-<a class="jxr_linenumber" name="152" href="#152">152</a> <em class="jxr_javadoccomment">   * @param isCompaction whether we are creating a new file in a compaction</em>
-<a class="jxr_linenumber" name="153" href="#153">153</a> <em class="jxr_javadoccomment">   * @param includeMVCCReadpoint whether we should out the MVCC readpoint</em>
-<a class="jxr_linenumber" name="154" href="#154">154</a> <em class="jxr_javadoccomment">   * @return Writer for a new StoreFile in the tmp dir.</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>   StoreFile.Writer createWriterInTmp(
-<a class="jxr_linenumber" name="157" href="#157">157</a>       <strong class="jxr_keyword">long</strong> maxKeyCount,
-<a class="jxr_linenumber" name="158" href="#158">158</a>       Compression.Algorithm compression,
-<a class="jxr_linenumber" name="159" href="#159">159</a>       <strong class="jxr_keyword">boolean</strong> isCompaction,
-<a class="jxr_linenumber" name="160" href="#160">160</a>       <strong class="jxr_keyword">boolean</strong> includeMVCCReadpoint,
-<a class="jxr_linenumber" name="161" href="#161">161</a>       <strong class="jxr_keyword">boolean</strong> includesTags
-<a class="jxr_linenumber" name="162" href="#162">162</a>   ) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="163" href="#163">163</a> 
-<a class="jxr_linenumber" name="164" href="#164">164</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="165" href="#165">165</a> <em class="jxr_javadoccomment">   * @param maxKeyCount</em>
-<a class="jxr_linenumber" name="166" href="#166">166</a> <em class="jxr_javadoccomment">   * @param compression Compression algorithm to use</em>
-<a class="jxr_linenumber" name="167" href="#167">167</a> <em class="jxr_javadoccomment">   * @param isCompaction whether we are creating a new file in a compaction</em>
-<a class="jxr_linenumber" name="168" href="#168">168</a> <em class="jxr_javadoccomment">   * @param includeMVCCReadpoint whether we should out the MVCC readpoint</em>
-<a class="jxr_linenumber" name="169" href="#169">169</a> <em class="jxr_javadoccomment">   * @param shouldDropBehind should the writer drop caches behind writes</em>
-<a class="jxr_linenumber" name="170" href="#170">170</a> <em class="jxr_javadoccomment">   * @return Writer for a new StoreFile in the tmp dir.</em>
-<a class="jxr_linenumber" name="171" href="#171">171</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="172" href="#172">172</a>   StoreFile.Writer createWriterInTmp(
-<a class="jxr_linenumber" name="173" href="#173">173</a>     <strong class="jxr_keyword">long</strong> maxKeyCount,
-<a class="jxr_linenumber" name="174" href="#174">174</a>     Compression.Algorithm compression,
-<a class="jxr_linenumber" name="175" href="#175">175</a>     <strong class="jxr_keyword">boolean</strong> isCompaction,
-<a class="jxr_linenumber" name="176" href="#176">176</a>     <strong class="jxr_keyword">boolean</strong> includeMVCCReadpoint,
-<a class="jxr_linenumber" name="177" href="#177">177</a>     <strong class="jxr_keyword">boolean</strong> includesTags,
-<a class="jxr_linenumber" name="178" href="#178">178</a>     <strong class="jxr_keyword">boolean</strong> shouldDropBehind
-<a class="jxr_linenumber" name="179" href="#179">179</a>   ) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="180" href="#180">180</a> 
-<a class="jxr_linenumber" name="181" href="#181">181</a> 
+<a class="jxr_linenumber" name="124" href="#124">124</a>    List&lt;KeyValueScanner&gt; getScanners(List&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks, <strong class="jxr_keyword">boolean</strong> isGet,
+<a class="jxr_linenumber" name="125" href="#125">125</a>           <strong class="jxr_keyword">boolean</strong> usePread, <strong class="jxr_keyword">boolean</strong> isCompaction, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher, byte[] startRow,
+<a class="jxr_linenumber" name="126" href="#126">126</a>           byte[] stopRow, <strong class="jxr_keyword">long</strong> readPt, <strong class="jxr_keyword">boolean</strong> includeMemstoreScanner) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="127" href="#127">127</a>   
+<a class="jxr_linenumber" name="128" href="#128">128</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html">ScanInfo</a> getScanInfo();
+<a class="jxr_linenumber" name="129" href="#129">129</a> 
+<a class="jxr_linenumber" name="130" href="#130">130</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="131" href="#131">131</a> <em class="jxr_javadoccomment">   * Adds or replaces the specified KeyValues.</em>
+<a class="jxr_linenumber" name="132" href="#132">132</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="133" href="#133">133</a> <em class="jxr_javadoccomment">   * For each KeyValue specified, if a cell with the same row, family, and qualifier exists in</em>
+<a class="jxr_linenumber" name="134" href="#134">134</a> <em class="jxr_javadoccomment">   * MemStore, it will be replaced. Otherwise, it will just be inserted to MemStore.</em>
+<a class="jxr_linenumber" name="135" href="#135">135</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="136" href="#136">136</a> <em class="jxr_javadoccomment">   * This operation is atomic on each KeyValue (row/family/qualifier) but not necessarily atomic</em>
+<a class="jxr_linenumber" name="137" href="#137">137</a> <em class="jxr_javadoccomment">   * across all of them.</em>
+<a class="jxr_linenumber" name="138" href="#138">138</a> <em class="jxr_javadoccomment">   * @param cells</em>
+<a class="jxr_linenumber" name="139" href="#139">139</a> <em class="jxr_javadoccomment">   * @param readpoint readpoint below which we can safely remove duplicate KVs</em>
+<a class="jxr_linenumber" name="140" href="#140">140</a> <em class="jxr_javadoccomment">   * @return memstore size delta</em>
+<a class="jxr_linenumber" name="141" href="#141">141</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<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>   <strong class="jxr_keyword">long</strong> upsert(Iterable&lt;Cell&gt; cells, <strong class="jxr_keyword">long</strong> readpoint) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="144" href="#144">144</a> 
+<a class="jxr_linenumber" name="145" href="#145">145</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="146" href="#146">146</a> <em class="jxr_javadoccomment">   * Adds a value to the memstore</em>
+<a class="jxr_linenumber" name="147" href="#147">147</a> <em class="jxr_javadoccomment">   * @param cell</em>
+<a class="jxr_linenumber" name="148" href="#148">148</a> <em class="jxr_javadoccomment">   * @return memstore size delta</em>
+<a class="jxr_linenumber" name="149" href="#149">149</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="150" href="#150">150</a>   <strong class="jxr_keyword">long</strong> add(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> cell);
+<a class="jxr_linenumber" name="151" href="#151">151</a> 
+<a class="jxr_linenumber" name="152" href="#152">152</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="153" href="#153">153</a> <em class="jxr_javadoccomment">   * When was the last edit done in the memstore</em>
+<a class="jxr_linenumber" name="154" href="#154">154</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="155" href="#155">155</a>   <strong class="jxr_keyword">long</strong> timeOfOldestEdit();
+<a class="jxr_linenumber" name="156" href="#156">156</a> 
+<a class="jxr_linenumber" name="157" href="#157">157</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="158" href="#158">158</a> <em class="jxr_javadoccomment">   * Removes a Cell from the memstore. The Cell is removed only if its key</em>
+<a class="jxr_linenumber" name="159" href="#159">159</a> <em class="jxr_javadoccomment">   * &amp;amp; memstoreTS match the key &amp;amp; memstoreTS value of the cell</em>
+<a class="jxr_linenumber" name="160" href="#160">160</a> <em class="jxr_javadoccomment">   * parameter.</em>
+<a class="jxr_linenumber" name="161" href="#161">161</a> <em class="jxr_javadoccomment">   * @param cell</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>   <strong class="jxr_keyword">void</strong> rollback(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> cell);
+<a class="jxr_linenumber" name="164" href="#164">164</a> 
+<a class="jxr_linenumber" name="165" href="#165">165</a>   FileSystem getFileSystem();
+<a class="jxr_linenumber" name="166" href="#166">166</a> 
+<a class="jxr_linenumber" name="167" href="#167">167</a> 
+<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> <em class="jxr_javadoccomment">   * @param maxKeyCount</em>
+<a class="jxr_linenumber" name="170" href="#170">170</a> <em class="jxr_javadoccomment">   * @param compression Compression algorithm to use</em>
+<a class="jxr_linenumber" name="171" href="#171">171</a> <em class="jxr_javadoccomment">   * @param isCompaction whether we are creating a new file in a compaction</em>
+<a class="jxr_linenumber" name="172" href="#172">172</a> <em class="jxr_javadoccomment">   * @param includeMVCCReadpoint whether we should out the MVCC readpoint</em>
+<a class="jxr_linenumber" name="173" href="#173">173</a> <em class="jxr_javadoccomment">   * @return Writer for a new StoreFile in the tmp dir.</em>
+<a class="jxr_linenumber" name="174" href="#174">174</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="175" href="#175">175</a>   StoreFile.Writer createWriterInTmp(
+<a class="jxr_linenumber" name="176" href="#176">176</a>       <strong class="jxr_keyword">long</strong> maxKeyCount,
+<a class="jxr_linenumber" name="177" href="#177">177</a>       Compression.Algorithm compression,
+<a class="jxr_linenumber" name="178" href="#178">178</a>       <strong class="jxr_keyword">boolean</strong> isCompaction,
+<a class="jxr_linenumber" name="179" href="#179">179</a>       <strong class="jxr_keyword">boolean</strong> includeMVCCReadpoint,
+<a class="jxr_linenumber" name="180" href="#180">180</a>       <strong class="jxr_keyword">boolean</strong> includesTags
+<a class="jxr_linenumber" name="181" href="#181">181</a>   ) <strong class="jxr_keyword">throws</strong> IOException;
 <a class="jxr_linenumber" name="182" href="#182">182</a> 
-<a class="jxr_linenumber" name="183" href="#183">183</a> 
-<a class="jxr_linenumber" name="184" href="#184">184</a>   <em class="jxr_comment">// Compaction oriented methods</em>
-<a class="jxr_linenumber" name="185" href="#185">185</a> 
-<a class="jxr_linenumber" name="186" href="#186">186</a>   <strong class="jxr_keyword">boolean</strong> throttleCompaction(<strong class="jxr_keyword">long</strong> compactionSize);
-<a class="jxr_linenumber" name="187" href="#187">187</a> 
-<a class="jxr_linenumber" name="188" href="#188">188</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="189" href="#189">189</a> <em class="jxr_javadoccomment">   * getter for CompactionProgress object</em>
-<a class="jxr_linenumber" name="190" href="#190">190</a> <em class="jxr_javadoccomment">   * @return CompactionProgress object; can be null</em>
-<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>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html">CompactionProgress</a> getCompactionProgress();
-<a class="jxr_linenumber" name="193" href="#193">193</a> 
-<a class="jxr_linenumber" name="194" href="#194">194</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> requestCompaction() <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="195" href="#195">195</a> 
-<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> <em class="jxr_javadoccomment">   * @deprecated see requestCompaction(int, CompactionRequest, User)</em>
-<a class="jxr_linenumber" name="198" href="#198">198</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="199" href="#199">199</a>   @Deprecated
-<a class="jxr_linenumber" name="200" href="#200">200</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> requestCompaction(<strong class="jxr_keyword">int</strong> priority, <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> baseRequest)
-<a class="jxr_linenumber" name="201" href="#201">201</a>       <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="183" href="#183">183</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="184" href="#184">184</a> <em class="jxr_javadoccomment">   * @param maxKeyCount</em>
+<a class="jxr_linenumber" name="185" href="#185">185</a> <em class="jxr_javadoccomment">   * @param compression Compression algorithm to use</em>
+<a class="jxr_linenumber" name="186" href="#186">186</a> <em class="jxr_javadoccomment">   * @param isCompaction whether we are creating a new file in a compaction</em>
+<a class="jxr_linenumber" name="187" href="#187">187</a> <em class="jxr_javadoccomment">   * @param includeMVCCReadpoint whether we should out the MVCC readpoint</em>
+<a class="jxr_linenumber" name="188" href="#188">188</a> <em class="jxr_javadoccomment">   * @param shouldDropBehind should the writer drop caches behind writes</em>
+<a class="jxr_linenumber" name="189" href="#189">189</a> <em class="jxr_javadoccomment">   * @return Writer for a new StoreFile in the tmp dir.</em>
+<a class="jxr_linenumber" name="190" href="#190">190</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="191" href="#191">191</a>   StoreFile.Writer createWriterInTmp(
+<a class="jxr_linenumber" name="192" href="#192">192</a>     <strong class="jxr_keyword">long</strong> maxKeyCount,
+<a class="jxr_linenumber" name="193" href="#193">193</a>     Compression.Algorithm compression,
+<a class="jxr_linenumber" name="194" href="#194">194</a>     <strong class="jxr_keyword">boolean</strong> isCompaction,
+<a class="jxr_linenumber" name="195" href="#195">195</a>     <strong class="jxr_keyword">boolean</strong> includeMVCCReadpoint,
+<a class="jxr_linenumber" name="196" href="#196">196</a>     <strong class="jxr_keyword">boolean</strong> includesTags,
+<a class="jxr_linenumber" name="197" href="#197">197</a>     <strong class="jxr_keyword">boolean</strong> shouldDropBehind
+<a class="jxr_linenumber" name="198" href="#198">198</a>   ) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="199" href="#199">199</a> 
+<a class="jxr_linenumber" name="200" href="#200">200</a> 
+<a class="jxr_linenumber" name="201" href="#201">201</a> 
 <a class="jxr_linenumber" name="202" href="#202">202</a> 
-<a class="jxr_linenumber" name="203" href="#203">203</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> requestCompaction(<strong class="jxr_keyword">int</strong> priority, <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> baseRequest, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user)
-<a class="jxr_linenumber" name="204" href="#204">204</a>       <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="205" href="#205">205</a> 
-<a class="jxr_linenumber" name="206" href="#206">206</a>   <strong class="jxr_keyword">void</strong> cancelRequestedCompaction(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction);
-<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">   * @deprecated see compact(CompactionContext, CompactionThroughputController, User)</em>
+<a class="jxr_linenumber" name="203" href="#203">203</a>   <em class="jxr_comment">// Compaction oriented methods</em>
+<a class="jxr_linenumber" name="204" href="#204">204</a> 
+<a class="jxr_linenumber" name="205" href="#205">205</a>   <strong class="jxr_keyword">boolean</strong> throttleCompaction(<strong class="jxr_keyword">long</strong> compactionSize);
+<a class="jxr_linenumber" name="206" href="#206">206</a> 
+<a class="jxr_linenumber" name="207" href="#207">207</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="208" href="#208">208</a> <em class="jxr_javadoccomment">   * getter for CompactionProgress object</em>
+<a class="jxr_linenumber" name="209" href="#209">209</a> <em class="jxr_javadoccomment">   * @return CompactionProgress object; can be null</em>
 <a class="jxr_linenumber" name="210" href="#210">210</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="211" href="#211">211</a>   @Deprecated
-<a class="jxr_linenumber" name="212" href="#212">212</a>   List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
-<a class="jxr_linenumber" name="213" href="#213">213</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="211" href="#211">211</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html">CompactionProgress</a> getCompactionProgress();
+<a class="jxr_linenumber" name="212" href="#212">212</a> 
+<a class="jxr_linenumber" name="213" href="#213">213</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> requestCompaction() <strong class="jxr_keyword">throws</strong> IOException;
 <a class="jxr_linenumber" name="214" href="#214">214</a> 
-<a class="jxr_linenumber" name="215" href="#215">215</a>   List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
-<a class="jxr_linenumber" name="216" href="#216">216</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="217" href="#217">217</a> 
-<a class="jxr_linenumber" name="218" href="#218">218</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="219" href="#219">219</a> <em class="jxr_javadoccomment">   * @return true if we should run a major compaction.</em>
-<a class="jxr_linenumber" name="220" href="#220">220</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="221" href="#221">221</a>   <strong class="jxr_keyword">boolean</strong> isMajorCompaction() <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="222" href="#222">222</a> 
-<a class="jxr_linenumber" name="223" href="#223">223</a>   <strong class="jxr_keyword">void</strong> triggerMajorCompaction();
+<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">   * @deprecated see requestCompaction(int, CompactionRequest, User)</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>   @Deprecated
+<a class="jxr_linenumber" name="219" href="#219">219</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> requestCompaction(<strong class="jxr_keyword">int</strong> priority, <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> baseRequest)
+<a class="jxr_linenumber" name="220" href="#220">220</a>       <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="221" href="#221">221</a> 
+<a class="jxr_linenumber" name="222" href="#222">222</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> requestCompaction(<strong class="jxr_keyword">int</strong> priority, <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> baseRequest, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user)
+<a class="jxr_linenumber" name="223" href="#223">223</a>       <strong class="jxr_keyword">throws</strong> IOException;
 <a class="jxr_linenumber" name="224" href="#224">224</a> 
-<a class="jxr_linenumber" name="225" href="#225">225</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="226" href="#226">226</a> <em class="jxr_javadoccomment">   * See if there's too much store files in this store</em>
-<a class="jxr_linenumber" name="227" href="#227">227</a> <em class="jxr_javadoccomment">   * @return true if number of store files is greater than the number defined in minFilesToCompact</em>
-<a class="jxr_linenumber" name="228" href="#228">228</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="229" href="#229">229</a>   <strong class="jxr_keyword">boolean</strong> needsCompaction();
-<a class="jxr_linenumber" name="230" href="#230">230</a> 
-<a class="jxr_linenumber" name="231" href="#231">231</a>   <strong class="jxr_keyword">int</strong> getCompactPriority();
-<a class="jxr_linenumber" name="232" href="#232">232</a> 
-<a class="jxr_linenumber" name="233" href="#233">233</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html">StoreFlushContext</a> createFlushContext(<strong class="jxr_keyword">long</strong> cacheFlushId);
-<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">   * Call to complete a compaction. Its for the case where we find in the WAL a compaction</em>
-<a class="jxr_linenumber" name="237" href="#237">237</a> <em class="jxr_javadoccomment">   * that was not finished.  We could find one recovering a WAL after a regionserver crash.</em>
-<a class="jxr_linenumber" name="238" href="#238">238</a> <em class="jxr_javadoccomment">   * See HBASE-2331.</em>
-<a class="jxr_linenumber" name="239" href="#239">239</a> <em class="jxr_javadoccomment">   * @param compaction the descriptor for compaction</em>
-<a class="jxr_linenumber" name="240" href="#240">240</a> <em class="jxr_javadoccomment">   * @param pickCompactionFiles whether or not pick up the new compaction output files and</em>
-<a class="jxr_linenumber" name="241" href="#241">241</a> <em class="jxr_javadoccomment">   * add it to the store</em>
-<a class="jxr_linenumber" name="242" href="#242">242</a> <em class="jxr_javadoccomment">   * @param removeFiles whether to remove/archive files from filesystem</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> replayCompactionMarker(CompactionDescriptor compaction, <strong class="jxr_keyword">boolean</strong> pickCompactionFiles,
-<a class="jxr_linenumber" name="245" href="#245">245</a>       <strong class="jxr_keyword">boolean</strong> removeFiles)
-<a class="jxr_linenumber" name="246" href="#246">246</a>       <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="247" href="#247">247</a> 
-<a class="jxr_linenumber" name="248" href="#248">248</a>   <em class="jxr_comment">// Split oriented methods</em>
+<a class="jxr_linenumber" name="225" href="#225">225</a>   <strong class="jxr_keyword">void</strong> cancelRequestedCompaction(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction);
+<a class="jxr_linenumber" name="226" href="#226">226</a> 
+<a class="jxr_linenumber" name="227" href="#227">227</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="228" href="#228">228</a> <em class="jxr_javadoccomment">   * @deprecated see compact(CompactionContext, CompactionThroughputController, User)</em>
+<a class="jxr_linenumber" name="229" href="#229">229</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="230" href="#230">230</a>   @Deprecated
+<a class="jxr_linenumber" name="231" href="#231">231</a>   List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
+<a class="jxr_linenumber" name="232" href="#232">232</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="233" href="#233">233</a> 
+<a class="jxr_linenumber" name="234" href="#234">234</a>   List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
+<a class="jxr_linenumber" name="235" href="#235">235</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="236" href="#236">236</a> 
+<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">   * @return true if we should run a major compaction.</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>   <strong class="jxr_keyword">boolean</strong> isMajorCompaction() <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="241" href="#241">241</a> 
+<a class="jxr_linenumber" name="242" href="#242">242</a>   <strong class="jxr_keyword">void</strong> triggerMajorCompaction();
+<a class="jxr_linenumber" name="243" href="#243">243</a> 
+<a class="jxr_linenumber" name="244" href="#244">244</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="245" href="#245">245</a> <em class="jxr_javadoccomment">   * See if there's too much store files in this store</em>
+<a class="jxr_linenumber" name="246" href="#246">246</a> <em class="jxr_javadoccomment">   * @return true if number of store files is greater than the number defined in minFilesToCompact</em>
+<a class="jxr_linenumber" name="247" href="#247">247</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="248" href="#248">248</a>   <strong class="jxr_keyword">boolean</strong> needsCompaction();
 <a class="jxr_linenumber" name="249" href="#249">249</a> 
-<a class="jxr_linenumber" name="250" href="#250">250</a>   <strong class="jxr_keyword">boolean</strong> canSplit();
+<a class="jxr_linenumber" name="250" href="#250">250</a>   <strong class="jxr_keyword">int</strong> getCompactPriority();
 <a class="jxr_linenumber" name="251" href="#251">251</a> 
-<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">   * Determines if Store should be split</em>
-<a class="jxr_linenumber" name="254" href="#254">254</a> <em class="jxr_javadoccomment">   * @return byte[] if store should be split, null otherwise.</em>
-<a class="jxr_linenumber" name="255" href="#255">255</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="256" href="#256">256</a>   byte[] getSplitPoint();
-<a class="jxr_linenumber" name="257" href="#257">257</a> 
-<a class="jxr_linenumber" name="258" href="#258">258</a>   <em class="jxr_comment">// Bulk Load methods</em>
-<a class="jxr_linenumber" name="259" href="#259">259</a> 
-<a class="jxr_linenumber" name="260" href="#260">260</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="261" href="#261">261</a> <em class="jxr_javadoccomment">   * This throws a WrongRegionException if the HFile does not fit in this region, or an</em>
-<a class="jxr_linenumber" name="262" href="#262">262</a> <em class="jxr_javadoccomment">   * InvalidHFileException if the HFile is not valid.</em>
-<a class="jxr_linenumber" name="263" href="#263">263</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="264" href="#264">264</a>   <strong class="jxr_keyword">void</strong> assertBulkLoadHFileOk(Path srcPath) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="265" href="#265">265</a> 
-<a class="jxr_linenumber" name="266" href="#266">266</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="267" href="#267">267</a> <em class="jxr_javadoccomment">   * This method should only be called from Region. It is assumed that the ranges of values in the</em>
-<a class="jxr_linenumber" name="268" href="#268">268</a> <em class="jxr_javadoccomment">   * HFile fit within the stores assigned region. (assertBulkLoadHFileOk checks this)</em>
-<a class="jxr_linenumber" name="269" href="#269">269</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="270" href="#270">270</a> <em class="jxr_javadoccomment">   * @param srcPathStr</em>
-<a class="jxr_linenumber" name="271" href="#271">271</a> <em class="jxr_javadoccomment">   * @param sequenceId sequence Id associated with the HFile</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>   Path bulkLoadHFile(String srcPathStr, <strong class="jxr_keyword">long</strong> sequenceId) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="274" href="#274">274</a> 
-<a class="jxr_linenumber" name="275" href="#275">275</a>   <em class="jxr_comment">// General accessors into the state of the store</em>
-<a class="jxr_linenumber" name="276" href="#276">276</a>   <em class="jxr_comment">// TODO abstract some of this out into a metrics class</em>
-<a class="jxr_linenumber" name="277" href="#277">277</a> 
-<a class="jxr_linenumber" name="278" href="#278">278</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="279" href="#279">279</a> <em class="jxr_javadoccomment">   * @return &lt;tt&gt;true&lt;/tt&gt; if the store has any underlying reference files to older HFiles</em>
-<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>   <strong class="jxr_keyword">boolean</strong> hasReferences();
-<a class="jxr_linenumber" name="282" href="#282">282</a> 
-<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> <em class="jxr_javadoccomment">   * @return The size of this store's memstore, in bytes</em>
-<a class="jxr_linenumber" name="285" href="#285">285</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="286" href="#286">286</a>   <strong class="jxr_keyword">long</strong> getMemStoreSize();
-<a class="jxr_linenumber" name="287" href="#287">287</a> 
-<a class="jxr_linenumber" name="288" href="#288">288</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="289" href="#289">289</a> <em class="jxr_javadoccomment">   * @return The amount of memory we could flush from this memstore; usually this is equal to</em>
-<a class="jxr_linenumber" name="290" href="#290">290</a> <em class="jxr_javadoccomment">   * {@link #getMemStoreSize()} unless we are carrying snapshots and then it will be the size of</em>
-<a class="jxr_linenumber" name="291" href="#291">291</a> <em class="jxr_javadoccomment">   * outstanding snapshots.</em>
-<a class="jxr_linenumber" name="292" href="#292">292</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="293" href="#293">293</a>   <strong class="jxr_keyword">long</strong> getFlushableSize();
-<a class="jxr_linenumber" name="294" href="#294">294</a> 
-<a class="jxr_linenumber" name="295" href="#295">295</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="296" href="#296">296</a> <em class="jxr_javadoccomment">   * Returns the memstore snapshot size</em>
-<a class="jxr_linenumber" name="297" href="#297">297</a> <em class="jxr_javadoccomment">   * @return size of the memstore snapshot</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">long</strong> getSnapshotSize();
-<a class="jxr_linenumber" name="300" href="#300">300</a> 
-<a class="jxr_linenumber" name="301" href="#301">301</a>   <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> getFamily();
-<a class="jxr_linenumber" name="302" href="#302">302</a> 
-<a class="jxr_linenumber" name="303" href="#303">303</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="304" href="#304">304</a> <em class="jxr_javadoccomment">   * @return The maximum sequence id in all store files.</em>
-<a class="jxr_linenumber" name="305" href="#305">305</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="306" href="#306">306</a>   <strong class="jxr_keyword">long</strong> getMaxSequenceId();
-<a class="jxr_linenumber" name="307" href="#307">307</a> 
-<a class="jxr_linenumber" name="308" href="#308">308</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="309" href="#309">309</a> <em class="jxr_javadoccomment">   * @return The maximum memstoreTS in all store files.</em>
-<a class="jxr_linenumber" name="310" href="#310">310</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="311" href="#311">311</a>   <strong class="jxr_keyword">long</strong> getMaxMemstoreTS();
-<a class="jxr_linenumber" name="312" href="#312">312</a> 
-<a class="jxr_linenumber" name="313" href="#313">313</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="314" href="#314">314</a> <em class="jxr_javadoccomment">   * @return the data block encoder</em>
-<a class="jxr_linenumber" name="315" href="#315">315</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="316" href="#316">316</a>   <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html">HFileDataBlockEncoder</a> getDataBlockEncoder();
-<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><em class="jxr_javadoccomment"> @return aggregate size of all HStores used in the last compaction */</em>
-<a class="jxr_linenumber" name="319" href="#319">319</a>   <strong class="jxr_keyword">long</strong> getLastCompactSize();
-<a class="jxr_linenumber" name="320" href="#320">320</a> 
-<a class="jxr_linenumber" name="321" href="#321">321</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> @return aggregate size of <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html">HStore</a> */</em>
-<a class="jxr_linenumber" name="322" href="#322">322</a>   <strong class="jxr_keyword">long</strong> getSize();
-<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">   * @return Count of store files</em>
-<a class="jxr_linenumber" name="326" href="#326">326</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="327" href="#327">327</a>   <strong class="jxr_keyword">int</strong> getStorefilesCount();
-<a class="jxr_linenumber" name="328" href="#328">328</a> 
-<a class="jxr_linenumber" name="329" href="#329">329</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="330" href="#330">330</a> <em class="jxr_javadoccomment">   * @return The size of the store files, in bytes, uncompressed.</em>
-<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>   <strong class="jxr_keyword">long</strong> getStoreSizeUncompressed();
-<a class="jxr_linenumber" name="333" href="#333">333</a> 
-<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> <em class="jxr_javadoccomment">   * @return The size of the store files, in bytes.</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">long</strong> getStorefilesSize();
-<a class="jxr_linenumber" name="338" href="#338">338</a> 
-<a class="jxr_linenumber" name="339" href="#339">339</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="340" href="#340">340</a> <em class="jxr_javadoccomment">   * @return The size of the store file indexes, in bytes.</em>
-<a class="jxr_linenumber" name="341" href="#341">341</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="342" href="#342">342</a>   <strong class="jxr_keyword">long</strong> getStorefilesIndexSize();
-<a class="jxr_linenumber" name="343" href="#343">343</a> 
-<a class="jxr_linenumber" name="344" href="#344">344</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="345" href="#345">345</a> <em class="jxr_javadoccomment">   * Returns the total size of all index blocks in the data block indexes, including the root level,</em>
-<a class="jxr_linenumber" name="346" href="#346">346</a> <em class="jxr_javadoccomment">   * intermediate levels, and the leaf level for multi-level indexes, or just the root level for</em>
-<a class="jxr_linenumber" name="347" href="#347">347</a> <em class="jxr_javadoccomment">   * single-level indexes.</em>
-<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">   * @return the total size of block indexes in the store</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">long</strong> getTotalStaticIndexSize();
-<a class="jxr_linenumber" name="351" href="#351">351</a> 
-<a class="jxr_linenumber" name="352" href="#352">352</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="353" href="#353">353</a> <em class="jxr_javadoccomment">   * Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the</em>
-<a class="jxr_linenumber" name="354" href="#354">354</a> <em class="jxr_javadoccomment">   * Bloom blocks currently not loaded into the block cache are counted.</em>
-<a class="jxr_linenumber" name="355" href="#355">355</a> <em class="jxr_javadoccomment">   * @return the total size of all Bloom filters in the store</em>
-<a class="jxr_linenumber" name="356" href="#356">356</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="357" href="#357">357</a>   <strong class="jxr_keyword">long</strong> getTotalStaticBloomSize();
-<a class="jxr_linenumber" name="358" href="#358">358</a> 
-<a class="jxr_linenumber" name="359" href="#359">359</a>   <em class="jxr_comment">// Test-helper methods</em>
-<a class="jxr_linenumber" name="360" href="#360">360</a> 
-<a class="jxr_linenumber" name="361" href="#361">361</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="362" href="#362">362</a> <em class="jxr_javadoccomment">   * Used for tests.</em>
-<a class="jxr_linenumber" name="363" href="#363">363</a> <em class="jxr_javadoccomment">   * @return cache configuration for this Store.</em>
-<a class="jxr_linenumber" name="364" href="#364">364</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="365" href="#365">365</a>   <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html">CacheConfig</a> getCacheConfig();
-<a class="jxr_linenumber" name="366" href="#366">366</a> 
-<a class="jxr_linenumber" name="367" href="#367">367</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="368" href="#368">368</a> <em class="jxr_javadoccomment">   * @return the parent region info hosting this store</em>
-<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>   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> getRegionInfo();
-<a class="jxr_linenumber" name="371" href="#371">371</a> 
-<a class="jxr_linenumber" name="372" href="#372">372</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html">RegionCoprocessorHost</a> getCoprocessorHost();
-<a class="jxr_linenumber" name="373" href="#373">373</a> 
-<a class="jxr_linenumber" name="374" href="#374">374</a>   <strong class="jxr_keyword">boolean</strong> areWritesEnabled();
-<a class="jxr_linenumber" name="375" href="#375">375</a> 
-<a class="jxr_linenumber" name="376" href="#376">376</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="377" href="#377">377</a> <em class="jxr_javadoccomment">   * @return The smallest mvcc readPoint across all the scanners in this</em>
-<a class="jxr_linenumber" name="378" href="#378">378</a> <em class="jxr_javadoccomment">   * region. Writes older than this readPoint, are included  in every</em>
-<a class="jxr_linenumber" name="379" href="#379">379</a> <em class="jxr_javadoccomment">   * read operation.</em>
-<a class="jxr_linenumber" name="380" href="#380">380</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="381" href="#381">381</a>   <strong class="jxr_keyword">long</strong> getSmallestReadPoint();
-<a class="jxr_linenumber" name="382" href="#382">382</a> 
-<a class="jxr_linenumber" name="383" href="#383">383</a>   String getColumnFamilyName();
-<a class="jxr_linenumber" name="384" href="#384">384</a> 
-<a class="jxr_linenumber" name="385" href="#385">385</a>   <a href="../../../../../org/apache/hadoop/hbase/TableName.html">TableName</a> getTableName();
-<a class="jxr_linenumber" name="386" href="#386">386</a> 
-<a class="jxr_linenumber" name="387" href="#387">387</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="388" href="#388">388</a> <em class="jxr_javadoccomment">   * @return The number of cells flushed to disk</em>
-<a class="jxr_linenumber" name="389" href="#389">389</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="390" href="#390">390</a>   <strong class="jxr_keyword">long</strong> getFlushedCellsCount();
-<a class="jxr_linenumber" name="391" href="#391">391</a> 
-<a class="jxr_linenumber" name="392" href="#392">392</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="393" href="#393">393</a> <em class="jxr_javadoccomment">   * @return The total size of data flushed to disk, in bytes</em>
-<a class="jxr_linenumber" name="394" href="#394">394</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="395" href="#395">395</a>   <strong class="jxr_keyword">long</strong> getFlushedCellsSize();
-<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">   * @return The number of cells processed during minor compactions</em>
+<a class="jxr_linenumber" name="252" href="#252">252</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html">StoreFlushContext</a> createFlushContext(<strong class="jxr_keyword">long</strong> cacheFlushId);
+<a class="jxr_linenumber" name="253" href="#253">253</a> 
+<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> <em class="jxr_javadoccomment">   * Call to complete a compaction. Its for the case where we find in the WAL a compaction</em>
+<a class="jxr_linenumber" name="256" href="#256">256</a> <em class="jxr_javadoccomment">   * that was not finished.  We could find one recovering a WAL after a regionserver crash.</em>
+<a class="jxr_linenumber" name="257" href="#257">257</a> <em class="jxr_javadoccomment">   * See HBASE-2331.</em>
+<a class="jxr_linenumber" name="258" href="#258">258</a> <em class="jxr_javadoccomment">   * @param compaction the descriptor for compaction</em>
+<a class="jxr_linenumber" name="259" href="#259">259</a> <em class="jxr_javadoccomment">   * @param pickCompactionFiles whether or not pick up the new compaction output files and</em>
+<a class="jxr_linenumber" name="260" href="#260">260</a> <em class="jxr_javadoccomment">   * add it to the store</em>
+<a class="jxr_linenumber" name="261" href="#261">261</a> <em class="jxr_javadoccomment">   * @param removeFiles whether to remove/archive files from filesystem</em>
+<a class="jxr_linenumber" name="262" href="#262">262</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="263" href="#263">263</a>   <strong class="jxr_keyword">void</strong> replayCompactionMarker(CompactionDescriptor compaction, <strong class="jxr_keyword">boolean</strong> pickCompactionFiles,
+<a class="jxr_linenumber" name="264" href="#264">264</a>       <strong class="jxr_keyword">boolean</strong> removeFiles)
+<a class="jxr_linenumber" name="265" href="#265">265</a>       <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="266" href="#266">266</a> 
+<a class="jxr_linenumber" name="267" href="#267">267</a>   <em class="jxr_comment">// Split oriented methods</em>
+<a class="jxr_linenumber" name="268" href="#268">268</a> 
+<a class="jxr_linenumber" name="269" href="#269">269</a>   <strong class="jxr_keyword">boolean</strong> canSplit();
+<a class="jxr_linenumber" name="270" href="#270">270</a> 
+<a class="jxr_linenumber" name="271" href="#271">271</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="272" href="#272">272</a> <em class="jxr_javadoccomment">   * Determines if Store should be split</em>
+<a class="jxr_linenumber" name="273" href="#273">273</a> <em class="jxr_javadoccomment">   * @return byte[] if store should be split, null otherwise.</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>   byte[] getSplitPoint();
+<a class="jxr_linenumber" name="276" href="#276">276</a> 
+<a class="jxr_linenumber" name="277" href="#277">277</a>   <em class="jxr_comment">// Bulk Load methods</em>
+<a class="jxr_linenumber" name="278" href="#278">278</a> 
+<a class="jxr_linenumber" name="279" href="#279">279</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="280" href="#280">280</a> <em class="jxr_javadoccomment">   * This throws a WrongRegionException if the HFile does not fit in this region, or an</em>
+<a class="jxr_linenumber" name="281" href="#281">281</a> <em class="jxr_javadoccomment">   * InvalidHFileException if the HFile is not valid.</em>
+<a class="jxr_linenumber" name="282" href="#282">282</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="283" href="#283">283</a>   <strong class="jxr_keyword">void</strong> assertBulkLoadHFileOk(Path srcPath) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="284" href="#284">284</a> 
+<a class="jxr_linenumber" name="285" href="#285">285</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="286" href="#286">286</a> <em class="jxr_javadoccomment">   * This method should only be called from Region. It is assumed that the ranges of values in the</em>
+<a class="jxr_linenumber" name="287" href="#287">287</a> <em class="jxr_javadoccomment">   * HFile fit within the stores assigned region. (assertBulkLoadHFileOk checks this)</em>
+<a class="jxr_linenumber" name="288" href="#288">288</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="289" href="#289">289</a> <em class="jxr_javadoccomment">   * @param srcPathStr</em>
+<a class="jxr_linenumber" name="290" href="#290">290</a> <em class="jxr_javadoccomment">   * @param sequenceId sequence Id associated with the HFile</em>
+<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>   Path bulkLoadHFile(String srcPathStr, <strong class="jxr_keyword">long</strong> sequenceId) <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="293" href="#293">293</a> 
+<a class="jxr_linenumber" name="294" href="#294">294</a>   <em class="jxr_comment">// General accessors into the state of the store</em>
+<a class="jxr_linenumber" name="295" href="#295">295</a>   <em class="jxr_comment">// TODO abstract some of this out into a metrics class</em>
+<a class="jxr_linenumber" name="296" href="#296">296</a> 
+<a class="jxr_linenumber" name="297" href="#297">297</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="298" href="#298">298</a> <em class="jxr_javadoccomment">   * @return &lt;tt&gt;true&lt;/tt&gt; if the store has any underlying reference files to older HFiles</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">boolean</strong> hasReferences();
+<a class="jxr_linenumber" name="301" href="#301">301</a> 
+<a class="jxr_linenumber" name="302" href="#302">302</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="303" href="#303">303</a> <em class="jxr_javadoccomment">   * @return The size of this store's memstore, in bytes</em>
+<a class="jxr_linenumber" name="304" href="#304">304</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="305" href="#305">305</a>   <strong class="jxr_keyword">long</strong> getMemStoreSize();
+<a class="jxr_linenumber" name="306" href="#306">306</a> 
+<a class="jxr_linenumber" name="307" href="#307">307</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="308" href="#308">308</a> <em class="jxr_javadoccomment">   * @return The amount of memory we could flush from this memstore; usually this is equal to</em>
+<a class="jxr_linenumber" name="309" href="#309">309</a> <em class="jxr_javadoccomment">   * {@link #getMemStoreSize()} unless we are carrying snapshots and then it will be the size of</em>
+<a class="jxr_linenumber" name="310" href="#310">310</a> <em class="jxr_javadoccomment">   * outstanding snapshots.</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>   <strong class="jxr_keyword">long</strong> getFlushableSize();
+<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">   * Returns the memstore snapshot size</em>
+<a class="jxr_linenumber" name="316" href="#316">316</a> <em class="jxr_javadoccomment">   * @return size of the memstore snapshot</em>
+<a class="jxr_linenumber" name="317" href="#317">317</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="318" href="#318">318</a>   <strong class="jxr_keyword">long</strong> getSnapshotSize();
+<a class="jxr_linenumber" name="319" href="#319">319</a> 
+<a class="jxr_linenumber" name="320" href="#320">320</a>   <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> getFamily();
+<a class="jxr_linenumber" name="321" href="#321">321</a> 
+<a class="jxr_linenumber" name="322" href="#322">322</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="323" href="#323">323</a> <em class="jxr_javadoccomment">   * @return The maximum sequence id in all store files.</em>
+<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>   <strong class="jxr_keyword">long</strong> getMaxSequenceId();
+<a class="jxr_linenumber" name="326" href="#326">326</a> 
+<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> <em class="jxr_javadoccomment">   * @return The maximum memstoreTS in all store files.</em>
+<a class="jxr_linenumber" name="329" href="#329">329</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="330" href="#330">330</a>   <strong class="jxr_keyword">long</strong> getMaxMemstoreTS();
+<a class="jxr_linenumber" name="331" href="#331">331</a> 
+<a class="jxr_linenumber" name="332" href="#332">332</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="333" href="#333">333</a> <em class="jxr_javadoccomment">   * @return the data block encoder</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>   <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html">HFileDataBlockEncoder</a> getDataBlockEncoder();
+<a class="jxr_linenumber" name="336" href="#336">336</a> 
+<a class="jxr_linenumber" name="337" href="#337">337</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> @return aggregate size of all HStores used in the last compaction */</em>
+<a class="jxr_linenumber" name="338" href="#338">338</a>   <strong class="jxr_keyword">long</strong> getLastCompactSize();
+<a class="jxr_linenumber" name="339" href="#339">339</a> 
+<a class="jxr_linenumber" name="340" href="#340">340</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> @return aggregate size of <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html">HStore</a> */</em>
+<a class="jxr_linenumber" name="341" href="#341">341</a>   <strong class="jxr_keyword">long</strong> getSize();
+<a class="jxr_linenumber" name="342" href="#342">342</a> 
+<a class="jxr_linenumber" name="343" href="#343">343</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="344" href="#344">344</a> <em class="jxr_javadoccomment">   * @return Count of store files</em>
+<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>   <strong class="jxr_keyword">int</strong> getStorefilesCount();
+<a class="jxr_linenumber" name="347" href="#347">347</a> 
+<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> <em class="jxr_javadoccomment">   * @return The size of the store files, in bytes, uncompressed.</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">long</strong> getStoreSizeUncompressed();
+<a class="jxr_linenumber" name="352" href="#352">352</a> 
+<a class="jxr_linenumber" name="353" href="#353">353</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="354" href="#354">354</a> <em class="jxr_javadoccomment">   * @return The size of the store files, in bytes.</em>
+<a class="jxr_linenumber" name="355" href="#355">355</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="356" href="#356">356</a>   <strong class="jxr_keyword">long</strong> getStorefilesSize();
+<a class="jxr_linenumber" name="357" href="#357">357</a> 
+<a class="jxr_linenumber" name="358" href="#358">358</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="359" href="#359">359</a> <em class="jxr_javadoccomment">   * @return The size of the store file indexes, in bytes.</em>
+<a class="jxr_linenumber" name="360" href="#360">360</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="361" href="#361">361</a>   <strong class="jxr_keyword">long</strong> getStorefilesIndexSize();
+<a class="jxr_linenumber" name="362" href="#362">362</a> 
+<a class="jxr_linenumber" name="363" href="#363">363</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="364" href="#364">364</a> <em class="jxr_javadoccomment">   * Returns the total size of all index blocks in the data block indexes, including the root level,</em>
+<a class="jxr_linenumber" name="365" href="#365">365</a> <em class="jxr_javadoccomment">   * intermediate levels, and the leaf level for multi-level indexes, or just the root level for</em>
+<a class="jxr_linenumber" name="366" href="#366">366</a> <em class="jxr_javadoccomment">   * single-level indexes.</em>
+<a class="jxr_linenumber" name="367" href="#367">367</a> <em class="jxr_javadoccomment">   * @return the total size of block indexes in the store</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>   <strong class="jxr_keyword">long</strong> getTotalStaticIndexSize();
+<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">   * Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the</em>
+<a class="jxr_linenumber" name="373" href="#373">373</a> <em class="jxr_javadoccomment">   * Bloom blocks currently not loaded into the block cache are counted.</em>
+<a class="jxr_linenumber" name="374" href="#374">374</a> <em class="jxr_javadoccomment">   * @return the total size of all Bloom filters in the store</em>
+<a class="jxr_linenumber" name="375" href="#375">375</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="376" href="#376">376</a>   <strong class="jxr_keyword">long</strong> getTotalStaticBloomSize();
+<a class="jxr_linenumber" name="377" href="#377">377</a> 
+<a class="jxr_linenumber" name="378" href="#378">378</a>   <em class="jxr_comment">// Test-helper methods</em>
+<a class="jxr_linenumber" name="379" href="#379">379</a> 
+<a class="jxr_linenumber" name="380" href="#380">380</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="381" href="#381">381</a> <em class="jxr_javadoccomment">   * Used for tests.</em>
+<a class="jxr_linenumber" name="382" href="#382">382</a> <em class="jxr_javadoccomment">   * @return cache configuration for this Store.</em>
+<a class="jxr_linenumber" name="383" href="#383">383</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="384" href="#384">384</a>   <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html">CacheConfig</a> getCacheConfig();
+<a class="jxr_linenumber" name="385" href="#385">385</a> 
+<a class="jxr_linenumber" name="386" href="#386">386</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="387" href="#387">387</a> <em class="jxr_javadoccomment">   * @return the parent region info hosting this store</em>
+<a class="jxr_linenumber" name="388" href="#388">388</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="389" href="#389">389</a>   <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> getRegionInfo();
+<a class="jxr_linenumber" name="390" href="#390">390</a> 
+<a class="jxr_linenumber" name="391" href="#391">391</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html">RegionCoprocessorHost</a> getCoprocessorHost();
+<a class="jxr_linenumber" name="392" href="#392">392</a> 
+<a class="jxr_linenumber" name="393" href="#393">393</a>   <strong class="jxr_keyword">boolean</strong> areWritesEnabled();
+<a class="jxr_linenumber" name="394" href="#394">394</a> 
+<a class="jxr_linenumber" name="395" href="#395">395</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="396" href="#396">396</a> <em class="jxr_javadoccomment">   * @return The smallest mvcc readPoint across all the scanners in this</em>
+<a class="jxr_linenumber" name="397" href="#397">397</a> <em class="jxr_javadoccomment">   * region. Writes older than this readPoint, are included  in every</em>
+<a class="jxr_linenumber" name="398" href="#398">398</a> <em class="jxr_javadoccomment">   * read operation.</em>
 <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>   <strong class="jxr_keyword">long</strong> getCompactedCellsCount();
+<a class="jxr_linenumber" name="400" href="#400">400</a>   <strong class="jxr_keyword">long</strong> getSmallestReadPoint();
 <a class="jxr_linenumber" name="401" href="#401">401</a> 
-<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> <em class="jxr_javadoccomment">   * @return The total amount of data processed during minor compactions, in bytes</em>
-<a class="jxr_linenumber" name="404" href="#404">404</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="405" href="#405">405</a>   <strong class="jxr_keyword">long</strong> getCompactedCellsSize();
-<a class="jxr_linenumber" name="406" href="#406">406</a> 
-<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> <em class="jxr_javadoccomment">   * @return The number of cells processed during major compactions</em>
-<a class="jxr_linenumber" name="409" href="#409">409</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="410" href="#410">410</a>   <strong class="jxr_keyword">long</strong> getMajorCompactedCellsCount();
-<a class="jxr_linenumber" name="411" href="#411">411</a> 
-<a class="jxr_linenumber" name="412" href="#412">412</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="413" href="#413">413</a> <em class="jxr_javadoccomment">   * @return The total amount of data processed during major compactions, in bytes</em>
-<a class="jxr_linenumber" name="414" href="#414">414</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="415" href="#415">415</a>   <strong class="jxr_keyword">long</strong> getMajorCompactedCellsSize();
-<a class="jxr_linenumber" name="416" href="#416">416</a> 
-<a class="jxr_linenumber" name="417" href="#417">417</a>   <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="418" href="#418">418</a> <em class="jxr_comment">   * @param o Observer who wants to know about changes in set of Readers</em>
-<a class="jxr_linenumber" name="419" href="#419">419</a> <em class="jxr_comment">   */</em>
-<a class="jxr_linenumber" name="420" href="#420">420</a>   <strong class="jxr_keyword">void</strong> addChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o);
-<a class="jxr_linenumber" name="421" href="#421">421</a> 
-<a class="jxr_linenumber" name="422" href="#422">422</a>   <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="423" href="#423">423</a> <em class="jxr_comment">   * @param o Observer no longer interested in changes in set of Readers.</em>
-<a class="jxr_linenumber" name="424" href="#424">424</a> <em class="jxr_comment">   */</em>
-<a class="jxr_linenumber" name="425" href="#425">425</a>   <strong class="jxr_keyword">void</strong> deleteChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o);
-<a class="jxr_linenumber" name="426" href="#426">426</a> 
-<a class="jxr_linenumber" name="427" href="#427">427</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="428" href="#428">428</a> <em class="jxr_javadoccomment">   * @return Whether this store has too many store files.</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">boolean</strong> hasTooManyStoreFiles();
-<a class="jxr_linenumber" name="431" href="#431">431</a> 
-<a class="jxr_linenumber" name="432" href="#432">432</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="433" href="#433">433</a> <em class="jxr_javadoccomment">   * Checks the underlying store files, and opens the files that  have not</em>
-<a class="jxr_linenumber" name="434" href="#434">434</a> <em class="jxr_javadoccomment">   * been opened, and removes the store file readers for store files no longer</em>
-<a class="jxr_linenumber" name="435" href="#435">435</a> <em class="jxr_javadoccomment">   * available. Mainly used by secondary region replicas to keep up to date with</em>
-<a class="jxr_linenumber" name="436" href="#436">436</a> <em class="jxr_javadoccomment">   * the primary region files.</em>
-<a class="jxr_linenumber" name="437" href="#437">437</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="438" href="#438">438</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="439" href="#439">439</a>   <strong class="jxr_keyword">void</strong> refreshStoreFiles() <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="402" href="#402">402</a>   String getColumnFamilyName();
+<a class="jxr_linenumber" name="403" href="#403">403</a> 
+<a class="jxr_linenumber" name="404" href="#404">404</a>   <a href="../../../../../org/apache/hadoop/hbase/TableName.html">TableName</a> getTableName();
+<a class="jxr_linenumber" name="405" href="#405">405</a> 
+<a class="jxr_linenumber" name="406" href="#406">406</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="407" href="#407">407</a> <em class="jxr_javadoccomment">   * @return The number of cells flushed to disk</em>
+<a class="jxr_linenumber" name="408" href="#408">408</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="409" href="#409">409</a>   <strong class="jxr_keyword">long</strong> getFlushedCellsCount();
+<a class="jxr_linenumber" name="410" href="#410">410</a> 
+<a class="jxr_linenumber" name="411" href="#411">411</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="412" href="#412">412</a> <em class="jxr_javadoccomment">   * @return The total size of data flushed to disk, in bytes</em>
+<a class="jxr_linenumber" name="413" href="#413">413</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="414" href="#414">414</a>   <strong class="jxr_keyword">long</strong> getFlushedCellsSize();
+<a class="jxr_linenumber" name="415" href="#415">415</a> 
+<a class="jxr_linenumber" name="416" href="#416">416</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="417" href="#417">417</a> <em class="jxr_javadoccomment">   * @return The number of cells processed during minor compactions</em>
+<a class="jxr_linenumber" name="418" href="#418">418</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="419" href="#419">419</a>   <strong class="jxr_keyword">long</strong> getCompactedCellsCount();
+<a class="jxr_linenumber" name="420" href="#420">420</a> 
+<a class="jxr_linenumber" name="421" href="#421">421</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="422" href="#422">422</a> <em class="jxr_javadoccomment">   * @return The total amount of data processed during minor compactions, in bytes</em>
+<a class="jxr_linenumber" name="423" href="#423">423</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="424" href="#424">424</a>   <strong class="jxr_keyword">long</strong> getCompactedCellsSize();
+<a class="jxr_linenumber" name="425" href="#425">425</a> 
+<a class="jxr_linenumber" name="426" href="#426">426</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="427" href="#427">427</a> <em class="jxr_javadoccomment">   * @return The number of cells processed during major compactions</em>
+<a class="jxr_linenumber" name="428" href="#428">428</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="429" href="#429">429</a>   <strong class="jxr_keyword">long</strong> getMajorCompactedCellsCount();
+<a class="jxr_linenumber" name="430" href="#430">430</a> 
+<a class="jxr_linenumber" name="431" href="#431">431</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="432" href="#432">432</a> <em class="jxr_javadoccomment">   * @return The total amount of data processed during major compactions, in bytes</em>
+<a class="jxr_linenumber" name="433" href="#433">433</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="434" href="#434">434</a>   <strong class="jxr_keyword">long</strong> getMajorCompactedCellsSize();
+<a class="jxr_linenumber" name="435" href="#435">435</a> 
+<a class="jxr_linenumber" name="436" href="#436">436</a>   <em class="jxr_comment">/*</em>
+<a class="jxr_linenumber" name="437" href="#437">437</a> <em class="jxr_comment">   * @param o Observer who wants to know about changes in set of Readers</em>
+<a class="jxr_linenumber" name="438" href="#438">438</a> <em class="jxr_comment">   */</em>
+<a class="jxr_linenumber" name="439" href="#439">439</a>   <strong class="jxr_keyword">void</strong> addChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o);
 <a class="jxr_linenumber" name="440" href="#440">440</a> 
-<a class="jxr_linenumber" name="441" href="#441">441</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="442" href="#442">442</a> <em class="jxr_javadoccomment">   * This value can represent the degree of emergency of compaction for this store. It should be</em>
-<a class="jxr_linenumber" name="443" href="#443">443</a> <em class="jxr_javadoccomment">   * greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.</em>
-<a class="jxr_linenumber" name="444" href="#444">444</a> <em class="jxr_javadoccomment">   * &lt;ul&gt;</em>
-<a class="jxr_linenumber" name="445" href="#445">445</a> <em class="jxr_javadoccomment">   * &lt;li&gt;if getStorefilesCount &amp;lt;= getMinFilesToCompact, return 0.0&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="446" href="#446">446</a> <em class="jxr_javadoccomment">   * &lt;li&gt;return (getStorefilesCount - getMinFilesToCompact) / (blockingFileCount -</em>
-<a class="jxr_linenumber" name="447" href="#447">447</a> <em class="jxr_javadoccomment">   * getMinFilesToCompact)&lt;/li&gt;</em>
-<a class="jxr_linenumber" name="448" href="#448">448</a> <em class="jxr_javadoccomment">   * &lt;/ul&gt;</em>
-<a class="jxr_linenumber" name="449" href="#449">449</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="450" href="#450">450</a> <em class="jxr_javadoccomment">   * And for striped stores, we should calculate this value by the files in each stripe separately</em>
-<a class="jxr_linenumber" name="451" href="#451">451</a> <em class="jxr_javadoccomment">   * and return the maximum value.</em>
-<a class="jxr_linenumber" name="452" href="#452">452</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="453" href="#453">453</a> <em class="jxr_javadoccomment">   * It is similar to {@link #getCompactPriority()} except that it is more suitable to use in a</em>
-<a class="jxr_linenumber" name="454" href="#454">454</a> <em class="jxr_javadoccomment">   * linear formula.</em>
-<a class="jxr_linenumber" name="455" href="#455">455</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="456" href="#456">456</a>   <strong class="jxr_keyword">double</strong> getCompactionPressure();
-<a class="jxr_linenumber" name="457" href="#457">457</a> 
-<a class="jxr_linenumber" name="458" href="#458">458</a>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="459" href="#459">459</a> <em class="jxr_javadoccomment">    * Replaces the store files that the store has with the given files. Mainly used by</em>
-<a class="jxr_linenumber" name="460" href="#460">460</a> <em class="jxr_javadoccomment">    * secondary region replicas to keep up to date with</em>
-<a class="jxr_linenumber" name="461" href="#461">461</a> <em class="jxr_javadoccomment">    * the primary region files.</em>
-<a class="jxr_linenumber" name="462" href="#462">462</a> <em class="jxr_javadoccomment">    * @throws IOException</em>
-<a class="jxr_linenumber" name="463" href="#463">463</a> <em class="jxr_javadoccomment">    */</em>
-<a class="jxr_linenumber" name="464" href="#464">464</a>   <strong class="jxr_keyword">void</strong> refreshStoreFiles(Collection&lt;String&gt; newFiles) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="465" href="#465">465</a> 
-<a class="jxr_linenumber" name="466" href="#466">466</a>   <strong class="jxr_keyword">void</strong> bulkLoadHFile(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html">StoreFileInfo</a> fileInfo) <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="467" href="#467">467</a> 
-<a class="jxr_linenumber" name="468" href="#468">468</a>   <strong class="jxr_keyword">boolean</strong> isPrimaryReplicaStore();
-<a class="jxr_linenumber" name="469" href="#469">469</a> 
-<a class="jxr_linenumber" name="470" href="#470">470</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="471" href="#471">471</a> <em class="jxr_javadoccomment">   * Closes and archives the compacted files under this store</em>
-<a class="jxr_linenumber" name="472" href="#472">472</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="473" href="#473">473</a>   <strong class="jxr_keyword">void</strong> closeAndArchiveCompactedFiles() <strong class="jxr_keyword">throws</strong> IOException;
-<a class="jxr_linenumber" name="474" href="#474">474</a> }
+<a class="jxr_linenumber" name="441" href="#441">441</a>   <em class="jxr_comment">/*</em>
+<a class="jxr_linenumber" name="442" href="#442">442</a> <em class="jxr_comment">   * @param o Observer no longer interested in changes in set of Readers.</em>
+<a class="jxr_linenumber" name="443" href="#443">443</a> <em class="jxr_comment">   */</em>
+<a class="jxr_linenumber" name="444" href="#444">444</a>   <strong class="jxr_keyword">void</strong> deleteChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o);
+<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">   * @return Whether this store has too many store files.</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">boolean</strong> hasTooManyStoreFiles();
+<a class="jxr_linenumber" name="450" href="#450">450</a> 
+<a class="jxr_linenumber" name="451" href="#451">451</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="452" href="#452">452</a> <em class="jxr_javadoccomment">   * Checks the underlying store files, and opens the files that  have not</em>
+<a class="jxr_linenumber" name="453" href="#453">453</a> <em class="jxr_javadoccomment">   * been opened, and removes the store file readers for store files no longer</em>
+<a class="jxr_linenumber" name="454" href="#454">454</a> <em class="jxr_javadoccomment">   * available. Mainly used by secondary region replicas to keep up to date with</em>
+<a class="jxr_linenumber" name="455" href="#455">455</a> <em class="jxr_javadoccomment">   * the primary region files.</em>
+<a class="jxr_linenumber" name="456" href="#456">456</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<a class="jxr_linenumber" name="457" href="#457">457</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="458" href="#458">458</a>   <strong class="jxr_keyword">void</strong> refreshStoreFiles() <strong class="jxr_keyword">throws</strong> IOException;
+<a class="jxr_linenumber" name="459" href="#459">459</a> 
+<a class="jxr_linenumber" name="460" href="#460">460</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="461" href="#461">461</a> <em class="jxr_javadoccomment">   * This value can represent the degree of emergency of compaction for this store. It should be</em>
+<a class="jxr_linenumber" name="462" href="#462">462</a> <em class="jxr_javadoccomment">   * greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.</em>
+<a class="jxr_linenumber" name="463" href="#463">463</a> <em class="jxr_javadoccomment">   * &lt;ul&gt;</em>
+<a class="jxr_linenumber" name="464" href="#464">464</a> <em class="jxr_javadoccomment">   * &lt;li&gt;if getStorefilesCount &amp;lt;= getMinFilesToCompact, return 0.0&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="465" href="#465">465</a> <em class="jxr_javadoccomment">   * &lt;li&gt;return (getStorefilesCount - getMinFilesToCompact) / (blockingFileCount -</em>
+<a class="jxr_linenumber" name="466" href="#466">466</a> <em class="jxr_javadoccomment">   * getMinFilesToCompact)&lt;/li&gt;</em>
+<a class="jxr_linenumber" name="467" href="#467">467</a> <em class="jxr_javadoccomment">   * &lt;/ul&gt;</em>
+<a class="jxr_linenumber" name="468" href="#468">468</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="469" href="#469

<TRUNCATED>

[27/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
index 5e04712..e6f7370 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
@@ -37,7 +37,7 @@
 <span class="sourceLineNo">029</span>import java.util.concurrent.ExecutionException;<a name="line.29"></a>
 <span class="sourceLineNo">030</span>import java.util.concurrent.ExecutorCompletionService;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>import java.util.concurrent.Future;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.SynchronousQueue;<a name="line.32"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.LinkedBlockingQueue;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.util.concurrent.TimeUnit;<a name="line.34"></a>
 <span class="sourceLineNo">035</span><a name="line.35"></a>
@@ -121,243 +121,244 @@
 <span class="sourceLineNo">113</span>    // per sink thread pool<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    this.maxThreads = this.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,<a name="line.114"></a>
 <span class="sourceLineNo">115</span>      HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this.exec = new ThreadPoolExecutor(1, maxThreads, 60, TimeUnit.SECONDS,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        new SynchronousQueue&lt;Runnable&gt;());<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    this.replicationBulkLoadDataEnabled =<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>          HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    if (this.replicationBulkLoadDataEnabled) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    // Construct base namespace directory and hfile archive directory path<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private void decorateConf() {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private void connectToPeers() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    getRegionServers();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    int sleepMultiplier = 1;<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    // Connect to peer cluster first, unless we have to stop<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      replicationSinkMgr.chooseSinks();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>          sleepMultiplier++;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Do the sleeping logic<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param msg Why we sleep<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (LOG.isTraceEnabled()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    } catch (InterruptedException e) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<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>  /**<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Do the shipping logic<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public boolean replicate(ReplicateContext replicateContext) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    CompletionService&lt;Integer&gt; pool = new ExecutorCompletionService&lt;Integer&gt;(this.exec);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    List&lt;Entry&gt; entries = replicateContext.getEntries();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    String walGroupId = replicateContext.getWalGroupId();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    int sleepMultiplier = 1;<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      connectToPeers();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      peersSelected = true;<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>    if (replicationSinkMgr.getSinks().size() == 0) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return false;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    //  and number of current sinks<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1),<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      replicationSinkMgr.getSinks().size());<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (n == 1) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      entryLists.add(entries);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    } else {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      for (int i=0; i&lt;n; i++) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // now group by region<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      for (Entry e : entries) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    while (this.isRunning()) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (!isPeerEnabled()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          sleepMultiplier++;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        continue;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (LOG.isTraceEnabled()) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.trace("Replicating " + entries.size() +<a name="line.216"></a>
-<span class="sourceLineNo">217</span>              " entries of total size " + replicateContext.getSize());<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>        int futures = 0;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>            if (LOG.isTraceEnabled()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.224"></a>
-<span class="sourceLineNo">225</span>                  " entries of total size " + replicateContext.getSize());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>            }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            futures++;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        IOException iox = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>        for (int i=0; i&lt;futures; i++) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>            // wait for all futures, remove successful parts<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            // (only the remaining parts will be retried)<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>            entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          } catch (InterruptedException ie) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>            iox =  new IOException(ie);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          } catch (ExecutionException ee) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            // cause must be an IOException<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          // if we had any exceptions, try again<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          throw iox;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        // update metrics<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          walGroupId);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        return true;<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>      } catch (IOException ioe) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        // Didn't ship anything, but must still age the last time we did<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        if (ioe instanceof RemoteException) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          if (ioe instanceof TableNotFoundException) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.263"></a>
-<span class="sourceLineNo">264</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>              sleepMultiplier++;<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>        } else {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            // This exception means we waited for more than 60s and nothing<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            // happened, the cluster is alive and calling it right away<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            // even for a test just makes things worse.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.273"></a>
-<span class="sourceLineNo">274</span>              "call to the remote cluster timed out, which is usually " +<a name="line.274"></a>
-<span class="sourceLineNo">275</span>              "caused by a machine failure or a massive slowdown",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>              this.socketTimeoutMultiplier);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          } else if (ioe instanceof ConnectException) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            replicationSinkMgr.chooseSinks();<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          } else {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          sleepMultiplier++;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  protected void doStop() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    disconnect(); //don't call super.doStop()<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    if (this.conn != null) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      try {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        this.conn.close();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        this.conn = null;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      } catch (IOException e) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        LOG.warn("Failed to close the connection");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    exec.shutdownNow();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    notifyStopped();<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>  // is this needed? Nobody else will call doStop() otherwise<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  @Override<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public State stopAndWait() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    doStop();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return super.stopAndWait();<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>  @VisibleForTesting<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return new Replicator(entries, ordinal);<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>  @VisibleForTesting<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private List&lt;Entry&gt; entries;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int ordinal;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.entries = entries;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.ordinal = ordinal;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    public Integer call() throws IOException {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      SinkPeer sinkPeer = null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      try {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        return ordinal;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>      } catch (IOException ioe) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        if (sinkPeer != null) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        throw ioe;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>}<a name="line.352"></a>
+<span class="sourceLineNo">116</span>    this.exec = new ThreadPoolExecutor(maxThreads, maxThreads, 60, TimeUnit.SECONDS,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    this.exec.allowCoreThreadTimeOut(true);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    this.replicationBulkLoadDataEnabled =<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    if (this.replicationBulkLoadDataEnabled) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // Construct base namespace directory and hfile archive directory path<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<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>  private void decorateConf() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<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><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private void connectToPeers() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    getRegionServers();<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    int sleepMultiplier = 1;<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // Connect to peer cluster first, unless we have to stop<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      replicationSinkMgr.chooseSinks();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getSinks().size() == 0) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>          sleepMultiplier++;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        }<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Do the sleeping logic<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @param msg Why we sleep<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (LOG.isTraceEnabled()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    } catch (InterruptedException e) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.debug("Interrupted while sleeping between retries");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * Do the shipping logic<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  public boolean replicate(ReplicateContext replicateContext) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    CompletionService&lt;Integer&gt; pool = new ExecutorCompletionService&lt;Integer&gt;(this.exec);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    List&lt;Entry&gt; entries = replicateContext.getEntries();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    String walGroupId = replicateContext.getWalGroupId();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    int sleepMultiplier = 1;<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      connectToPeers();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      peersSelected = true;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    if (replicationSinkMgr.getSinks().size() == 0) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      return false;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // minimum of: configured threads, number of 100-waledit batches,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    //  and number of current sinks<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1),<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      replicationSinkMgr.getSinks().size());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;List&lt;Entry&gt;&gt;(n);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    if (n == 1) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      entryLists.add(entries);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    } else {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      for (int i=0; i&lt;n; i++) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        entryLists.add(new ArrayList&lt;Entry&gt;(entries.size()/n+1));<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // now group by region<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      for (Entry e : entries) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        entryLists.get(Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n)).add(e);<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>    while (this.isRunning()) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!isPeerEnabled()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          sleepMultiplier++;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        continue;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      try {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        if (LOG.isTraceEnabled()) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          LOG.trace("Replicating " + entries.size() +<a name="line.217"></a>
+<span class="sourceLineNo">218</span>              " entries of total size " + replicateContext.getSize());<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>        int futures = 0;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        for (int i=0; i&lt;entryLists.size(); i++) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          if (!entryLists.get(i).isEmpty()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>            if (LOG.isTraceEnabled()) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              LOG.trace("Submitting " + entryLists.get(i).size() +<a name="line.225"></a>
+<span class="sourceLineNo">226</span>                  " entries of total size " + replicateContext.getSize());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>            // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            pool.submit(createReplicator(entryLists.get(i), i));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>            futures++;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        IOException iox = null;<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>        for (int i=0; i&lt;futures; i++) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          try {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>            // wait for all futures, remove successful parts<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            // (only the remaining parts will be retried)<a name="line.238"></a>
+<span class="sourceLineNo">239</span>            Future&lt;Integer&gt; f = pool.take();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>            entryLists.set(f.get().intValue(), Collections.&lt;Entry&gt;emptyList());<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          } catch (InterruptedException ie) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>            iox =  new IOException(ie);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          } catch (ExecutionException ee) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>            // cause must be an IOException<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            iox = (IOException)ee.getCause();<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>        if (iox != null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          // if we had any exceptions, try again<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          throw iox;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // update metrics<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        this.metrics.setAgeOfLastShippedOp(entries.get(entries.size() - 1).getKey().getWriteTime(),<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          walGroupId);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        return true;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      } catch (IOException ioe) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        // Didn't ship anything, but must still age the last time we did<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        if (ioe instanceof RemoteException) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          if (ioe instanceof TableNotFoundException) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>            if (sleepForRetries("A table is missing in the peer cluster. "<a name="line.264"></a>
+<span class="sourceLineNo">265</span>                + "Replication cannot proceed without losing data.", sleepMultiplier)) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>              sleepMultiplier++;<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>        } else {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            // This exception means we waited for more than 60s and nothing<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            // happened, the cluster is alive and calling it right away<a name="line.272"></a>
+<span class="sourceLineNo">273</span>            // even for a test just makes things worse.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.274"></a>
+<span class="sourceLineNo">275</span>              "call to the remote cluster timed out, which is usually " +<a name="line.275"></a>
+<span class="sourceLineNo">276</span>              "caused by a machine failure or a massive slowdown",<a name="line.276"></a>
+<span class="sourceLineNo">277</span>              this.socketTimeoutMultiplier);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else if (ioe instanceof ConnectException) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            replicationSinkMgr.chooseSinks();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          } else {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          sleepMultiplier++;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return ctx.getReplicationPeer().getPeerState() == PeerState.ENABLED;<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>  @Override<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected void doStop() {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    disconnect(); //don't call super.doStop()<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    if (this.conn != null) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      try {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        this.conn.close();<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        this.conn = null;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      } catch (IOException e) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        LOG.warn("Failed to close the connection");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    exec.shutdownNow();<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    notifyStopped();<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>  // is this needed? Nobody else will call doStop() otherwise<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  public State stopAndWait() {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    doStop();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return super.stopAndWait();<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>  @VisibleForTesting<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  protected Replicator createReplicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return new Replicator(entries, ordinal);<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>  @VisibleForTesting<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  protected class Replicator implements Callable&lt;Integer&gt; {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private List&lt;Entry&gt; entries;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    private int ordinal;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public Replicator(List&lt;Entry&gt; entries, int ordinal) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.entries = entries;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.ordinal = ordinal;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    public Integer call() throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      SinkPeer sinkPeer = null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      try {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        ReplicationProtbufUtil.replicateWALEntry(rrs, entries.toArray(new Entry[entries.size()]),<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        return ordinal;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>      } catch (IOException ioe) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        if (sinkPeer != null) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throw ioe;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>}<a name="line.353"></a>
 
 
 


[22/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
index 9e6b112..4fe4d02 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1291">TestBlockEvictionFromClient.CustomScanner</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1423">TestBlockEvictionFromClient.CustomScanner</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.regionserver.RegionScanner</pre>
 </li>
@@ -238,7 +238,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>delegate</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RegionScanner <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1293">delegate</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RegionScanner <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1425">delegate</a></pre>
 </li>
 </ul>
 </li>
@@ -255,7 +255,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBlockEvictionFromClient.CustomScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1295">TestBlockEvictionFromClient.CustomScanner</a>(org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;delegate)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1427">TestBlockEvictionFromClient.CustomScanner</a>(org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;delegate)</pre>
 </li>
 </ul>
 </li>
@@ -272,7 +272,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1300">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;results)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1432">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;results)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -287,7 +287,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1305">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1437">next</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
            org.apache.hadoop.hbase.regionserver.ScannerContext&nbsp;scannerContext)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -303,7 +303,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1310">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1442">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;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>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -318,7 +318,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1315">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1447">nextRaw</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.Cell&gt;&nbsp;result,
               org.apache.hadoop.hbase.regionserver.ScannerContext&nbsp;context)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -334,7 +334,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1337">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1469">close</a>()
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -353,7 +353,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.HRegionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1342">getRegionInfo</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.HRegionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1474">getRegionInfo</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getRegionInfo</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.regionserver.RegionScanner</code></dd>
@@ -366,7 +366,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isFilterDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1347">isFilterDone</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1479">isFilterDone</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -381,7 +381,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>reseek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1352">reseek</a>(byte[]&nbsp;row)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1484">reseek</a>(byte[]&nbsp;row)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -396,7 +396,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1357">getMaxResultSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1489">getMaxResultSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getMaxResultSize</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.regionserver.RegionScanner</code></dd>
@@ -409,7 +409,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getMvccReadPoint</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1362">getMvccReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1494">getMvccReadPoint</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getMvccReadPoint</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.regionserver.RegionScanner</code></dd>
@@ -422,7 +422,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatch</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1367">getBatch</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1499">getBatch</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getBatch</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.regionserver.RegionScanner</code></dd>
@@ -435,7 +435,7 @@ implements org.apache.hadoop.hbase.regionserver.RegionScanner</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>shipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1372">shipped</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#line.1504">shipped</a>()
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
index 5bd4e2d..0c2b782 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1174">TestBlockEvictionFromClient.GetThread</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1306">TestBlockEvictionFromClient.GetThread</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>
@@ -239,7 +239,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>table</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.client.HTable <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1175">table</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.client.HTable <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1307">table</a></pre>
 </li>
 </ul>
 <a name="tracker">
@@ -248,7 +248,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tracker</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1176">tracker</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1308">tracker</a></pre>
 </li>
 </ul>
 <a name="multipleCFs">
@@ -257,7 +257,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>multipleCFs</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1177">multipleCFs</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1309">multipleCFs</a></pre>
 </li>
 </ul>
 </li>
@@ -274,7 +274,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBlockEvictionFromClient.GetThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1179">TestBlockEvictionFromClient.GetThread</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1311">TestBlockEvictionFromClient.GetThread</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
                                      boolean&nbsp;tracker,
                                      boolean&nbsp;multipleCFs)</pre>
 </li>
@@ -293,7 +293,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/client/TestBlockEvictionFromClient.GetThread.html#line.1186">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1318">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>
@@ -308,7 +308,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initiateGet</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1194">initiateGet</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#line.1326">initiateGet</a>(org.apache.hadoop.hbase.client.HTable&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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
index 723923f..7c1d4ab 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1154">TestBlockEvictionFromClient.MultiGetThread</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1286">TestBlockEvictionFromClient.MultiGetThread</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>
@@ -229,7 +229,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>table</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.client.HTable <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1155">table</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.client.HTable <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1287">table</a></pre>
 </li>
 </ul>
 <a name="gets">
@@ -238,7 +238,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>gets</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;org.apache.hadoop.hbase.client.Get&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1156">gets</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;org.apache.hadoop.hbase.client.Get&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1288">gets</a></pre>
 </li>
 </ul>
 </li>
@@ -255,7 +255,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBlockEvictionFromClient.MultiGetThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1157">TestBlockEvictionFromClient.MultiGetThread</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1289">TestBlockEvictionFromClient.MultiGetThread</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table)</pre>
 </li>
 </ul>
 </li>
@@ -272,7 +272,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1161">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html#line.1293">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
index 6cd810a..00ef2d2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1238">TestBlockEvictionFromClient.ScanThread</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1370">TestBlockEvictionFromClient.ScanThread</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>
@@ -234,7 +234,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>table</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.client.HTable <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1239">table</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.client.HTable <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1371">table</a></pre>
 </li>
 </ul>
 <a name="reverse">
@@ -243,7 +243,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>reverse</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1240">reverse</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1372">reverse</a></pre>
 </li>
 </ul>
 </li>
@@ -260,7 +260,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBlockEvictionFromClient.ScanThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1242">TestBlockEvictionFromClient.ScanThread</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1374">TestBlockEvictionFromClient.ScanThread</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
                                       boolean&nbsp;reverse)</pre>
 </li>
 </ul>
@@ -278,7 +278,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/client/TestBlockEvictionFromClient.ScanThread.html#line.1248">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1380">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>
@@ -293,7 +293,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initiateScan</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1256">initiateScan</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#line.1388">initiateScan</a>(org.apache.hadoop.hbase.client.HTable&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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
index e39b312..5159cb2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
@@ -307,54 +307,58 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testBlockEvictionWithParallelScans()">testBlockEvictionWithParallelScans</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testBlockEvictionAfterHBASE13082WithCompactionAndFlush()">testBlockEvictionAfterHBASE13082WithCompactionAndFlush</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/client/TestBlockEvictionFromClient.html#testGetsWithMultiColumnsAndExplicitTracker()">testGetsWithMultiColumnsAndExplicitTracker</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testBlockEvictionWithParallelScans()">testBlockEvictionWithParallelScans</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/TestBlockEvictionFromClient.html#testGetWithCellsInDifferentFiles()">testGetWithCellsInDifferentFiles</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testGetsWithMultiColumnsAndExplicitTracker()">testGetsWithMultiColumnsAndExplicitTracker</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/client/TestBlockEvictionFromClient.html#testGetWithMultipleColumnFamilies()">testGetWithMultipleColumnFamilies</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testGetWithCellsInDifferentFiles()">testGetWithCellsInDifferentFiles</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/TestBlockEvictionFromClient.html#testMultiGets()">testMultiGets</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testGetWithMultipleColumnFamilies()">testGetWithMultipleColumnFamilies</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/client/TestBlockEvictionFromClient.html#testParallelGetsAndScans()">testParallelGetsAndScans</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testMultiGets()">testMultiGets</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/TestBlockEvictionFromClient.html#testParallelGetsAndScanWithWrappedRegionScanner()">testParallelGetsAndScanWithWrappedRegionScanner</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testParallelGetsAndScans()">testParallelGetsAndScans</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/client/TestBlockEvictionFromClient.html#testReverseScanWithCompaction()">testReverseScanWithCompaction</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testParallelGetsAndScanWithWrappedRegionScanner()">testParallelGetsAndScanWithWrappedRegionScanner</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/TestBlockEvictionFromClient.html#testScanWithCompaction()">testScanWithCompaction</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testReverseScanWithCompaction()">testReverseScanWithCompaction</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/client/TestBlockEvictionFromClient.html#testScanWithCompaction()">testScanWithCompaction</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#testScanWithCompactionInternals(java.lang.String,%20boolean)">testScanWithCompactionInternals</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableNameStr,
                                                               boolean&nbsp;reversed)</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/client/TestBlockEvictionFromClient.html#testScanWithException()">testScanWithException</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/client/TestBlockEvictionFromClient.html#testScanWithMultipleColumnFamilies()">testScanWithMultipleColumnFamilies</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#waitForStoreFileCount(org.apache.hadoop.hbase.regionserver.Store,%20int,%20int)">waitForStoreFileCount</a></strong>(org.apache.hadoop.hbase.regionserver.Store&nbsp;store,
                                           int&nbsp;count,
@@ -770,13 +774,27 @@ 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/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd></dl>
 </li>
 </ul>
+<a name="testBlockEvictionAfterHBASE13082WithCompactionAndFlush()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testBlockEvictionAfterHBASE13082WithCompactionAndFlush</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.924">testBlockEvictionAfterHBASE13082WithCompactionAndFlush</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>
+<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>
+<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>
+</li>
+</ul>
 <a name="testScanWithException()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanWithException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.924">testScanWithException</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1056">testScanWithException</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>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -790,7 +808,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>iterateBlockCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1027">iterateBlockCache</a>(org.apache.hadoop.hbase.io.hfile.BlockCache&nbsp;cache,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1159">iterateBlockCache</a>(org.apache.hadoop.hbase.io.hfile.BlockCache&nbsp;cache,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;org.apache.hadoop.hbase.io.hfile.CachedBlock&gt;&nbsp;iterator)</pre>
 </li>
 </ul>
@@ -800,7 +818,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>insertData</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1043">insertData</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1175">insertData</a>(org.apache.hadoop.hbase.client.HTable&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>
@@ -812,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>initiateScan</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.ScanThread</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1056">initiateScan</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.ScanThread</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1188">initiateScan</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
                                                     boolean&nbsp;reverse)
                                                        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>
@@ -827,7 +845,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>initiateGet</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.GetThread</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1068">initiateGet</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.GetThread</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1200">initiateGet</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table,
                                                   boolean&nbsp;tracker,
                                                   boolean&nbsp;multipleCFs)
                                                      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>,
@@ -843,7 +861,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>initiateMultiGet</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.MultiGetThread</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1080">initiateMultiGet</a>(org.apache.hadoop.hbase.client.HTable&nbsp;table)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.MultiGetThread</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1212">initiateMultiGet</a>(org.apache.hadoop.hbase.client.HTable&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>,
                                                                       <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>
@@ -857,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>checkForBlockEviction</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1092">checkForBlockEviction</a>(org.apache.hadoop.hbase.io.hfile.BlockCache&nbsp;cache,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1224">checkForBlockEviction</a>(org.apache.hadoop.hbase.io.hfile.BlockCache&nbsp;cache,
                          boolean&nbsp;getClosed,
                          boolean&nbsp;expectOnlyZero,
                          boolean&nbsp;wrappedCp)
@@ -872,7 +890,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>waitForStoreFileCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1280">waitForStoreFileCount</a>(org.apache.hadoop.hbase.regionserver.Store&nbsp;store,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#line.1412">waitForStoreFileCount</a>(org.apache.hadoop.hbase.regionserver.Store&nbsp;store,
                          int&nbsp;count,
                          int&nbsp;timeout)
                             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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html
index 03f44eb..ab0138a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestChecksum.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html" target="_top">Frames</a></li>
@@ -544,7 +544,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestChecksum.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html
index 70884fb..d7d58e4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -451,7 +451,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-frame.html
index 7b38bf1..36c9593 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-frame.html
@@ -36,6 +36,7 @@
 <li><a href="TestCacheOnWrite.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestCacheOnWrite</a></li>
 <li><a href="TestChecksum.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestChecksum</a></li>
 <li><a href="TestChecksum.FSReaderImplTest.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestChecksum.FSReaderImplTest</a></li>
+<li><a href="TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestCombinedBlockCache</a></li>
 <li><a href="TestFixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestFixedFileTrailer</a></li>
 <li><a href="TestForceCacheImportantBlocks.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestForceCacheImportantBlocks</a></li>
 <li><a href="TestHFile.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestHFile</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-summary.html
index fcc9d5a..44bf591 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-summary.html
@@ -196,10 +196,14 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">TestFixedFileTrailer</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCombinedBlockCache</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">TestFixedFileTrailer</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.html" title="class in org.apache.hadoop.hbase.io.hfile">TestForceCacheImportantBlocks</a></td>
 <td class="colLast">
 <div class="block">Make sure we always cache important block types, such as index blocks, as
@@ -207,140 +211,140 @@
  for the column family.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFile.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFile</a></td>
 <td class="colLast">
 <div class="block">test hfile features.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlock</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlockCompatibility</a></td>
 <td class="colLast">
 <div class="block">This class has unit tests to prove that older versions of
  HFiles (without checksums) are compatible with current readers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlockCompatibility.Writer</a></td>
 <td class="colLast">
 <div class="block">This is the version of the HFileBlock.Writer that is used to
  create V2 blocks with minor version 0.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockIndex.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlockIndex</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockIndex.BlockReaderWrapper.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlockIndex.BlockReaderWrapper</a></td>
 <td class="colLast">
 <div class="block">A wrapper around a block reader which only caches the results of the last
  operation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockPositionalRead.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlockPositionalRead</a></td>
 <td class="colLast">
 <div class="block">Unit test suite covering HFileBlock positional read logic.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileDataBlockEncoder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileEncryption.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileEncryption</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileInlineToRootChunkConversion.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileInlineToRootChunkConversion</a></td>
 <td class="colLast">
 <div class="block">Test a case when an inline index chunk is converted to a root one.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileSeek.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileSeek</a></td>
 <td class="colLast">
 <div class="block">test the performance for seek.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileSeek.IntegerRange.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileSeek.IntegerRange</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileSeek.MyOptions.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileSeek.MyOptions</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileWriterV2.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileWriterV2</a></td>
 <td class="colLast">
 <div class="block">Testing writing a version 2 <code>HFile</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileWriterV3.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileWriterV3</a></td>
 <td class="colLast">
 <div class="block">Testing writing a version 3 <code>HFile</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestLazyDataBlockDecompression.html" title="class in org.apache.hadoop.hbase.io.hfile">TestLazyDataBlockDecompression</a></td>
 <td class="colLast">
 <div class="block">A kind of integration test at the intersection of <code>HFileBlock</code>, <code>CacheConfig</code>,
  and <code>LruBlockCache</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TestLruBlockCache</a></td>
 <td class="colLast">
 <div class="block">Tests the concurrent LruBlockCache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.CachedItem.html" title="class in org.apache.hadoop.hbase.io.hfile">TestLruBlockCache.CachedItem</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestLruCachedBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">TestLruCachedBlock</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestPrefetch.html" title="class in org.apache.hadoop.hbase.io.hfile">TestPrefetch</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestReseekTo.html" title="class in org.apache.hadoop.hbase.io.hfile">TestReseekTo</a></td>
 <td class="colLast">
 <div class="block">Test <code>HFileScanner.reseekTo(org.apache.hadoop.hbase.Cell)</code></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TestScannerFromBucketCache</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestScannerSelectionUsingKeyRange.html" title="class in org.apache.hadoop.hbase.io.hfile">TestScannerSelectionUsingKeyRange</a></td>
 <td class="colLast">
 <div class="block">Test the optimization that does not scan files where all key ranges are excluded.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestScannerSelectionUsingTTL.html" title="class in org.apache.hadoop.hbase.io.hfile">TestScannerSelectionUsingTTL</a></td>
 <td class="colLast">
 <div class="block">Test the optimization that does not scan files where all timestamps are
  expired.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestSeekBeforeWithInlineBlocks.html" title="class in org.apache.hadoop.hbase.io.hfile">TestSeekBeforeWithInlineBlocks</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestSeekTo.html" title="class in org.apache.hadoop.hbase.io.hfile">TestSeekTo</a></td>
 <td class="colLast">
 <div class="block">Test <code>HFileScanner#seekTo(byte[])</code> and its variants.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 1dd4df1..9568354 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -115,6 +115,7 @@
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCacheOnWrite</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestChecksum.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestChecksum</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestChecksum.FSReaderImplTest.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestChecksum.FSReaderImplTest</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCombinedBlockCache</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestFixedFileTrailer</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestForceCacheImportantBlocks</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestHFile</span></a></li>
@@ -155,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/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TagUsage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestHFileBlockCompatibility.Writer.State</span></a></li>
-<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 c7fbe63..45c7fa3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -505,15 +505,15 @@
 <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/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/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="strong">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="strong">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <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/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/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/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.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/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.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/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="strong">PerformanceEvaluation.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="strong">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="strong">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index ebb5e7b..afa4107 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -147,8 +147,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/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 1075d6b..2dbfd56 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -541,9 +541,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
index 56e3de5..80e7a5b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html
@@ -468,7 +468,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFlushTableSnapshotWithProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.203">testFlushTableSnapshotWithProcedure</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.204">testFlushTableSnapshotWithProcedure</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 simple flush snapshotting a table that is online</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -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>testSnapshotFailsOnNonExistantTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.237">testSnapshotFailsOnNonExistantTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.238">testSnapshotFailsOnNonExistantTable</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>
@@ -493,7 +493,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testAsyncFlushSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.266">testAsyncFlushSnapshot</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.267">testAsyncFlushSnapshot</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>
@@ -505,7 +505,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testSnapshotStateAfterMerge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.287">testSnapshotStateAfterMerge</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.288">testSnapshotStateAfterMerge</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>
@@ -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>testTakeSnapshotAfterMerge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.338">testTakeSnapshotAfterMerge</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.339">testTakeSnapshotAfterMerge</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>
@@ -529,7 +529,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFlushCreateListDestroy</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.385">testFlushCreateListDestroy</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.386">testFlushCreateListDestroy</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">Basic end-to-end test of simple-flush-based snapshots</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -542,7 +542,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testConcurrentSnapshottingAttempts</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.406">testConcurrentSnapshottingAttempts</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.407">testConcurrentSnapshottingAttempts</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">Demonstrate that we reject snapshot requests if there is a snapshot already running on the
@@ -559,7 +559,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>waitRegionsAfterMerge</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.505">waitRegionsAfterMerge</a>(long&nbsp;numRegionsAfterMerge)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.506">waitRegionsAfterMerge</a>(long&nbsp;numRegionsAfterMerge)
                             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>
@@ -573,7 +573,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyRowCount</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.521">verifyRowCount</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.522">verifyRowCount</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                   org.apache.hadoop.hbase.TableName&nbsp;tableName,
                   long&nbsp;expectedRows)
                        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>
@@ -587,7 +587,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.526">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#line.527">countRows</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
             byte[]...&nbsp;families)
                  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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 fd9b49b..01222b0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -234,9 +234,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.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/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/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/736088b3/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 99cb6ec..c583b6a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -120,8 +120,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.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">IOTestProvider.AllowedOperations</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">FaultyFSLog.FailureType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">IOTestProvider.AllowedOperations</span></a></li>
 </ul>
 </li>
 </ul>


[11/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/org/apache/hadoop/hbase/io/hfile/package-frame.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/io/hfile/package-frame.html b/xref-test/org/apache/hadoop/hbase/io/hfile/package-frame.html
index 8c89283..bb72a18 100644
--- a/xref-test/org/apache/hadoop/hbase/io/hfile/package-frame.html
+++ b/xref-test/org/apache/hadoop/hbase/io/hfile/package-frame.html
@@ -103,6 +103,9 @@
             	<a href="TestChecksum.html" target="classFrame">TestChecksum</a>
           	</li>
           	          	<li>
+            	<a href="TestCombinedBlockCache.html" target="classFrame">TestCombinedBlockCache</a>
+          	</li>
+          	          	<li>
             	<a href="TestFixedFileTrailer.html" target="classFrame">TestFixedFileTrailer</a>
           	</li>
           	          	<li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/org/apache/hadoop/hbase/io/hfile/package-summary.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/io/hfile/package-summary.html b/xref-test/org/apache/hadoop/hbase/io/hfile/package-summary.html
index b3498c0..ce881ad 100644
--- a/xref-test/org/apache/hadoop/hbase/io/hfile/package-summary.html
+++ b/xref-test/org/apache/hadoop/hbase/io/hfile/package-summary.html
@@ -182,6 +182,11 @@
             	</tr>
 				            	<tr>
               		<td>
+                		<a href="TestCombinedBlockCache.html" target="classFrame">TestCombinedBlockCache</a>
+              		</td>
+            	</tr>
+				            	<tr>
+              		<td>
                 		<a href="TestFixedFileTrailer.html" target="classFrame">TestFixedFileTrailer</a>
               		</td>
             	</tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html b/xref-test/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
index c154234..bc454b6 100644
--- a/xref-test/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
+++ b/xref-test/org/apache/hadoop/hbase/regionserver/TestStoreScanner.html
@@ -464,9 +464,9 @@
 <a class="jxr_linenumber" name="454" href="#454">454</a>     <em class="jxr_comment">// normally cause an NPE because scan.store is null.  So as long as we get through these</em>
 <a class="jxr_linenumber" name="455" href="#455">455</a>     <em class="jxr_comment">// two calls we are good and the bug was quashed.</em>
 <a class="jxr_linenumber" name="456" href="#456">456</a> 
-<a class="jxr_linenumber" name="457" href="#457">457</a>     scan.updateReaders();
+<a class="jxr_linenumber" name="457" href="#457">457</a>     scan.updateReaders(<strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;());
 <a class="jxr_linenumber" name="458" href="#458">458</a> 
-<a class="jxr_linenumber" name="459" href="#459">459</a>     scan.updateReaders();
+<a class="jxr_linenumber" name="459" href="#459">459</a>     scan.updateReaders(<strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;());
 <a class="jxr_linenumber" name="460" href="#460">460</a> 
 <a class="jxr_linenumber" name="461" href="#461">461</a>     scan.peek();
 <a class="jxr_linenumber" name="462" href="#462">462</a>   }

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref-test/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/regionserver/TestWideScanner.html b/xref-test/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
index 5ca35d5..7231a40 100644
--- a/xref-test/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
+++ b/xref-test/org/apache/hadoop/hbase/regionserver/TestWideScanner.html
@@ -140,7 +140,7 @@
 <a class="jxr_linenumber" name="130" href="#130">130</a>           ((HRegion.RegionScannerImpl)s).storeHeap.getHeap().iterator();
 <a class="jxr_linenumber" name="131" href="#131">131</a>         <strong class="jxr_keyword">while</strong> (scanners.hasNext()) {
 <a class="jxr_linenumber" name="132" href="#132">132</a>           StoreScanner ss = (StoreScanner)scanners.next();
-<a class="jxr_linenumber" name="133" href="#133">133</a>           ss.updateReaders();
+<a class="jxr_linenumber" name="133" href="#133">133</a>           ss.updateReaders(<strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;());
 <a class="jxr_linenumber" name="134" href="#134">134</a>         }
 <a class="jxr_linenumber" name="135" href="#135">135</a>       } <strong class="jxr_keyword">while</strong> (more);
 <a class="jxr_linenumber" name="136" href="#136">136</a> 


[14/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
index 9640466..93346d6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html
@@ -929,524 +929,656 @@
 <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>  @Test<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    HTable table = null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    try {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      latch = new CountDownLatch(1);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      exceptionLatch = new CountDownLatch(1);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      // Create KV that will give you two blocks<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      // Create a table with block size as 1024<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      // get the block cache and region<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      RegionLocator locator = table.getRegionLocator();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionName);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      Store store = region.getStores().iterator().next();<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      cacheConf.setEvictOnClose(true);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      // insert data. 2 Rows are added<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      insertData(table);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      // flush the data<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      System.out.println("Flushing cache");<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      // Should create one Hfile with 2 blocks<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      region.flush(true);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      // The block would have been decremented for the scan case as it was<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      // wrapped<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // before even the postNext hook gets executed.<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // giving some time for the block to be decremented<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      Thread.sleep(100);<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      boolean usedBlocksFound = false;<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      int refCount = 0;<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      while (iterator.hasNext()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        CachedBlock next = iterator.next();<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (cache instanceof BucketCache) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          continue;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        if (refCount != 0) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // Blocks will be with count 3<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          usedBlocksFound = true;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      assertTrue(usedBlocksFound);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      exceptionLatch.countDown();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // countdown the latch<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      for (ScanThread thread : scanThreads) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        thread.join();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      iterator = cache.iterator();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      usedBlocksFound = false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      refCount = 0;<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      while (iterator.hasNext()) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        CachedBlock next = iterator.next();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        if (cache instanceof BucketCache) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        } else {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          continue;<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        if (refCount != 0) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>          // Blocks will be with count 3<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          usedBlocksFound = true;<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      }<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      assertTrue(usedBlocksFound);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Thread.sleep(5100);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      iterator = cache.iterator();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      refCount = 0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      while (iterator.hasNext()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        CachedBlock next = iterator.next();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (cache instanceof BucketCache) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>          continue;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        assertEquals(0, refCount);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    } finally {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      if (table != null) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        table.close();<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    int refCount;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    while (iterator.hasNext()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      CachedBlock next = iterator.next();<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (cache instanceof BucketCache) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      } else {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        continue;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      assertEquals(0, refCount);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  private void insertData(HTable table) throws IOException {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    Put put = new Put(ROW);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    table.put(put);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    put = new Put(ROW1);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    table.put(put);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    put = new Put(ROW);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    table.put(put);<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>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      InterruptedException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    for (ScanThread thread : scanThreads) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      thread.start();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return scanThreads;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      throws IOException, InterruptedException {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    for (GetThread thread : getThreads) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      thread.start();<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    return getThreads;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      throws IOException, InterruptedException {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      thread.start();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    return multiGetThreads;<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    int counter = NO_OF_THREADS;<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      counter = counter - 1;<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        Thread.sleep(100);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } else {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        Thread.sleep(100);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    int refCount = 0;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    while (iterator.hasNext()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      CachedBlock next = iterator.next();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (cache instanceof BucketCache) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      } else {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        if (expectOnlyZero) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          assertTrue(refCount == 0);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (refCount != 0) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          // Because the scan would have also touched up on these blocks but<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          // it<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>          // would have touched<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>          // all 3<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>          if (getClosed) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>            // If get has closed only the scan's blocks would be available<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          } else {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      } else {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // Because the get would have also touched up on these blocks but it<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // would have touched<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        // upon only 2 additionally<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        if (expectOnlyZero) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          assertTrue(refCount == 0);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        if (refCount != 0) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (getLatch == null || wrappedCp) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          } else {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private static class MultiGetThread extends Thread {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private final HTable table;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    public MultiGetThread(HTable table) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      this.table = table;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    @Override<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    public void run() {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      gets.add(new Get(ROW));<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      gets.add(new Get(ROW1));<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      try {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        Result[] r = table.get(gets);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (IOException e) {<a name="line.1169"></a>
+<span class="sourceLineNo">924</span>  public void testBlockEvictionAfterHBASE13082WithCompactionAndFlush()<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      throws IOException, InterruptedException {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    // do flush and scan in parallel<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    HTable table = null;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    try {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      latch = new CountDownLatch(1);<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      compactionLatch = new CountDownLatch(1);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      TableName tableName =<a name="line.931"></a>
+<span class="sourceLineNo">932</span>          TableName.valueOf("testBlockEvictionAfterHBASE13082WithCompactionAndFlush");<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      // Create a table with block size as 1024<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      // get the block cache and region<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      RegionLocator locator = table.getRegionLocator();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.939"></a>
+<span class="sourceLineNo">940</span>          regionName);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      Store store = region.getStores().iterator().next();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      cacheConf.setEvictOnClose(true);<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>      // insert data. 2 Rows are added<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      Put put = new Put(ROW);<a name="line.948"></a>
+<span class="sourceLineNo">949</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      table.put(put);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put = new Put(ROW1);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      table.put(put);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // Should create one Hfile with 2 blocks<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      region.flush(true);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      // read the data and expect same blocks, one new hit, no misses<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      int refCount = 0;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      // Check how this miss is happening<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // insert a second column, read the row, no new blocks, 3 new hits<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      byte[] data2 = Bytes.add(data, data);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      put = new Put(ROW);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      table.put(put);<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // flush, one new block<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      System.out.println("Flushing cache");<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      region.flush(true);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      iterateBlockCache(cache, iterator);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      // Create three sets of scan<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Thread.sleep(100);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      iterator = cache.iterator();<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      boolean usedBlocksFound = false;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      while (iterator.hasNext()) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        CachedBlock next = iterator.next();<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.978"></a>
+<span class="sourceLineNo">979</span>        if (cache instanceof BucketCache) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        } else {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          continue;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        if (refCount != 0) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>          // Blocks will be with count 3<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          usedBlocksFound = true;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        }<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      // Make a put and do a flush<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>      data2 = Bytes.add(data, data);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      put = new Put(ROW1);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      table.put(put);<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      // flush, one new block<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      System.out.println("Flushing cache");<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      region.flush(true);<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      usedBlocksFound = false;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      System.out.println("Compacting");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      assertEquals(3, store.getStorefilesCount());<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      store.triggerMajorCompaction();<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      region.compact(true);<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      assertEquals(1, store.getStorefilesCount());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      // Even after compaction is done we will have some blocks that cannot<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // be evicted this is because the scan is still referencing them<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      iterator = cache.iterator();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      while (iterator.hasNext()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        CachedBlock next = iterator.next();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        if (cache instanceof BucketCache) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        } else {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          continue;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        }<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (refCount != 0) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // Blocks will be with count 3 as they are not yet cleared<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          usedBlocksFound = true;<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>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      // Should not throw exception<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      compactionLatch.countDown();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      latch.countDown();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      for (ScanThread thread : scanThreads) {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        thread.join();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      // by this time all blocks should have been evicted<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      iterator = cache.iterator();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // Since a flush and compaction happened after a scan started<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // we need to ensure that all the original blocks of the compacted file<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // is also removed.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      iterateBlockCache(cache, iterator);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      Result r = table.get(new Get(ROW));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      // The gets would be working on new blocks<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>      iterator = cache.iterator();<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      iterateBlockCache(cache, iterator);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    } finally {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      if (table != null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        table.close();<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><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  @Test<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    HTable table = null;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      latch = new CountDownLatch(1);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      exceptionLatch = new CountDownLatch(1);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      // Create KV that will give you two blocks<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      // Create a table with block size as 1024<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      // get the block cache and region<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      RegionLocator locator = table.getRegionLocator();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          regionName);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      Store store = region.getStores().iterator().next();<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      cacheConf.setEvictOnClose(true);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      // insert data. 2 Rows are added<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      insertData(table);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      // flush the data<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      System.out.println("Flushing cache");<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // Should create one Hfile with 2 blocks<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      region.flush(true);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      // The block would have been decremented for the scan case as it was<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      // wrapped<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // before even the postNext hook gets executed.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      // giving some time for the block to be decremented<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      Thread.sleep(100);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      boolean usedBlocksFound = false;<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      int refCount = 0;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      while (iterator.hasNext()) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        CachedBlock next = iterator.next();<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        if (cache instanceof BucketCache) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        } else {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>          continue;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>        if (refCount != 0) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>          // Blocks will be with count 3<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          usedBlocksFound = true;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      assertTrue(usedBlocksFound);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      exceptionLatch.countDown();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // countdown the latch<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      for (ScanThread thread : scanThreads) {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        thread.join();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      iterator = cache.iterator();<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      usedBlocksFound = false;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      refCount = 0;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      while (iterator.hasNext()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        CachedBlock next = iterator.next();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        if (cache instanceof BucketCache) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        } else {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>          continue;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        if (refCount != 0) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>          // Blocks will be with count 3<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          usedBlocksFound = true;<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>        }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(usedBlocksFound);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      Thread.sleep(5100);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      iterator = cache.iterator();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      refCount = 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      while (iterator.hasNext()) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>        CachedBlock next = iterator.next();<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        if (cache instanceof BucketCache) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        } else {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>          continue;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        assertEquals(0, refCount);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      }<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    } finally {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      if (table != null) {<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>        table.close();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    int refCount;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    while (iterator.hasNext()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      CachedBlock next = iterator.next();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      if (cache instanceof BucketCache) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      } else {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        continue;<a name="line.1169"></a>
 <span class="sourceLineNo">1170</span>      }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    }<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  private static class GetThread extends Thread {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    private final HTable table;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    private final boolean tracker;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    private final boolean multipleCFs;<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      this.table = table;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      this.tracker = tracker;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      this.multipleCFs = multipleCFs;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span><a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    @Override<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    public void run() {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>        initiateGet(table);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      } catch (IOException e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        // do nothing<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    private void initiateGet(HTable table) throws IOException {<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      Get get = new Get(ROW);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      if (tracker) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>        // Change this<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        if (!multipleCFs) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 3));<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 8));<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 9));<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          // Unknown key<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 900));<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>        } else {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          get.addColumn(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3));<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          get.addColumn(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9));<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>          // Unknown key<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 900));<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>        }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      Result r = table.get(get);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      System.out.println(r);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (!tracker) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        if (!multipleCFs) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 3)), data2));<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 8)), data2));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 9)), data2));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        } else {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>          assertTrue(Bytes.equals(<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>              r.getValue(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3)),<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>              data2));<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          assertTrue(Bytes.equals(<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              r.getValue(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8)),<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>              data2));<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          assertTrue(Bytes.equals(<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>              r.getValue(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9)),<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>              data2));<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span><a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  private static class ScanThread extends Thread {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    private final HTable table;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    private final boolean reverse;<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    public ScanThread(HTable table, boolean reverse) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      this.table = table;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      this.reverse = reverse;<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span><a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    @Override<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    public void run() {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      try {<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        initiateScan(table);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      } catch (IOException e) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        // do nothing<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    private void initiateScan(HTable table) throws IOException {<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      Scan scan = new Scan();<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      if (reverse) {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>        scan.setReversed(true);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      ResultScanner resScanner = table.getScanner(scan);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      int i = (reverse ? ROWS.length - 1 : 0);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      boolean resultFound = false;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      for (Result result : resScanner) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        resultFound = true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        System.out.println(result);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        if (!reverse) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          i++;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>        } else {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>          i--;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      assertTrue(resultFound);<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  private void waitForStoreFileCount(Store store, int count, int timeout)<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      throws InterruptedException {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    long start = System.currentTimeMillis();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    while (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      Thread.sleep(100);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    System.out.println("start=" + start + ", now=" + System.currentTimeMillis() + ", cur="<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        + store.getStorefilesCount());<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  private static class CustomScanner implements RegionScanner {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    private RegionScanner delegate;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    public CustomScanner(RegionScanner delegate) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      this.delegate = delegate;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    public boolean next(List&lt;Cell&gt; results) throws IOException {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      return delegate.next(results);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    @Override<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext scannerContext) throws IOException {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return delegate.next(result, scannerContext);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public boolean nextRaw(List&lt;Cell&gt; result) throws IOException {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return delegate.nextRaw(result);<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    public boolean nextRaw(List&lt;Cell&gt; result, ScannerContext context) throws IOException {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      boolean nextRaw = delegate.nextRaw(result, context);<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      if (compactionLatch != null &amp;&amp; compactionLatch.getCount() &gt; 0) {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        try {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          compactionLatch.await();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        } catch (InterruptedException ie) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      if (CustomInnerRegionObserver.throwException.get()) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (exceptionLatch.getCount() &gt; 0) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          try {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            exceptionLatch.await();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          } catch (InterruptedException e) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>          throw new IOException("throw exception");<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        }<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      return nextRaw;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    @Override<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    public void close() throws IOException {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      delegate.close();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    @Override<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    public HRegionInfo getRegionInfo() {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      return delegate.getRegionInfo();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    }<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    @Override<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    public boolean isFilterDone() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return delegate.isFilterDone();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    public boolean reseek(byte[] row) throws IOException {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      return false;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span><a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    public long getMaxResultSize() {<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      return delegate.getMaxResultSize();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    public long getMvccReadPoint() {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      return delegate.getMvccReadPoint();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span><a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    @Override<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    public int getBatch() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      return delegate.getBatch();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    @Override<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    public void shipped() throws IOException {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      this.delegate.shipped();<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>  public static class CustomInnerRegionObserverWrapper extends CustomInnerRegionObserver {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    @Override<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    public RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        Scan scan, RegionScanner s) throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      return new CustomScanner(s);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>  }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  public static class CustomInnerRegionObserver extends BaseRegionObserver {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    static final AtomicLong sleepTime = new AtomicLong(0);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    static final AtomicBoolean slowDownNext = new AtomicBoolean(false);<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    static final AtomicInteger countOfNext = new AtomicInteger(0);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    static final AtomicInteger countOfGets = new AtomicInteger(0);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    static final AtomicBoolean waitForGets = new AtomicBoolean(false);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    static final AtomicBoolean throwException = new AtomicBoolean(false);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    private static final AtomicReference&lt;CountDownLatch&gt; cdl = new AtomicReference&lt;CountDownLatch&gt;(<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        new CountDownLatch(0));<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        InternalScanner s, List&lt;Result&gt; results, int limit, boolean hasMore) throws IOException {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      slowdownCode(e, false);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      if (getLatch != null &amp;&amp; getLatch.getCount() &gt; 0) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>          getLatch.await();<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        } catch (InterruptedException e1) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      return super.postScannerNext(e, s, results, limit, hasMore);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>    public void postGetOp(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Get get,<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        List&lt;Cell&gt; results) throws IOException {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      slowdownCode(e, true);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      super.postGetOp(e, get, results);<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    public static AtomicReference&lt;CountDownLatch&gt; getCdl() {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      return cdl;<a name="line.1416"></a>
+<span class="sourceLineNo">1171</span>      assertEquals(0, refCount);<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  private void insertData(HTable table) throws IOException {<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    Put put = new Put(ROW);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    table.put(put);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    put = new Put(ROW1);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    table.put(put);<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    put = new Put(ROW);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    table.put(put);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span><a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      InterruptedException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    for (ScanThread thread : scanThreads) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      thread.start();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return scanThreads;<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      throws IOException, InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    for (GetThread thread : getThreads) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      thread.start();<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    return getThreads;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      throws IOException, InterruptedException {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      thread.start();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    return multiGetThreads;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span><a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    int counter = NO_OF_THREADS;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      counter = counter - 1;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>        Thread.sleep(100);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    } else {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        Thread.sleep(100);<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    int refCount = 0;<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    while (iterator.hasNext()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      CachedBlock next = iterator.next();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      if (cache instanceof BucketCache) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        continue;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        if (expectOnlyZero) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>          assertTrue(refCount == 0);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>        if (refCount != 0) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>          // Because the scan would have also touched up on these blocks but<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>          // it<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>          // would have touched<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>          // all 3<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>          if (getClosed) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>            // If get has closed only the scan's blocks would be available<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          } else {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>        // Because the get would have also touched up on these blocks but it<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>        // would have touched<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        // upon only 2 additionally<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        if (expectOnlyZero) {<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>          assertTrue(refCount == 0);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        if (refCount != 0) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          if (getLatch == null || wrappedCp) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          } else {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span><a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  private static class MultiGetThread extends Thread {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    private final HTable table;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    public MultiGetThread(HTable table) {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      this.table = table;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    @Override<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    public void run() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      gets.add(new Get(ROW));<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      gets.add(new Get(ROW1));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      try {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        Result[] r = table.get(gets);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      } catch (IOException e) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  private static class GetThread extends Thread {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    private final HTable table;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    private final boolean tracker;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    private final boolean multipleCFs;<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      this.table = table;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      this.tracker = tracker;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      this.multipleCFs = multipleCFs;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    @Override<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    public void run() {<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      try {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        initiateGet(table);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      } catch (IOException e) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>        // do nothing<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      }<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    }<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    private void init

<TRUNCATED>

[24/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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..f21d36e 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">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">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 = "bcn", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.30"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,74 +77,74 @@
 <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>    // 23, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<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>      // 23, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcn__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 getBcn()<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_bcn;<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_bcn;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcn__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_bcn__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">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">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 21, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setFilter(String filter)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 21, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_filter = filter;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_filter__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getFilter()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_filter;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_filter;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getFilter__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_filter__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">122</span>    private boolean m_filter__IsNotDefault;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 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,31 +156,31 @@
 <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 bcn;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<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()).setBcn(p_bcn);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String filter;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setFilter(p_filter);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String 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/736088b3/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..f21d36e 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">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">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 = "bcn", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.30"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,74 +77,74 @@
 <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>    // 23, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<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>      // 23, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcn__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 getBcn()<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_bcn;<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_bcn;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcn__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_bcn__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">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">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 21, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setFilter(String filter)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 21, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_filter = filter;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_filter__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getFilter()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_filter;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_filter;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getFilter__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_filter__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">122</span>    private boolean m_filter__IsNotDefault;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 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,31 +156,31 @@
 <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 bcn;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<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()).setBcn(p_bcn);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String filter;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setFilter(p_filter);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String 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/736088b3/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..f21d36e 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">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">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 = "bcn", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.30"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,74 +77,74 @@
 <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>    // 23, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<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>      // 23, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcn__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 getBcn()<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_bcn;<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_bcn;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcn__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_bcn__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">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">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 21, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setFilter(String filter)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 21, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_filter = filter;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_filter__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getFilter()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_filter;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_filter;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getFilter__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_filter__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">122</span>    private boolean m_filter__IsNotDefault;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 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,31 +156,31 @@
 <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 bcn;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<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()).setBcn(p_bcn);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String filter;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setFilter(p_filter);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String 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/736088b3/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..5038209 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">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">029</span>  private final String bcv;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  private final String bcn;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>  private final String filter;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  private final String format;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  protected static org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData p_implData)<a name="line.33"></a>
 <span class="sourceLineNo">034</span>  {<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    if(! p_implData.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.getBcn__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.setBcn("");<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">043</span>    if(! p_implData.getFilter__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">045</span>      p_implData.setFilter("general");<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">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">057</span>    bcv = p_implData.getBcv();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    bcn = p_implData.getBcn();<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    filter = p_implData.getFilter();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    format = p_implData.getFormat();<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  }<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  <a name="line.62"></a>
 <span class="sourceLineNo">063</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.63"></a>
@@ -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/736088b3/distribution-management.html
----------------------------------------------------------------------
diff --git a/distribution-management.html b/distribution-management.html
index 50e8385..bb30dc2 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 0ad9030..8b32e48 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <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-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index 60e9818..52a4157 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependencies.html b/hbase-annotations/dependencies.html
index 193f677..bfc7737 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-convergence.html b/hbase-annotations/dependency-convergence.html
index 130c7ee..75e7bf7 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-info.html b/hbase-annotations/dependency-info.html
index e6b1bb1..df85eb7 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-management.html b/hbase-annotations/dependency-management.html
index fb31606..795628d 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/distribution-management.html b/hbase-annotations/distribution-management.html
index 76df9d7..136d75d 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/index.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/index.html b/hbase-annotations/index.html
index 3926544..edaa918 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index 14caacf..9fe87cd 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/issue-tracking.html b/hbase-annotations/issue-tracking.html
index 2436ccc..3a115c9 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/license.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/license.html b/hbase-annotations/license.html
index a097706..2df6ed7 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/mail-lists.html b/hbase-annotations/mail-lists.html
index 7e1f855..fa82ff7 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugin-management.html b/hbase-annotations/plugin-management.html
index 406fdff..e0105a5 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugins.html b/hbase-annotations/plugins.html
index 53885b4..a6cba6f 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-info.html b/hbase-annotations/project-info.html
index 553294b..064a366 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-reports.html b/hbase-annotations/project-reports.html
index 80c12ac..443fb2c 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-summary.html b/hbase-annotations/project-summary.html
index bb9e828..a54c782 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/source-repository.html b/hbase-annotations/source-repository.html
index 1c4e6d5..c19e217 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-annotations/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/team-list.html b/hbase-annotations/team-list.html
index ad14129..f11e45b 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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/736088b3/hbase-spark/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-spark/checkstyle.html b/hbase-spark/checkstyle.html
index 55d19d8..d1f6dc0 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-11 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-14 -->
 <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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-11</span>
+        <span id="publishDate">Last Published: 2015-12-14</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>


[05/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html b/xref/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
index 2c2395c..a95b1c1 100644
--- a/xref/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
+++ b/xref/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
@@ -58,479 +58,482 @@
 <a class="jxr_linenumber" name="48" href="#48">48</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> StoreFile.Reader reader;
 <a class="jxr_linenumber" name="49" href="#49">49</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> hfs;
 <a class="jxr_linenumber" name="50" href="#50">50</a>    <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> cur = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="51" href="#51">51</a>  
-<a class="jxr_linenumber" name="52" href="#52">52</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> realSeekDone;
-<a class="jxr_linenumber" name="53" href="#53">53</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> delayedReseek;
-<a class="jxr_linenumber" name="54" href="#54">54</a>    <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> delayedSeekKV;
-<a class="jxr_linenumber" name="55" href="#55">55</a>  
-<a class="jxr_linenumber" name="56" href="#56">56</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> enforceMVCC = false;
-<a class="jxr_linenumber" name="57" href="#57">57</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> hasMVCCInfo = false;
-<a class="jxr_linenumber" name="58" href="#58">58</a>    <em class="jxr_comment">// A flag represents whether could stop skipping KeyValues for MVCC</em>
-<a class="jxr_linenumber" name="59" href="#59">59</a>    <em class="jxr_comment">// if have encountered the next row. Only used for reversed scan</em>
-<a class="jxr_linenumber" name="60" href="#60">60</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> stopSkippingKVsIfNextRow = false;
-<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">static</strong> AtomicLong seekCount;
-<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> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher;
-<a class="jxr_linenumber" name="65" href="#65">65</a>  
-<a class="jxr_linenumber" name="66" href="#66">66</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> readPt;
-<a class="jxr_linenumber" name="67" href="#67">67</a>  
-<a class="jxr_linenumber" name="68" href="#68">68</a>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="69" href="#69">69</a>  <em class="jxr_javadoccomment">   * Implements a {@link KeyValueScanner} on top of the specified {@link HFileScanner}</em>
-<a class="jxr_linenumber" name="70" href="#70">70</a>  <em class="jxr_javadoccomment">   * @param hfs HFile scanner</em>
-<a class="jxr_linenumber" name="71" href="#71">71</a>  <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="72" href="#72">72</a>    <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html">StoreFileScanner</a>(StoreFile.Reader reader, <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> hfs, <strong class="jxr_keyword">boolean</strong> useMVCC,
-<a class="jxr_linenumber" name="73" href="#73">73</a>        <strong class="jxr_keyword">boolean</strong> hasMVCC, <strong class="jxr_keyword">long</strong> readPt) {
-<a class="jxr_linenumber" name="74" href="#74">74</a>      <strong class="jxr_keyword">this</strong>.readPt = readPt;
-<a class="jxr_linenumber" name="75" href="#75">75</a>      <strong class="jxr_keyword">this</strong>.reader = reader;
-<a class="jxr_linenumber" name="76" href="#76">76</a>      <strong class="jxr_keyword">this</strong>.hfs = hfs;
-<a class="jxr_linenumber" name="77" href="#77">77</a>      <strong class="jxr_keyword">this</strong>.enforceMVCC = useMVCC;
-<a class="jxr_linenumber" name="78" href="#78">78</a>      <strong class="jxr_keyword">this</strong>.hasMVCCInfo = hasMVCC;
-<a class="jxr_linenumber" name="79" href="#79">79</a>    }
-<a class="jxr_linenumber" name="80" href="#80">80</a>  
-<a class="jxr_linenumber" name="81" href="#81">81</a>    <strong class="jxr_keyword">boolean</strong> isPrimaryReplica() {
-<a class="jxr_linenumber" name="82" href="#82">82</a>      <strong class="jxr_keyword">return</strong> reader.isPrimaryReplicaReader();
-<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>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="86" href="#86">86</a>  <em class="jxr_javadoccomment">   * Return an array of scanners corresponding to the given</em>
-<a class="jxr_linenumber" name="87" href="#87">87</a>  <em class="jxr_javadoccomment">   * set of store files.</em>
-<a class="jxr_linenumber" name="88" href="#88">88</a>  <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="89" href="#89">89</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
-<a class="jxr_linenumber" name="90" href="#90">90</a>        Collection&lt;StoreFile&gt; files,
-<a class="jxr_linenumber" name="91" href="#91">91</a>        <strong class="jxr_keyword">boolean</strong> cacheBlocks,
-<a class="jxr_linenumber" name="92" href="#92">92</a>        <strong class="jxr_keyword">boolean</strong> usePread, <strong class="jxr_keyword">long</strong> readPt) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="93" href="#93">93</a>      <strong class="jxr_keyword">return</strong> getScannersForStoreFiles(files, cacheBlocks,
-<a class="jxr_linenumber" name="94" href="#94">94</a>                                     usePread, false, false, readPt);
-<a class="jxr_linenumber" name="95" href="#95">95</a>    }
-<a class="jxr_linenumber" name="96" href="#96">96</a>  
-<a class="jxr_linenumber" name="97" href="#97">97</a>    <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="98" href="#98">98</a>  <em class="jxr_javadoccomment">   * Return an array of scanners corresponding to the given set of store files.</em>
-<a class="jxr_linenumber" name="99" href="#99">99</a>  <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="100" href="#100">100</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
-<a class="jxr_linenumber" name="101" href="#101">101</a>       Collection&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks, <strong class="jxr_keyword">boolean</strong> usePread,
-<a class="jxr_linenumber" name="102" href="#102">102</a>       <strong class="jxr_keyword">boolean</strong> isCompaction, <strong class="jxr_keyword">boolean</strong> useDropBehind, <strong class="jxr_keyword">long</strong> readPt) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="103" href="#103">103</a>     <strong class="jxr_keyword">return</strong> getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction,
-<a class="jxr_linenumber" name="104" href="#104">104</a>         useDropBehind, <strong class="jxr_keyword">null</strong>, readPt);
-<a class="jxr_linenumber" name="105" href="#105">105</a>   }
-<a class="jxr_linenumber" name="106" href="#106">106</a> 
-<a class="jxr_linenumber" name="107" href="#107">107</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="108" href="#108">108</a> <em class="jxr_javadoccomment">   * Return an array of scanners corresponding to the given set of store files,</em>
-<a class="jxr_linenumber" name="109" href="#109">109</a> <em class="jxr_javadoccomment">   * And set the ScanQueryMatcher for each store file scanner for further</em>
-<a class="jxr_linenumber" name="110" href="#110">110</a> <em class="jxr_javadoccomment">   * optimization</em>
-<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>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
-<a class="jxr_linenumber" name="113" href="#113">113</a>       Collection&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks, <strong class="jxr_keyword">boolean</strong> usePread,
-<a class="jxr_linenumber" name="114" href="#114">114</a>       <strong class="jxr_keyword">boolean</strong> isCompaction, <strong class="jxr_keyword">boolean</strong> canUseDrop,
-<a class="jxr_linenumber" name="115" href="#115">115</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher, <strong class="jxr_keyword">long</strong> readPt, <strong class="jxr_keyword">boolean</strong> isPrimaryReplica) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="116" href="#116">116</a>     List&lt;StoreFileScanner&gt; scanners = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFileScanner&gt;(
-<a class="jxr_linenumber" name="117" href="#117">117</a>         files.size());
-<a class="jxr_linenumber" name="118" href="#118">118</a>     <strong class="jxr_keyword">for</strong> (StoreFile file : files) {
-<a class="jxr_linenumber" name="119" href="#119">119</a>       StoreFile.Reader r = file.createReader(canUseDrop);
-<a class="jxr_linenumber" name="120" href="#120">120</a>       r.setReplicaStoreFile(isPrimaryReplica);
-<a class="jxr_linenumber" name="121" href="#121">121</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html">StoreFileScanner</a> scanner = r.getStoreFileScanner(cacheBlocks, usePread,
-<a class="jxr_linenumber" name="122" href="#122">122</a>           isCompaction, readPt);
-<a class="jxr_linenumber" name="123" href="#123">123</a>       scanner.setScanQueryMatcher(matcher);
-<a class="jxr_linenumber" name="124" href="#124">124</a>       scanners.add(scanner);
-<a class="jxr_linenumber" name="125" href="#125">125</a>     }
-<a class="jxr_linenumber" name="126" href="#126">126</a>     <strong class="jxr_keyword">return</strong> scanners;
-<a class="jxr_linenumber" name="127" href="#127">127</a>   }
-<a class="jxr_linenumber" name="128" href="#128">128</a> 
-<a class="jxr_linenumber" name="129" href="#129">129</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
-<a class="jxr_linenumber" name="130" href="#130">130</a>     Collection&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks, <strong class="jxr_keyword">boolean</strong> usePread,
-<a class="jxr_linenumber" name="131" href="#131">131</a>     <strong class="jxr_keyword">boolean</strong> isCompaction, <strong class="jxr_keyword">boolean</strong> canUseDrop,
-<a class="jxr_linenumber" name="132" href="#132">132</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher, <strong class="jxr_keyword">long</strong> readPt) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="133" href="#133">133</a>     <strong class="jxr_keyword">return</strong> getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction, canUseDrop,
-<a class="jxr_linenumber" name="134" href="#134">134</a>       matcher, readPt, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="135" href="#135">135</a>   }
-<a class="jxr_linenumber" name="136" href="#136">136</a> 
-<a class="jxr_linenumber" name="137" href="#137">137</a>   <strong class="jxr_keyword">public</strong> String toString() {
-<a class="jxr_linenumber" name="138" href="#138">138</a>     <strong class="jxr_keyword">return</strong> <span class="jxr_string">"StoreFileScanner["</span> + hfs.toString() + <span class="jxr_string">", cur="</span> + cur + <span class="jxr_string">"]"</span>;
-<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>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> peek() {
-<a class="jxr_linenumber" name="142" href="#142">142</a>     <strong class="jxr_keyword">return</strong> cur;
-<a class="jxr_linenumber" name="143" href="#143">143</a>   }
-<a class="jxr_linenumber" name="144" href="#144">144</a> 
-<a class="jxr_linenumber" name="145" href="#145">145</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> next() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="146" href="#146">146</a>     <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> retKey = cur;
-<a class="jxr_linenumber" name="147" href="#147">147</a> 
-<a class="jxr_linenumber" name="148" href="#148">148</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="149" href="#149">149</a>       <em class="jxr_comment">// only seek if we aren't at the end. cur == null implies 'end'.</em>
-<a class="jxr_linenumber" name="150" href="#150">150</a>       <strong class="jxr_keyword">if</strong> (cur != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="151" href="#151">151</a>         hfs.next();
-<a class="jxr_linenumber" name="152" href="#152">152</a>         setCurrentCell(hfs.getCell());
-<a class="jxr_linenumber" name="153" href="#153">153</a>         <strong class="jxr_keyword">if</strong> (hasMVCCInfo || <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded()) {
-<a class="jxr_linenumber" name="154" href="#154">154</a>           skipKVsNewerThanReadpoint();
-<a class="jxr_linenumber" name="155" href="#155">155</a>         }
-<a class="jxr_linenumber" name="156" href="#156">156</a>       }
-<a class="jxr_linenumber" name="157" href="#157">157</a>     } <strong class="jxr_keyword">catch</strong> (FileNotFoundException e) {
-<a class="jxr_linenumber" name="158" href="#158">158</a>       <strong class="jxr_keyword">throw</strong> e;
-<a class="jxr_linenumber" name="159" href="#159">159</a>     } <strong class="jxr_keyword">catch</strong>(IOException e) {
-<a class="jxr_linenumber" name="160" href="#160">160</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Could not iterate "</span> + <strong class="jxr_keyword">this</strong>, e);
-<a class="jxr_linenumber" name="161" href="#161">161</a>     }
-<a class="jxr_linenumber" name="162" href="#162">162</a>     <strong class="jxr_keyword">return</strong> retKey;
-<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>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> seek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> key) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="166" href="#166">166</a>     <strong class="jxr_keyword">if</strong> (seekCount != <strong class="jxr_keyword">null</strong>) seekCount.incrementAndGet();
-<a class="jxr_linenumber" name="167" href="#167">167</a> 
-<a class="jxr_linenumber" name="168" href="#168">168</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="169" href="#169">169</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="170" href="#170">170</a>         <strong class="jxr_keyword">if</strong>(!seekAtOrAfter(hfs, key)) {
-<a class="jxr_linenumber" name="171" href="#171">171</a>           <strong class="jxr_keyword">this</strong>.cur = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="172" href="#172">172</a>           <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="173" href="#173">173</a>         }
-<a class="jxr_linenumber" name="174" href="#174">174</a> 
-<a class="jxr_linenumber" name="175" href="#175">175</a>         setCurrentCell(hfs.getCell());
-<a class="jxr_linenumber" name="176" href="#176">176</a> 
-<a class="jxr_linenumber" name="177" href="#177">177</a>         <strong class="jxr_keyword">if</strong> (!hasMVCCInfo &amp;&amp; <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded()) {
-<a class="jxr_linenumber" name="178" href="#178">178</a>           <strong class="jxr_keyword">return</strong> skipKVsNewerThanReadpoint();
-<a class="jxr_linenumber" name="179" href="#179">179</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="180" href="#180">180</a>           <strong class="jxr_keyword">return</strong> !hasMVCCInfo ? <strong class="jxr_keyword">true</strong> : skipKVsNewerThanReadpoint();
-<a class="jxr_linenumber" name="181" href="#181">181</a>         }
-<a class="jxr_linenumber" name="182" href="#182">182</a>       } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="183" href="#183">183</a>         realSeekDone = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="184" href="#184">184</a>       }
-<a class="jxr_linenumber" name="185" href="#185">185</a>     } <strong class="jxr_keyword">catch</strong> (FileNotFoundException e) {
-<a class="jxr_linenumber" name="186" href="#186">186</a>       <strong class="jxr_keyword">throw</strong> e;
-<a class="jxr_linenumber" name="187" href="#187">187</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="188" href="#188">188</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Could not seek "</span> + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" to key "</span> + key, ioe);
-<a class="jxr_linenumber" name="189" href="#189">189</a>     }
-<a class="jxr_linenumber" name="190" href="#190">190</a>   }
-<a class="jxr_linenumber" name="191" href="#191">191</a> 
-<a class="jxr_linenumber" name="192" href="#192">192</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> reseek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> key) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="193" href="#193">193</a>     <strong class="jxr_keyword">if</strong> (seekCount != <strong class="jxr_keyword">null</strong>) seekCount.incrementAndGet();
-<a class="jxr_linenumber" name="194" href="#194">194</a> 
-<a class="jxr_linenumber" name="195" href="#195">195</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="196" href="#196">196</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="197" href="#197">197</a>         <strong class="jxr_keyword">if</strong> (!reseekAtOrAfter(hfs, key)) {
-<a class="jxr_linenumber" name="198" href="#198">198</a>           <strong class="jxr_keyword">this</strong>.cur = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="199" href="#199">199</a>           <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="200" href="#200">200</a>         }
-<a class="jxr_linenumber" name="201" href="#201">201</a>         setCurrentCell(hfs.getCell());
-<a class="jxr_linenumber" name="202" href="#202">202</a> 
-<a class="jxr_linenumber" name="203" href="#203">203</a>         <strong class="jxr_keyword">if</strong> (!hasMVCCInfo &amp;&amp; <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded()) {
-<a class="jxr_linenumber" name="204" href="#204">204</a>           <strong class="jxr_keyword">return</strong> skipKVsNewerThanReadpoint();
-<a class="jxr_linenumber" name="205" href="#205">205</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="206" href="#206">206</a>           <strong class="jxr_keyword">return</strong> !hasMVCCInfo ? <strong class="jxr_keyword">true</strong> : skipKVsNewerThanReadpoint();
-<a class="jxr_linenumber" name="207" href="#207">207</a>         }
-<a class="jxr_linenumber" name="208" href="#208">208</a>       } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="209" href="#209">209</a>         realSeekDone = <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>     } <strong class="jxr_keyword">catch</strong> (FileNotFoundException e) {
-<a class="jxr_linenumber" name="212" href="#212">212</a>       <strong class="jxr_keyword">throw</strong> e;
-<a class="jxr_linenumber" name="213" href="#213">213</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="214" href="#214">214</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Could not reseek "</span> + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" to key "</span> + key,
-<a class="jxr_linenumber" name="215" href="#215">215</a>           ioe);
-<a class="jxr_linenumber" name="216" href="#216">216</a>     }
-<a class="jxr_linenumber" name="217" href="#217">217</a>   }
-<a class="jxr_linenumber" name="218" href="#218">218</a> 
-<a class="jxr_linenumber" name="219" href="#219">219</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> setCurrentCell(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> newVal) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="220" href="#220">220</a>     <strong class="jxr_keyword">this</strong>.cur = newVal;
-<a class="jxr_linenumber" name="221" href="#221">221</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.cur != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded() &amp;&amp; !<strong class="jxr_keyword">this</strong>.reader.isSkipResetSeqId()) {
-<a class="jxr_linenumber" name="222" href="#222">222</a>       CellUtil.setSequenceId(cur, <strong class="jxr_keyword">this</strong>.reader.getSequenceID());
-<a class="jxr_linenumber" name="223" href="#223">223</a>     }
-<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>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> skipKVsNewerThanReadpoint() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="227" href="#227">227</a>     <em class="jxr_comment">// We want to ignore all key-values that are newer than our current</em>
-<a class="jxr_linenumber" name="228" href="#228">228</a>     <em class="jxr_comment">// readPoint</em>
-<a class="jxr_linenumber" name="229" href="#229">229</a>     <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> startKV = cur;
-<a class="jxr_linenumber" name="230" href="#230">230</a>     <strong class="jxr_keyword">while</strong>(enforceMVCC
-<a class="jxr_linenumber" name="231" href="#231">231</a>         &amp;&amp; cur != <strong class="jxr_keyword">null</strong>
-<a class="jxr_linenumber" name="232" href="#232">232</a>         &amp;&amp; (cur.getSequenceId() &gt; readPt)) {
-<a class="jxr_linenumber" name="233" href="#233">233</a>       hfs.next();
-<a class="jxr_linenumber" name="234" href="#234">234</a>       setCurrentCell(hfs.getCell());
-<a class="jxr_linenumber" name="235" href="#235">235</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.stopSkippingKVsIfNextRow
-<a class="jxr_linenumber" name="236" href="#236">236</a>           &amp;&amp; getComparator().compareRows(cur, startKV) &gt; 0) {
-<a class="jxr_linenumber" name="237" href="#237">237</a>         <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="238" href="#238">238</a>       }
-<a class="jxr_linenumber" name="239" href="#239">239</a>     }
-<a class="jxr_linenumber" name="240" href="#240">240</a> 
-<a class="jxr_linenumber" name="241" href="#241">241</a>     <strong class="jxr_keyword">if</strong> (cur == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="242" href="#242">242</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="243" href="#243">243</a>     }
-<a class="jxr_linenumber" name="244" href="#244">244</a> 
-<a class="jxr_linenumber" name="245" href="#245">245</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<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>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> close() {
-<a class="jxr_linenumber" name="249" href="#249">249</a>     cur = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="250" href="#250">250</a>     <strong class="jxr_keyword">this</strong>.hfs.close();
-<a class="jxr_linenumber" name="251" href="#251">251</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.reader != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="252" href="#252">252</a>       <strong class="jxr_keyword">this</strong>.reader.decrementRefCount();
-<a class="jxr_linenumber" name="253" href="#253">253</a>     }
-<a class="jxr_linenumber" name="254" href="#254">254</a>   }
-<a class="jxr_linenumber" name="255" href="#255">255</a> 
-<a class="jxr_linenumber" name="256" href="#256">256</a>   <em class="jxr_javadoccomment">/**</em>
-<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">   * @param s</em>
-<a class="jxr_linenumber" name="259" href="#259">259</a> <em class="jxr_javadoccomment">   * @param k</em>
-<a class="jxr_linenumber" name="260" href="#260">260</a> <em class="jxr_javadoccomment">   * @return false if not found or if k is after the end.</em>
-<a class="jxr_linenumber" name="261" href="#261">261</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="262" href="#262">262</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="263" href="#263">263</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> seekAtOrAfter(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> s, <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> k)
-<a class="jxr_linenumber" name="264" href="#264">264</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="265" href="#265">265</a>     <strong class="jxr_keyword">int</strong> result = s.seekTo(k);
-<a class="jxr_linenumber" name="266" href="#266">266</a>     <strong class="jxr_keyword">if</strong>(result &lt; 0) {
-<a class="jxr_linenumber" name="267" href="#267">267</a>       <strong class="jxr_keyword">if</strong> (result == HConstants.INDEX_KEY_MAGIC) {
-<a class="jxr_linenumber" name="268" href="#268">268</a>         <em class="jxr_comment">// using faked key</em>
-<a class="jxr_linenumber" name="269" href="#269">269</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="270" href="#270">270</a>       }
-<a class="jxr_linenumber" name="271" href="#271">271</a>       <em class="jxr_comment">// Passed KV is smaller than first KV in file, work from start of file</em>
-<a class="jxr_linenumber" name="272" href="#272">272</a>       <strong class="jxr_keyword">return</strong> s.seekTo();
-<a class="jxr_linenumber" name="273" href="#273">273</a>     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong>(result &gt; 0) {
-<a class="jxr_linenumber" name="274" href="#274">274</a>       <em class="jxr_comment">// Passed KV is larger than current KV in file, if there is a next</em>
-<a class="jxr_linenumber" name="275" href="#275">275</a>       <em class="jxr_comment">// it is the "after", if not then this scanner is done.</em>
-<a class="jxr_linenumber" name="276" href="#276">276</a>       <strong class="jxr_keyword">return</strong> s.next();
-<a class="jxr_linenumber" name="277" href="#277">277</a>     }
-<a class="jxr_linenumber" name="278" href="#278">278</a>     <em class="jxr_comment">// Seeked to the exact key</em>
-<a class="jxr_linenumber" name="279" href="#279">279</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</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">static</strong> <strong class="jxr_keyword">boolean</strong> reseekAtOrAfter(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> s, <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> k)
-<a class="jxr_linenumber" name="283" href="#283">283</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="284" href="#284">284</a>     <em class="jxr_comment">//This function is similar to seekAtOrAfter function</em>
-<a class="jxr_linenumber" name="285" href="#285">285</a>     <strong class="jxr_keyword">int</strong> result = s.reseekTo(k);
-<a class="jxr_linenumber" name="286" href="#286">286</a>     <strong class="jxr_keyword">if</strong> (result &lt;= 0) {
-<a class="jxr_linenumber" name="287" href="#287">287</a>       <strong class="jxr_keyword">if</strong> (result == HConstants.INDEX_KEY_MAGIC) {
-<a class="jxr_linenumber" name="288" href="#288">288</a>         <em class="jxr_comment">// using faked key</em>
-<a class="jxr_linenumber" name="289" href="#289">289</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="290" href="#290">290</a>       }
-<a class="jxr_linenumber" name="291" href="#291">291</a>       <em class="jxr_comment">// If up to now scanner is not seeked yet, this means passed KV is smaller</em>
-<a class="jxr_linenumber" name="292" href="#292">292</a>       <em class="jxr_comment">// than first KV in file, and it is the first time we seek on this file.</em>
-<a class="jxr_linenumber" name="293" href="#293">293</a>       <em class="jxr_comment">// So we also need to work from the start of file.</em>
-<a class="jxr_linenumber" name="294" href="#294">294</a>       <strong class="jxr_keyword">if</strong> (!s.isSeeked()) {
-<a class="jxr_linenumber" name="295" href="#295">295</a>         <strong class="jxr_keyword">return</strong>  s.seekTo();
-<a class="jxr_linenumber" name="296" href="#296">296</a>       }
-<a class="jxr_linenumber" name="297" href="#297">297</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="298" href="#298">298</a>     }
-<a class="jxr_linenumber" name="299" href="#299">299</a>     <em class="jxr_comment">// passed KV is larger than current KV in file, if there is a next</em>
-<a class="jxr_linenumber" name="300" href="#300">300</a>     <em class="jxr_comment">// it is after, if not then this scanner is done.</em>
-<a class="jxr_linenumber" name="301" href="#301">301</a>     <strong class="jxr_keyword">return</strong> s.next();
-<a class="jxr_linenumber" name="302" href="#302">302</a>   }
-<a class="jxr_linenumber" name="303" href="#303">303</a> 
-<a class="jxr_linenumber" name="304" href="#304">304</a>   @Override
-<a class="jxr_linenumber" name="305" href="#305">305</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSequenceID() {
-<a class="jxr_linenumber" name="306" href="#306">306</a>     <strong class="jxr_keyword">return</strong> reader.getSequenceID();
-<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">   * Pretend we have done a seek but don't do it yet, if possible. The hope is</em>
-<a class="jxr_linenumber" name="311" href="#311">311</a> <em class="jxr_javadoccomment">   * that we find requested columns in more recent files and won't have to seek</em>
-<a class="jxr_linenumber" name="312" href="#312">312</a> <em class="jxr_javadoccomment">   * in older files. Creates a fake key/value with the given row/column and the</em>
-<a class="jxr_linenumber" name="313" href="#313">313</a> <em class="jxr_javadoccomment">   * highest (most recent) possible timestamp we might get from this file. When</em>
-<a class="jxr_linenumber" name="314" href="#314">314</a> <em class="jxr_javadoccomment">   * users of such "lazy scanner" need to know the next KV precisely (e.g. when</em>
-<a class="jxr_linenumber" name="315" href="#315">315</a> <em class="jxr_javadoccomment">   * this scanner is at the top of the heap), they run {@link #enforceSeek()}.</em>
-<a class="jxr_linenumber" name="316" href="#316">316</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
-<a class="jxr_linenumber" name="317" href="#317">317</a> <em class="jxr_javadoccomment">   * Note that this function does guarantee that the current KV of this scanner</em>
-<a class="jxr_linenumber" name="318" href="#318">318</a> <em class="jxr_javadoccomment">   * will be advanced to at least the given KV. Because of this, it does have</em>
-<a class="jxr_linenumber" name="319" href="#319">319</a> <em class="jxr_javadoccomment">   * to do a real seek in cases when the seek timestamp is older than the</em>
-<a class="jxr_linenumber" name="320" href="#320">320</a> <em class="jxr_javadoccomment">   * highest timestamp of the file, e.g. when we are trying to seek to the next</em>
-<a class="jxr_linenumber" name="321" href="#321">321</a> <em class="jxr_javadoccomment">   * row/column and use OLDEST_TIMESTAMP in the seek key.</em>
-<a class="jxr_linenumber" name="322" href="#322">322</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="323" href="#323">323</a>   @Override
-<a class="jxr_linenumber" name="324" href="#324">324</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> requestSeek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> kv, <strong class="jxr_keyword">boolean</strong> forward, <strong class="jxr_keyword">boolean</strong> useBloom)
-<a class="jxr_linenumber" name="325" href="#325">325</a>       <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="326" href="#326">326</a>     <strong class="jxr_keyword">if</strong> (kv.getFamilyLength() == 0) {
-<a class="jxr_linenumber" name="327" href="#327">327</a>       useBloom = false;
-<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>     <strong class="jxr_keyword">boolean</strong> haveToSeek = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="331" href="#331">331</a>     <strong class="jxr_keyword">if</strong> (useBloom) {
-<a class="jxr_linenumber" name="332" href="#332">332</a>       <em class="jxr_comment">// check ROWCOL Bloom filter first.</em>
-<a class="jxr_linenumber" name="333" href="#333">333</a>       <strong class="jxr_keyword">if</strong> (reader.getBloomFilterType() == BloomType.ROWCOL) {
-<a class="jxr_linenumber" name="334" href="#334">334</a>         haveToSeek = reader.passesGeneralRowColBloomFilter(kv);
-<a class="jxr_linenumber" name="335" href="#335">335</a>       } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.matcher != <strong class="jxr_keyword">null</strong> &amp;&amp; !matcher.hasNullColumnInQuery() &amp;&amp;
-<a class="jxr_linenumber" name="336" href="#336">336</a>           ((CellUtil.isDeleteFamily(kv) || CellUtil.isDeleteFamilyVersion(kv)))) {
-<a class="jxr_linenumber" name="337" href="#337">337</a>         <em class="jxr_comment">// if there is no such delete family kv in the store file,</em>
-<a class="jxr_linenumber" name="338" href="#338">338</a>         <em class="jxr_comment">// then no need to seek.</em>
-<a class="jxr_linenumber" name="339" href="#339">339</a>         haveToSeek = reader.passesDeleteFamilyBloomFilter(kv.getRowArray(),
-<a class="jxr_linenumber" name="340" href="#340">340</a>             kv.getRowOffset(), kv.getRowLength());
-<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> 
-<a class="jxr_linenumber" name="344" href="#344">344</a>     delayedReseek = forward;
-<a class="jxr_linenumber" name="345" href="#345">345</a>     delayedSeekKV = kv;
+<a class="jxr_linenumber" name="51" href="#51">51</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> closed = false;
+<a class="jxr_linenumber" name="52" href="#52">52</a>  
+<a class="jxr_linenumber" name="53" href="#53">53</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> realSeekDone;
+<a class="jxr_linenumber" name="54" href="#54">54</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> delayedReseek;
+<a class="jxr_linenumber" name="55" href="#55">55</a>    <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> delayedSeekKV;
+<a class="jxr_linenumber" name="56" href="#56">56</a>  
+<a class="jxr_linenumber" name="57" href="#57">57</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> enforceMVCC = false;
+<a class="jxr_linenumber" name="58" href="#58">58</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> hasMVCCInfo = false;
+<a class="jxr_linenumber" name="59" href="#59">59</a>    <em class="jxr_comment">// A flag represents whether could stop skipping KeyValues for MVCC</em>
+<a class="jxr_linenumber" name="60" href="#60">60</a>    <em class="jxr_comment">// if have encountered the next row. Only used for reversed scan</em>
+<a class="jxr_linenumber" name="61" href="#61">61</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> stopSkippingKVsIfNextRow = false;
+<a class="jxr_linenumber" name="62" href="#62">62</a>  
+<a class="jxr_linenumber" name="63" href="#63">63</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> AtomicLong seekCount;
+<a class="jxr_linenumber" name="64" href="#64">64</a>  
+<a class="jxr_linenumber" name="65" href="#65">65</a>    <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher;
+<a class="jxr_linenumber" name="66" href="#66">66</a>  
+<a class="jxr_linenumber" name="67" href="#67">67</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> readPt;
+<a class="jxr_linenumber" name="68" href="#68">68</a>  
+<a class="jxr_linenumber" name="69" href="#69">69</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="70" href="#70">70</a>  <em class="jxr_javadoccomment">   * Implements a {@link KeyValueScanner} on top of the specified {@link HFileScanner}</em>
+<a class="jxr_linenumber" name="71" href="#71">71</a>  <em class="jxr_javadoccomment">   * @param hfs HFile scanner</em>
+<a class="jxr_linenumber" name="72" href="#72">72</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="73" href="#73">73</a>    <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html">StoreFileScanner</a>(StoreFile.Reader reader, <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> hfs, <strong class="jxr_keyword">boolean</strong> useMVCC,
+<a class="jxr_linenumber" name="74" href="#74">74</a>        <strong class="jxr_keyword">boolean</strong> hasMVCC, <strong class="jxr_keyword">long</strong> readPt) {
+<a class="jxr_linenumber" name="75" href="#75">75</a>      <strong class="jxr_keyword">this</strong>.readPt = readPt;
+<a class="jxr_linenumber" name="76" href="#76">76</a>      <strong class="jxr_keyword">this</strong>.reader = reader;
+<a class="jxr_linenumber" name="77" href="#77">77</a>      <strong class="jxr_keyword">this</strong>.hfs = hfs;
+<a class="jxr_linenumber" name="78" href="#78">78</a>      <strong class="jxr_keyword">this</strong>.enforceMVCC = useMVCC;
+<a class="jxr_linenumber" name="79" href="#79">79</a>      <strong class="jxr_keyword">this</strong>.hasMVCCInfo = hasMVCC;
+<a class="jxr_linenumber" name="80" href="#80">80</a>    }
+<a class="jxr_linenumber" name="81" href="#81">81</a>  
+<a class="jxr_linenumber" name="82" href="#82">82</a>    <strong class="jxr_keyword">boolean</strong> isPrimaryReplica() {
+<a class="jxr_linenumber" name="83" href="#83">83</a>      <strong class="jxr_keyword">return</strong> reader.isPrimaryReplicaReader();
+<a class="jxr_linenumber" name="84" href="#84">84</a>    }
+<a class="jxr_linenumber" name="85" href="#85">85</a>  
+<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>  <em class="jxr_javadoccomment">   * Return an array of scanners corresponding to the given</em>
+<a class="jxr_linenumber" name="88" href="#88">88</a>  <em class="jxr_javadoccomment">   * set of store files.</em>
+<a class="jxr_linenumber" name="89" href="#89">89</a>  <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="90" href="#90">90</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
+<a class="jxr_linenumber" name="91" href="#91">91</a>        Collection&lt;StoreFile&gt; files,
+<a class="jxr_linenumber" name="92" href="#92">92</a>        <strong class="jxr_keyword">boolean</strong> cacheBlocks,
+<a class="jxr_linenumber" name="93" href="#93">93</a>        <strong class="jxr_keyword">boolean</strong> usePread, <strong class="jxr_keyword">long</strong> readPt) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="94" href="#94">94</a>      <strong class="jxr_keyword">return</strong> getScannersForStoreFiles(files, cacheBlocks,
+<a class="jxr_linenumber" name="95" href="#95">95</a>                                     usePread, false, false, readPt);
+<a class="jxr_linenumber" name="96" href="#96">96</a>    }
+<a class="jxr_linenumber" name="97" href="#97">97</a>  
+<a class="jxr_linenumber" name="98" href="#98">98</a>    <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="99" href="#99">99</a>  <em class="jxr_javadoccomment">   * Return an array of scanners corresponding to the given set of store files.</em>
+<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>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
+<a class="jxr_linenumber" name="102" href="#102">102</a>       Collection&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks, <strong class="jxr_keyword">boolean</strong> usePread,
+<a class="jxr_linenumber" name="103" href="#103">103</a>       <strong class="jxr_keyword">boolean</strong> isCompaction, <strong class="jxr_keyword">boolean</strong> useDropBehind, <strong class="jxr_keyword">long</strong> readPt) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="104" href="#104">104</a>     <strong class="jxr_keyword">return</strong> getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction,
+<a class="jxr_linenumber" name="105" href="#105">105</a>         useDropBehind, <strong class="jxr_keyword">null</strong>, readPt);
+<a class="jxr_linenumber" name="106" href="#106">106</a>   }
+<a class="jxr_linenumber" name="107" href="#107">107</a> 
+<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> <em class="jxr_javadoccomment">   * Return an array of scanners corresponding to the given set of store files,</em>
+<a class="jxr_linenumber" name="110" href="#110">110</a> <em class="jxr_javadoccomment">   * And set the ScanQueryMatcher for each store file scanner for further</em>
+<a class="jxr_linenumber" name="111" href="#111">111</a> <em class="jxr_javadoccomment">   * optimization</em>
+<a class="jxr_linenumber" name="112" href="#112">112</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="113" href="#113">113</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
+<a class="jxr_linenumber" name="114" href="#114">114</a>       Collection&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks, <strong class="jxr_keyword">boolean</strong> usePread,
+<a class="jxr_linenumber" name="115" href="#115">115</a>       <strong class="jxr_keyword">boolean</strong> isCompaction, <strong class="jxr_keyword">boolean</strong> canUseDrop,
+<a class="jxr_linenumber" name="116" href="#116">116</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher, <strong class="jxr_keyword">long</strong> readPt, <strong class="jxr_keyword">boolean</strong> isPrimaryReplica) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="117" href="#117">117</a>     List&lt;StoreFileScanner&gt; scanners = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFileScanner&gt;(
+<a class="jxr_linenumber" name="118" href="#118">118</a>         files.size());
+<a class="jxr_linenumber" name="119" href="#119">119</a>     <strong class="jxr_keyword">for</strong> (StoreFile file : files) {
+<a class="jxr_linenumber" name="120" href="#120">120</a>       StoreFile.Reader r = file.createReader(canUseDrop);
+<a class="jxr_linenumber" name="121" href="#121">121</a>       r.setReplicaStoreFile(isPrimaryReplica);
+<a class="jxr_linenumber" name="122" href="#122">122</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html">StoreFileScanner</a> scanner = r.getStoreFileScanner(cacheBlocks, usePread,
+<a class="jxr_linenumber" name="123" href="#123">123</a>           isCompaction, readPt);
+<a class="jxr_linenumber" name="124" href="#124">124</a>       scanner.setScanQueryMatcher(matcher);
+<a class="jxr_linenumber" name="125" href="#125">125</a>       scanners.add(scanner);
+<a class="jxr_linenumber" name="126" href="#126">126</a>     }
+<a class="jxr_linenumber" name="127" href="#127">127</a>     <strong class="jxr_keyword">return</strong> scanners;
+<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>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;StoreFileScanner&gt; getScannersForStoreFiles(
+<a class="jxr_linenumber" name="131" href="#131">131</a>     Collection&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks, <strong class="jxr_keyword">boolean</strong> usePread,
+<a class="jxr_linenumber" name="132" href="#132">132</a>     <strong class="jxr_keyword">boolean</strong> isCompaction, <strong class="jxr_keyword">boolean</strong> canUseDrop,
+<a class="jxr_linenumber" name="133" href="#133">133</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher, <strong class="jxr_keyword">long</strong> readPt) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="134" href="#134">134</a>     <strong class="jxr_keyword">return</strong> getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction, canUseDrop,
+<a class="jxr_linenumber" name="135" href="#135">135</a>       matcher, readPt, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="136" href="#136">136</a>   }
+<a class="jxr_linenumber" name="137" href="#137">137</a> 
+<a class="jxr_linenumber" name="138" href="#138">138</a>   <strong class="jxr_keyword">public</strong> String toString() {
+<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">return</strong> <span class="jxr_string">"StoreFileScanner["</span> + hfs.toString() + <span class="jxr_string">", cur="</span> + cur + <span class="jxr_string">"]"</span>;
+<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>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> peek() {
+<a class="jxr_linenumber" name="143" href="#143">143</a>     <strong class="jxr_keyword">return</strong> cur;
+<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>   <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> next() <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="147" href="#147">147</a>     <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> retKey = cur;
+<a class="jxr_linenumber" name="148" href="#148">148</a> 
+<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>       <em class="jxr_comment">// only seek if we aren't at the end. cur == null implies 'end'.</em>
+<a class="jxr_linenumber" name="151" href="#151">151</a>       <strong class="jxr_keyword">if</strong> (cur != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="152" href="#152">152</a>         hfs.next();
+<a class="jxr_linenumber" name="153" href="#153">153</a>         setCurrentCell(hfs.getCell());
+<a class="jxr_linenumber" name="154" href="#154">154</a>         <strong class="jxr_keyword">if</strong> (hasMVCCInfo || <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded()) {
+<a class="jxr_linenumber" name="155" href="#155">155</a>           skipKVsNewerThanReadpoint();
+<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">catch</strong> (FileNotFoundException e) {
+<a class="jxr_linenumber" name="159" href="#159">159</a>       <strong class="jxr_keyword">throw</strong> e;
+<a class="jxr_linenumber" name="160" href="#160">160</a>     } <strong class="jxr_keyword">catch</strong>(IOException e) {
+<a class="jxr_linenumber" name="161" href="#161">161</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Could not iterate "</span> + <strong class="jxr_keyword">this</strong>, e);
+<a class="jxr_linenumber" name="162" href="#162">162</a>     }
+<a class="jxr_linenumber" name="163" href="#163">163</a>     <strong class="jxr_keyword">return</strong> retKey;
+<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>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> seek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> key) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="167" href="#167">167</a>     <strong class="jxr_keyword">if</strong> (seekCount != <strong class="jxr_keyword">null</strong>) seekCount.incrementAndGet();
+<a class="jxr_linenumber" name="168" href="#168">168</a> 
+<a class="jxr_linenumber" name="169" href="#169">169</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="170" href="#170">170</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="171" href="#171">171</a>         <strong class="jxr_keyword">if</strong>(!seekAtOrAfter(hfs, key)) {
+<a class="jxr_linenumber" name="172" href="#172">172</a>           <strong class="jxr_keyword">this</strong>.cur = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="173" href="#173">173</a>           <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="174" href="#174">174</a>         }
+<a class="jxr_linenumber" name="175" href="#175">175</a> 
+<a class="jxr_linenumber" name="176" href="#176">176</a>         setCurrentCell(hfs.getCell());
+<a class="jxr_linenumber" name="177" href="#177">177</a> 
+<a class="jxr_linenumber" name="178" href="#178">178</a>         <strong class="jxr_keyword">if</strong> (!hasMVCCInfo &amp;&amp; <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded()) {
+<a class="jxr_linenumber" name="179" href="#179">179</a>           <strong class="jxr_keyword">return</strong> skipKVsNewerThanReadpoint();
+<a class="jxr_linenumber" name="180" href="#180">180</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="181" href="#181">181</a>           <strong class="jxr_keyword">return</strong> !hasMVCCInfo ? <strong class="jxr_keyword">true</strong> : skipKVsNewerThanReadpoint();
+<a class="jxr_linenumber" name="182" href="#182">182</a>         }
+<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>         realSeekDone = <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">catch</strong> (FileNotFoundException e) {
+<a class="jxr_linenumber" name="187" href="#187">187</a>       <strong class="jxr_keyword">throw</strong> e;
+<a class="jxr_linenumber" name="188" href="#188">188</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
+<a class="jxr_linenumber" name="189" href="#189">189</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Could not seek "</span> + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" to key "</span> + key, ioe);
+<a class="jxr_linenumber" name="190" href="#190">190</a>     }
+<a class="jxr_linenumber" name="191" href="#191">191</a>   }
+<a class="jxr_linenumber" name="192" href="#192">192</a> 
+<a class="jxr_linenumber" name="193" href="#193">193</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> reseek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> key) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="194" href="#194">194</a>     <strong class="jxr_keyword">if</strong> (seekCount != <strong class="jxr_keyword">null</strong>) seekCount.incrementAndGet();
+<a class="jxr_linenumber" name="195" href="#195">195</a> 
+<a class="jxr_linenumber" name="196" href="#196">196</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="197" href="#197">197</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="198" href="#198">198</a>         <strong class="jxr_keyword">if</strong> (!reseekAtOrAfter(hfs, key)) {
+<a class="jxr_linenumber" name="199" href="#199">199</a>           <strong class="jxr_keyword">this</strong>.cur = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="200" href="#200">200</a>           <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="201" href="#201">201</a>         }
+<a class="jxr_linenumber" name="202" href="#202">202</a>         setCurrentCell(hfs.getCell());
+<a class="jxr_linenumber" name="203" href="#203">203</a> 
+<a class="jxr_linenumber" name="204" href="#204">204</a>         <strong class="jxr_keyword">if</strong> (!hasMVCCInfo &amp;&amp; <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded()) {
+<a class="jxr_linenumber" name="205" href="#205">205</a>           <strong class="jxr_keyword">return</strong> skipKVsNewerThanReadpoint();
+<a class="jxr_linenumber" name="206" href="#206">206</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="207" href="#207">207</a>           <strong class="jxr_keyword">return</strong> !hasMVCCInfo ? <strong class="jxr_keyword">true</strong> : skipKVsNewerThanReadpoint();
+<a class="jxr_linenumber" name="208" href="#208">208</a>         }
+<a class="jxr_linenumber" name="209" href="#209">209</a>       } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="210" href="#210">210</a>         realSeekDone = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="211" href="#211">211</a>       }
+<a class="jxr_linenumber" name="212" href="#212">212</a>     } <strong class="jxr_keyword">catch</strong> (FileNotFoundException e) {
+<a class="jxr_linenumber" name="213" href="#213">213</a>       <strong class="jxr_keyword">throw</strong> e;
+<a class="jxr_linenumber" name="214" href="#214">214</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
+<a class="jxr_linenumber" name="215" href="#215">215</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Could not reseek "</span> + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" to key "</span> + key,
+<a class="jxr_linenumber" name="216" href="#216">216</a>           ioe);
+<a class="jxr_linenumber" name="217" href="#217">217</a>     }
+<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">protected</strong> <strong class="jxr_keyword">void</strong> setCurrentCell(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> newVal) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="221" href="#221">221</a>     <strong class="jxr_keyword">this</strong>.cur = newVal;
+<a class="jxr_linenumber" name="222" href="#222">222</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.cur != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.reader.isBulkLoaded() &amp;&amp; !<strong class="jxr_keyword">this</strong>.reader.isSkipResetSeqId()) {
+<a class="jxr_linenumber" name="223" href="#223">223</a>       CellUtil.setSequenceId(cur, <strong class="jxr_keyword">this</strong>.reader.getSequenceID());
+<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>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> skipKVsNewerThanReadpoint() <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="228" href="#228">228</a>     <em class="jxr_comment">// We want to ignore all key-values that are newer than our current</em>
+<a class="jxr_linenumber" name="229" href="#229">229</a>     <em class="jxr_comment">// readPoint</em>
+<a class="jxr_linenumber" name="230" href="#230">230</a>     <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> startKV = cur;
+<a class="jxr_linenumber" name="231" href="#231">231</a>     <strong class="jxr_keyword">while</strong>(enforceMVCC
+<a class="jxr_linenumber" name="232" href="#232">232</a>         &amp;&amp; cur != <strong class="jxr_keyword">null</strong>
+<a class="jxr_linenumber" name="233" href="#233">233</a>         &amp;&amp; (cur.getSequenceId() &gt; readPt)) {
+<a class="jxr_linenumber" name="234" href="#234">234</a>       hfs.next();
+<a class="jxr_linenumber" name="235" href="#235">235</a>       setCurrentCell(hfs.getCell());
+<a class="jxr_linenumber" name="236" href="#236">236</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.stopSkippingKVsIfNextRow
+<a class="jxr_linenumber" name="237" href="#237">237</a>           &amp;&amp; getComparator().compareRows(cur, startKV) &gt; 0) {
+<a class="jxr_linenumber" name="238" href="#238">238</a>         <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="239" href="#239">239</a>       }
+<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> (cur == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="243" href="#243">243</a>       <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="244" href="#244">244</a>     }
+<a class="jxr_linenumber" name="245" href="#245">245</a> 
+<a class="jxr_linenumber" name="246" href="#246">246</a>     <strong class="jxr_keyword">return</strong> <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> 
+<a class="jxr_linenumber" name="249" href="#249">249</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> close() {
+<a class="jxr_linenumber" name="250" href="#250">250</a>     <strong class="jxr_keyword">if</strong> (closed) <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="251" href="#251">251</a>     cur = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="252" href="#252">252</a>     <strong class="jxr_keyword">this</strong>.hfs.close();
+<a class="jxr_linenumber" name="253" href="#253">253</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.reader != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="254" href="#254">254</a>       <strong class="jxr_keyword">this</strong>.reader.decrementRefCount();
+<a class="jxr_linenumber" name="255" href="#255">255</a>     }
+<a class="jxr_linenumber" name="256" href="#256">256</a>     closed = <strong class="jxr_keyword">true</strong>;
+<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>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="260" href="#260">260</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="261" href="#261">261</a> <em class="jxr_javadoccomment">   * @param s</em>
+<a class="jxr_linenumber" name="262" href="#262">262</a> <em class="jxr_javadoccomment">   * @param k</em>
+<a class="jxr_linenumber" name="263" href="#263">263</a> <em class="jxr_javadoccomment">   * @return false if not found or if k is after the end.</em>
+<a class="jxr_linenumber" name="264" href="#264">264</a> <em class="jxr_javadoccomment">   * @throws IOException</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">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> seekAtOrAfter(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> s, <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> k)
+<a class="jxr_linenumber" name="267" href="#267">267</a>   <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="268" href="#268">268</a>     <strong class="jxr_keyword">int</strong> result = s.seekTo(k);
+<a class="jxr_linenumber" name="269" href="#269">269</a>     <strong class="jxr_keyword">if</strong>(result &lt; 0) {
+<a class="jxr_linenumber" name="270" href="#270">270</a>       <strong class="jxr_keyword">if</strong> (result == HConstants.INDEX_KEY_MAGIC) {
+<a class="jxr_linenumber" name="271" href="#271">271</a>         <em class="jxr_comment">// using faked key</em>
+<a class="jxr_linenumber" name="272" href="#272">272</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="273" href="#273">273</a>       }
+<a class="jxr_linenumber" name="274" href="#274">274</a>       <em class="jxr_comment">// Passed KV is smaller than first KV in file, work from start of file</em>
+<a class="jxr_linenumber" name="275" href="#275">275</a>       <strong class="jxr_keyword">return</strong> s.seekTo();
+<a class="jxr_linenumber" name="276" href="#276">276</a>     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong>(result &gt; 0) {
+<a class="jxr_linenumber" name="277" href="#277">277</a>       <em class="jxr_comment">// Passed KV is larger than current KV in file, if there is a next</em>
+<a class="jxr_linenumber" name="278" href="#278">278</a>       <em class="jxr_comment">// it is the "after", if not then this scanner is done.</em>
+<a class="jxr_linenumber" name="279" href="#279">279</a>       <strong class="jxr_keyword">return</strong> s.next();
+<a class="jxr_linenumber" name="280" href="#280">280</a>     }
+<a class="jxr_linenumber" name="281" href="#281">281</a>     <em class="jxr_comment">// Seeked to the exact key</em>
+<a class="jxr_linenumber" name="282" href="#282">282</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="283" href="#283">283</a>   }
+<a class="jxr_linenumber" name="284" href="#284">284</a> 
+<a class="jxr_linenumber" name="285" href="#285">285</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> reseekAtOrAfter(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> s, <a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> k)
+<a class="jxr_linenumber" name="286" href="#286">286</a>   <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="287" href="#287">287</a>     <em class="jxr_comment">//This function is similar to seekAtOrAfter function</em>
+<a class="jxr_linenumber" name="288" href="#288">288</a>     <strong class="jxr_keyword">int</strong> result = s.reseekTo(k);
+<a class="jxr_linenumber" name="289" href="#289">289</a>     <strong class="jxr_keyword">if</strong> (result &lt;= 0) {
+<a class="jxr_linenumber" name="290" href="#290">290</a>       <strong class="jxr_keyword">if</strong> (result == HConstants.INDEX_KEY_MAGIC) {
+<a class="jxr_linenumber" name="291" href="#291">291</a>         <em class="jxr_comment">// using faked key</em>
+<a class="jxr_linenumber" name="292" href="#292">292</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="293" href="#293">293</a>       }
+<a class="jxr_linenumber" name="294" href="#294">294</a>       <em class="jxr_comment">// If up to now scanner is not seeked yet, this means passed KV is smaller</em>
+<a class="jxr_linenumber" name="295" href="#295">295</a>       <em class="jxr_comment">// than first KV in file, and it is the first time we seek on this file.</em>
+<a class="jxr_linenumber" name="296" href="#296">296</a>       <em class="jxr_comment">// So we also need to work from the start of file.</em>
+<a class="jxr_linenumber" name="297" href="#297">297</a>       <strong class="jxr_keyword">if</strong> (!s.isSeeked()) {
+<a class="jxr_linenumber" name="298" href="#298">298</a>         <strong class="jxr_keyword">return</strong>  s.seekTo();
+<a class="jxr_linenumber" name="299" href="#299">299</a>       }
+<a class="jxr_linenumber" name="300" href="#300">300</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="301" href="#301">301</a>     }
+<a class="jxr_linenumber" name="302" href="#302">302</a>     <em class="jxr_comment">// passed KV is larger than current KV in file, if there is a next</em>
+<a class="jxr_linenumber" name="303" href="#303">303</a>     <em class="jxr_comment">// it is after, if not then this scanner is done.</em>
+<a class="jxr_linenumber" name="304" href="#304">304</a>     <strong class="jxr_keyword">return</strong> s.next();
+<a class="jxr_linenumber" name="305" href="#305">305</a>   }
+<a class="jxr_linenumber" name="306" href="#306">306</a> 
+<a class="jxr_linenumber" name="307" href="#307">307</a>   @Override
+<a class="jxr_linenumber" name="308" href="#308">308</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSequenceID() {
+<a class="jxr_linenumber" name="309" href="#309">309</a>     <strong class="jxr_keyword">return</strong> reader.getSequenceID();
+<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>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="313" href="#313">313</a> <em class="jxr_javadoccomment">   * Pretend we have done a seek but don't do it yet, if possible. The hope is</em>
+<a class="jxr_linenumber" name="314" href="#314">314</a> <em class="jxr_javadoccomment">   * that we find requested columns in more recent files and won't have to seek</em>
+<a class="jxr_linenumber" name="315" href="#315">315</a> <em class="jxr_javadoccomment">   * in older files. Creates a fake key/value with the given row/column and the</em>
+<a class="jxr_linenumber" name="316" href="#316">316</a> <em class="jxr_javadoccomment">   * highest (most recent) possible timestamp we might get from this file. When</em>
+<a class="jxr_linenumber" name="317" href="#317">317</a> <em class="jxr_javadoccomment">   * users of such "lazy scanner" need to know the next KV precisely (e.g. when</em>
+<a class="jxr_linenumber" name="318" href="#318">318</a> <em class="jxr_javadoccomment">   * this scanner is at the top of the heap), they run {@link #enforceSeek()}.</em>
+<a class="jxr_linenumber" name="319" href="#319">319</a> <em class="jxr_javadoccomment">   * &lt;p&gt;</em>
+<a class="jxr_linenumber" name="320" href="#320">320</a> <em class="jxr_javadoccomment">   * Note that this function does guarantee that the current KV of this scanner</em>
+<a class="jxr_linenumber" name="321" href="#321">321</a> <em class="jxr_javadoccomment">   * will be advanced to at least the given KV. Because of this, it does have</em>
+<a class="jxr_linenumber" name="322" href="#322">322</a> <em class="jxr_javadoccomment">   * to do a real seek in cases when the seek timestamp is older than the</em>
+<a class="jxr_linenumber" name="323" href="#323">323</a> <em class="jxr_javadoccomment">   * highest timestamp of the file, e.g. when we are trying to seek to the next</em>
+<a class="jxr_linenumber" name="324" href="#324">324</a> <em class="jxr_javadoccomment">   * row/column and use OLDEST_TIMESTAMP in the seek key.</em>
+<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>   @Override
+<a class="jxr_linenumber" name="327" href="#327">327</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> requestSeek(<a href="../../../../../org/apache/hadoop/hbase/Cell.html">Cell</a> kv, <strong class="jxr_keyword">boolean</strong> forward, <strong class="jxr_keyword">boolean</strong> useBloom)
+<a class="jxr_linenumber" name="328" href="#328">328</a>       <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="329" href="#329">329</a>     <strong class="jxr_keyword">if</strong> (kv.getFamilyLength() == 0) {
+<a class="jxr_linenumber" name="330" href="#330">330</a>       useBloom = false;
+<a class="jxr_linenumber" name="331" href="#331">331</a>     }
+<a class="jxr_linenumber" name="332" href="#332">332</a> 
+<a class="jxr_linenumber" name="333" href="#333">333</a>     <strong class="jxr_keyword">boolean</strong> haveToSeek = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="334" href="#334">334</a>     <strong class="jxr_keyword">if</strong> (useBloom) {
+<a class="jxr_linenumber" name="335" href="#335">335</a>       <em class="jxr_comment">// check ROWCOL Bloom filter first.</em>
+<a class="jxr_linenumber" name="336" href="#336">336</a>       <strong class="jxr_keyword">if</strong> (reader.getBloomFilterType() == BloomType.ROWCOL) {
+<a class="jxr_linenumber" name="337" href="#337">337</a>         haveToSeek = reader.passesGeneralRowColBloomFilter(kv);
+<a class="jxr_linenumber" name="338" href="#338">338</a>       } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.matcher != <strong class="jxr_keyword">null</strong> &amp;&amp; !matcher.hasNullColumnInQuery() &amp;&amp;
+<a class="jxr_linenumber" name="339" href="#339">339</a>           ((CellUtil.isDeleteFamily(kv) || CellUtil.isDeleteFamilyVersion(kv)))) {
+<a class="jxr_linenumber" name="340" href="#340">340</a>         <em class="jxr_comment">// if there is no such delete family kv in the store file,</em>
+<a class="jxr_linenumber" name="341" href="#341">341</a>         <em class="jxr_comment">// then no need to seek.</em>
+<a class="jxr_linenumber" name="342" href="#342">342</a>         haveToSeek = reader.passesDeleteFamilyBloomFilter(kv.getRowArray(),
+<a class="jxr_linenumber" name="343" href="#343">343</a>             kv.getRowOffset(), kv.getRowLength());
+<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> 
-<a class="jxr_linenumber" name="347" href="#347">347</a>     <strong class="jxr_keyword">if</strong> (haveToSeek) {
-<a class="jxr_linenumber" name="348" href="#348">348</a>       <em class="jxr_comment">// This row/column might be in this store file (or we did not use the</em>
-<a class="jxr_linenumber" name="349" href="#349">349</a>       <em class="jxr_comment">// Bloom filter), so we still need to seek.</em>
-<a class="jxr_linenumber" name="350" href="#350">350</a>       realSeekDone = false;
-<a class="jxr_linenumber" name="351" href="#351">351</a>       <strong class="jxr_keyword">long</strong> maxTimestampInFile = reader.getMaxTimestamp();
-<a class="jxr_linenumber" name="352" href="#352">352</a>       <strong class="jxr_keyword">long</strong> seekTimestamp = kv.getTimestamp();
-<a class="jxr_linenumber" name="353" href="#353">353</a>       <strong class="jxr_keyword">if</strong> (seekTimestamp &gt; maxTimestampInFile) {
-<a class="jxr_linenumber" name="354" href="#354">354</a>         <em class="jxr_comment">// Create a fake key that is not greater than the real next key.</em>
-<a class="jxr_linenumber" name="355" href="#355">355</a>         <em class="jxr_comment">// (Lower timestamps correspond to higher KVs.)</em>
-<a class="jxr_linenumber" name="356" href="#356">356</a>         <em class="jxr_comment">// To understand this better, consider that we are asked to seek to</em>
-<a class="jxr_linenumber" name="357" href="#357">357</a>         <em class="jxr_comment">// a higher timestamp than the max timestamp in this file. We know that</em>
-<a class="jxr_linenumber" name="358" href="#358">358</a>         <em class="jxr_comment">// the next point when we have to consider this file again is when we</em>
-<a class="jxr_linenumber" name="359" href="#359">359</a>         <em class="jxr_comment">// pass the max timestamp of this file (with the same row/column).</em>
-<a class="jxr_linenumber" name="360" href="#360">360</a>         setCurrentCell(CellUtil.createFirstOnRowColTS(kv, maxTimestampInFile));
-<a class="jxr_linenumber" name="361" href="#361">361</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="362" href="#362">362</a>         <em class="jxr_comment">// This will be the case e.g. when we need to seek to the next</em>
-<a class="jxr_linenumber" name="363" href="#363">363</a>         <em class="jxr_comment">// row/column, and we don't know exactly what they are, so we set the</em>
-<a class="jxr_linenumber" name="364" href="#364">364</a>         <em class="jxr_comment">// seek key's timestamp to OLDEST_TIMESTAMP to skip the rest of this</em>
-<a class="jxr_linenumber" name="365" href="#365">365</a>         <em class="jxr_comment">// row/column.</em>
-<a class="jxr_linenumber" name="366" href="#366">366</a>         enforceSeek();
-<a class="jxr_linenumber" name="367" href="#367">367</a>       }
-<a class="jxr_linenumber" name="368" href="#368">368</a>       <strong class="jxr_keyword">return</strong> cur != <strong class="jxr_keyword">null</strong>;
-<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">// Multi-column Bloom filter optimization.</em>
-<a class="jxr_linenumber" name="372" href="#372">372</a>     <em class="jxr_comment">// Create a fake key/value, so that this scanner only bubbles up to the top</em>
-<a class="jxr_linenumber" name="373" href="#373">373</a>     <em class="jxr_comment">// of the KeyValueHeap in StoreScanner after we scanned this row/column in</em>
-<a class="jxr_linenumber" name="374" href="#374">374</a>     <em class="jxr_comment">// all other store files. The query matcher will then just skip this fake</em>
-<a class="jxr_linenumber" name="375" href="#375">375</a>     <em class="jxr_comment">// key/value and the store scanner will progress to the next column. This</em>
-<a class="jxr_linenumber" name="376" href="#376">376</a>     <em class="jxr_comment">// is obviously not a "real real" seek, but unlike the fake KV earlier in</em>
-<a class="jxr_linenumber" name="377" href="#377">377</a>     <em class="jxr_comment">// this method, we want this to be propagated to ScanQueryMatcher.</em>
-<a class="jxr_linenumber" name="378" href="#378">378</a>     setCurrentCell(CellUtil.createLastOnRowCol(kv));
-<a class="jxr_linenumber" name="379" href="#379">379</a> 
-<a class="jxr_linenumber" name="380" href="#380">380</a>     realSeekDone = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="381" href="#381">381</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<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>   <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.html">Reader</a> getReader() {
-<a class="jxr_linenumber" name="385" href="#385">385</a>     <strong class="jxr_keyword">return</strong> reader;
-<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>   <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html">CellComparator</a> getComparator() {
-<a class="jxr_linenumber" name="389" href="#389">389</a>     <strong class="jxr_keyword">return</strong> reader.getComparator();
-<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>   @Override
-<a class="jxr_linenumber" name="393" href="#393">393</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> realSeekDone() {
-<a class="jxr_linenumber" name="394" href="#394">394</a>     <strong class="jxr_keyword">return</strong> realSeekDone;
-<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>   @Override
-<a class="jxr_linenumber" name="398" href="#398">398</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> enforceSeek() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="399" href="#399">399</a>     <strong class="jxr_keyword">if</strong> (realSeekDone)
-<a class="jxr_linenumber" name="400" href="#400">400</a>       <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="401" href="#401">401</a> 
-<a class="jxr_linenumber" name="402" href="#402">402</a>     <strong class="jxr_keyword">if</strong> (delayedReseek) {
-<a class="jxr_linenumber" name="403" href="#403">403</a>       reseek(delayedSeekKV);
-<a class="jxr_linenumber" name="404" href="#404">404</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="405" href="#405">405</a>       seek(delayedSeekKV);
-<a class="jxr_linenumber" name="406" href="#406">406</a>     }
-<a class="jxr_linenumber" name="407" href="#407">407</a>   }
-<a class="jxr_linenumber" name="408" href="#408">408</a> 
-<a class="jxr_linenumber" name="409" href="#409">409</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setScanQueryMatcher(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher) {
-<a class="jxr_linenumber" name="410" href="#410">410</a>     <strong class="jxr_keyword">this</strong>.matcher = matcher;
-<a class="jxr_linenumber" name="411" href="#411">411</a>   }
-<a class="jxr_linenumber" name="412" href="#412">412</a> 
-<a class="jxr_linenumber" name="413" href="#413">413</a>   @Override
-<a class="jxr_linenumber" name="414" href="#414">414</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isFileScanner() {
-<a class="jxr_linenumber" name="415" href="#415">415</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="416" href="#416">416</a>   }
-<a class="jxr_linenumber" name="417" href="#417">417</a> 
-<a class="jxr_linenumber" name="418" href="#418">418</a>   <em class="jxr_comment">// Test methods</em>
-<a class="jxr_linenumber" name="419" href="#419">419</a> 
-<a class="jxr_linenumber" name="420" href="#420">420</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> getSeekCount() {
-<a class="jxr_linenumber" name="421" href="#421">421</a>     <strong class="jxr_keyword">return</strong> seekCount.get();
-<a class="jxr_linenumber" name="422" href="#422">422</a>   }
-<a class="jxr_linenumber" name="423" href="#423">423</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">void</strong> instrument() {
-<a class="jxr_linenumber" name="424" href="#424">424</a>     seekCount = <strong class="jxr_keyword">new</strong> AtomicLong();
+<a class="jxr_linenumber" name="347" href="#347">347</a>     delayedReseek = forward;
+<a class="jxr_linenumber" name="348" href="#348">348</a>     delayedSeekKV = kv;
+<a class="jxr_linenumber" name="349" href="#349">349</a> 
+<a class="jxr_linenumber" name="350" href="#350">350</a>     <strong class="jxr_keyword">if</strong> (haveToSeek) {
+<a class="jxr_linenumber" name="351" href="#351">351</a>       <em class="jxr_comment">// This row/column might be in this store file (or we did not use the</em>
+<a class="jxr_linenumber" name="352" href="#352">352</a>       <em class="jxr_comment">// Bloom filter), so we still need to seek.</em>
+<a class="jxr_linenumber" name="353" href="#353">353</a>       realSeekDone = false;
+<a class="jxr_linenumber" name="354" href="#354">354</a>       <strong class="jxr_keyword">long</strong> maxTimestampInFile = reader.getMaxTimestamp();
+<a class="jxr_linenumber" name="355" href="#355">355</a>       <strong class="jxr_keyword">long</strong> seekTimestamp = kv.getTimestamp();
+<a class="jxr_linenumber" name="356" href="#356">356</a>       <strong class="jxr_keyword">if</strong> (seekTimestamp &gt; maxTimestampInFile) {
+<a class="jxr_linenumber" name="357" href="#357">357</a>         <em class="jxr_comment">// Create a fake key that is not greater than the real next key.</em>
+<a class="jxr_linenumber" name="358" href="#358">358</a>         <em class="jxr_comment">// (Lower timestamps correspond to higher KVs.)</em>
+<a class="jxr_linenumber" name="359" href="#359">359</a>         <em class="jxr_comment">// To understand this better, consider that we are asked to seek to</em>
+<a class="jxr_linenumber" name="360" href="#360">360</a>         <em class="jxr_comment">// a higher timestamp than the max timestamp in this file. We know that</em>
+<a class="jxr_linenumber" name="361" href="#361">361</a>         <em class="jxr_comment">// the next point when we have to consider this file again is when we</em>
+<a class="jxr_linenumber" name="362" href="#362">362</a>         <em class="jxr_comment">// pass the max timestamp of this file (with the same row/column).</em>
+<a class="jxr_linenumber" name="363" href="#363">363</a>         setCurrentCell(CellUtil.createFirstOnRowColTS(kv, maxTimestampInFile));
+<a class="jxr_linenumber" name="364" href="#364">364</a>       } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="365" href="#365">365</a>         <em class="jxr_comment">// This will be the case e.g. when we need to seek to the next</em>
+<a class="jxr_linenumber" name="366" href="#366">366</a>         <em class="jxr_comment">// row/column, and we don't know exactly what they are, so we set the</em>
+<a class="jxr_linenumber" name="367" href="#367">367</a>         <em class="jxr_comment">// seek key's timestamp to OLDEST_TIMESTAMP to skip the rest of this</em>
+<a class="jxr_linenumber" name="368" href="#368">368</a>         <em class="jxr_comment">// row/column.</em>
+<a class="jxr_linenumber" name="369" href="#369">369</a>         enforceSeek();
+<a class="jxr_linenumber" name="370" href="#370">370</

<TRUNCATED>

[42/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 970d946..e26cc42 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/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/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottleType</span></a></li>
 <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/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/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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
index c2aa6c7..898715a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html
@@ -92,7 +92,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 interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#line.31">ChangedReadersObserver</a></pre>
+public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#line.32">ChangedReadersObserver</a></pre>
 <div class="block">If set of MapFile.Readers in Store change, implementors are notified.</div>
 </li>
 </ul>
@@ -114,7 +114,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/region
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders()">updateReaders</a></strong>()</code>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders(java.util.List)">updateReaders</a></strong>(<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/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</code>
 <div class="block">Notify observers.</div>
 </td>
 </tr>
@@ -133,13 +133,13 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/region
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="updateReaders()">
+<a name="updateReaders(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>updateReaders</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#line.36">updateReaders</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#line.37">updateReaders</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)
                    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">Notify observers.</div>
 <dl><dt><span class="strong">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
index 5fc7655..b0f4f48 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
@@ -462,7 +462,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add(org.apache.hadoop.hbase.Cell)">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#addChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">addChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#areWritesEnabled()">areWritesEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#assertBulkLoadHFileOk(org.apache.hadoop.fs.Path)">assertBulkLoadHFileOk</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(org.apache.hadoop.hbase.regionserver.StoreFileInfo)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(java.lang.String,%20long)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#cancelRequestedCompaction(org.apache.hadoop.hbase.regi
 onserver.compactions.CompactionContext)">cancelRequestedCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#canSplit()">canSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#closeAndArchiveCompactedFiles()">closeAndArchiveCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact(org.apache.hadoop.hbase.regionserver.compactions.CompactionContext,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionThroughputController,%20org.apache.hadoop.hbase.security.User)">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compactRecentForTestingAssumingDefaultPolicy(int)">compactRecentForTestingAssumingDefaultPolicy</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#completeCompaction(java.util.Collection)">completeCompacti
 on</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createFlushContext(long)">createFlushContext</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#delete(org.apache.hadoop.hbase.KeyValue)">delete</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">deleteChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deregisterChildren(org.apache
 .hadoop.hbase.conf.ConfigurationManager)">deregisterChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#determineTTLFromFamily(org.apache.hadoop.hbase.HColumnDescriptor)">determineTTLFromFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#flushCache(long,%20org.apache.hadoop.hbase.regionserver.MemStoreSnapshot,%20org.apache.hadoop.hbase.monitoring.MonitoredTask)">flushCache</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBlockingFileCount()">getBlockingFileCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBytesPerChecksum(org.apache.hadoop.conf.Configuration)">getBytesPerChecksum</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCacheConfig()">getCacheConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getChecksumType(org.apache.hadoop.conf.Configuration)">getChecksumType</a>, <a href
 ="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCloseCheckInterval()">getCloseCheckInterval</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyName()">getColumnFamilyName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsCount()">getCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsSize()">getCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionCheckMultiplier()">getCompactionCheckMultiplier</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionPressure()">getCompactionPressure</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionProgress()">getCompactionProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactPriority()">getCompactPriority</a>
 , <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getComparator()">getComparator</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCoprocessorHost()">getCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getDataBlockEncoder()">getDataBlockEncoder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFamily()">getFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem()">getFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushableSize()">getFlushableSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsCount()">getFlushedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsSize()">getFlushedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getH
 Region()">getHRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getLastCompactSize()">getLastCompactSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxMemstoreTS()">getMaxMemstoreTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxSequenceId()">getMaxSequenceId</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemstoreFlushSize()">getMemstoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemStoreSize()">getMemStoreSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getOffPeakHours()">getOffPeakHours</a>, <
 a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionFileSystem()">getRegionFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionInfo()">getRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanInfo()">getScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.NavigableSet,%20long)">getScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long)">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize()">getSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSmallestReadPoint()">getSmallestReadPoint</a>, <a href="../../../../../org/apache/hadoop
 /hbase/regionserver/HStore.html#getSnapshotSize()">getSnapshotSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint()">getSplitPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine()">getStoreEngine</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles()">getStorefiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesCount()">getStorefilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesIndexSize()">getStorefilesIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize()">getStorefilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreFileTtl()">getStoreFileTtl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20or
 g.apache.hadoop.hbase.HRegionInfo,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20java.lang.String,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName()">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticIndexSize()">getTotalStaticIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences()">hasReferences</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a>, <a href="../../../../../org/apache
 /hadoop/hbase/regionserver/HStore.html#heapSize()">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isCellTTLExpired(org.apache.hadoop.hbase.Cell,%20long,%20long)">isCellTTLExpired</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isMajorCompaction()">isMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace(org.apache.hadoop.fs.Path)">moveFileIntoPlace</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#needsCompaction()">needsCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">onConfigurationChange</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles()">refreshStoreFiles</a>
 , <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles(java.util.Collection)">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#registerChildren(org.apache.hadoop.hbase.conf.ConfigurationManager)">registerChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction()">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a>, <a h
 ref="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder)">setDataBlockEncoderInTest</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo(org.apache.hadoop.hbase.regionserver.ScanInfo)">setScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot()">snapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction(long)">throttleCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldes
 tEdit()">timeOfOldestEdit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction()">triggerMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateColumnValue(byte[],%20byte[],%20byte[],%20long)">updateColumnValue</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert(java.lang.Iterable,%20long)">upsert</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn(int)">versionsToReturn</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add(org.apache.hadoop.hbase.Cell)">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#addChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">addChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#areWritesEnabled()">areWritesEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#assertBulkLoadHFileOk(org.apache.hadoop.fs.Path)">assertBulkLoadHFileOk</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(org.apache.hadoop.hbase.regionserver.StoreFileInfo)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(java.lang.String,%20long)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#cancelRequestedCompaction(org.apache.hadoop.hbase.regi
 onserver.compactions.CompactionContext)">cancelRequestedCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#canSplit()">canSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#closeAndArchiveCompactedFiles()">closeAndArchiveCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact(org.apache.hadoop.hbase.regionserver.compactions.CompactionContext,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionThroughputController,%20org.apache.hadoop.hbase.security.User)">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compactRecentForTestingAssumingDefaultPolicy(int)">compactRecentForTestingAssumingDefaultPolicy</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#completeCompaction(java.util.Collection)">completeCompacti
 on</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createFlushContext(long)">createFlushContext</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#delete(org.apache.hadoop.hbase.KeyValue)">delete</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">deleteChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deregisterChildren(org.apache
 .hadoop.hbase.conf.ConfigurationManager)">deregisterChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#determineTTLFromFamily(org.apache.hadoop.hbase.HColumnDescriptor)">determineTTLFromFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#flushCache(long,%20org.apache.hadoop.hbase.regionserver.MemStoreSnapshot,%20org.apache.hadoop.hbase.monitoring.MonitoredTask)">flushCache</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBlockingFileCount()">getBlockingFileCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBytesPerChecksum(org.apache.hadoop.conf.Configuration)">getBytesPerChecksum</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCacheConfig()">getCacheConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getChecksumType(org.apache.hadoop.conf.Configuration)">getChecksumType</a>, <a href
 ="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCloseCheckInterval()">getCloseCheckInterval</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyName()">getColumnFamilyName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsCount()">getCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsSize()">getCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionCheckMultiplier()">getCompactionCheckMultiplier</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionPressure()">getCompactionPressure</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionProgress()">getCompactionProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactPriority()">getCompactPriority</a>
 , <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getComparator()">getComparator</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCoprocessorHost()">getCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getDataBlockEncoder()">getDataBlockEncoder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFamily()">getFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem()">getFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushableSize()">getFlushableSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsCount()">getFlushedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsSize()">getFlushedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getH
 Region()">getHRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getLastCompactSize()">getLastCompactSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxMemstoreTS()">getMaxMemstoreTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxSequenceId()">getMaxSequenceId</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemstoreFlushSize()">getMemstoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemStoreSize()">getMemStoreSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getOffPeakHours()">getOffPeakHours</a>, <
 a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionFileSystem()">getRegionFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionInfo()">getRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanInfo()">getScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.NavigableSet,%20long)">getScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long)">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a>, <a
  href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize()">getSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSmallestReadPoint()">getSmallestReadPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSnapshotSize()">getSnapshotSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint()">getSplitPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine()">getStoreEngine</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles()">getStorefiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesCount()">getStorefilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesIndexSize()">getStorefilesIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize(
 )">getStorefilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreFileTtl()">getStoreFileTtl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.HRegionInfo,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20java.lang.String,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName()">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticIndexSize()">getTotalStaticIndexSize</a>, <a href
 ="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences()">hasReferences</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#heapSize()">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isCellTTLExpired(org.apache.hadoop.hbase.Cell,%20long,%20long)">isCellTTLExpired</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isMajorCompaction()">isMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace(org.apache.hadoop.fs.Path)">moveFileIntoPlace</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#needsCompaction()">needsCompaction</a>, <a href="../../..
 /../../org/apache/hadoop/hbase/regionserver/HStore.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">onConfigurationChange</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles()">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles(java.util.Collection)">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#registerChildren(org.apache.hadoop.hbase.conf.ConfigurationManager)">registerChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker</a>, <a href="../../../../../org/apache/hadoop/hbase/regi
 onserver/HStore.html#requestCompaction()">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder)">setDataBlockEncoderInTest</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo(org.apache.hadoop.hbase.regionserver.ScanInfo)">setScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase
 /regionserver/HStore.html#snapshot()">snapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction(long)">throttleCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit()">timeOfOldestEdit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction()">triggerMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateColumnValue(byte[],%20byte[],%20byte[],%20long)">updateColumnValue</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert(java.lang.Iterable,%20long)">upsert</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn(int)">versionsToReturn</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/736088b3/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index fb8dac6..89c3394 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2024">HStore.StoreFlusherImpl</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2048">HStore.StoreFlusherImpl</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/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a></pre>
 </li>
@@ -252,7 +252,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheFlushSeqNum</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2026">cacheFlushSeqNum</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2050">cacheFlushSeqNum</a></pre>
 </li>
 </ul>
 <a name="snapshot">
@@ -261,7 +261,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshot</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2027">snapshot</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2051">snapshot</a></pre>
 </li>
 </ul>
 <a name="tempFiles">
@@ -270,7 +270,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>tempFiles</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;org.apache.hadoop.fs.Path&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2028">tempFiles</a></pre>
+<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;org.apache.hadoop.fs.Path&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2052">tempFiles</a></pre>
 </li>
 </ul>
 <a name="committedFiles">
@@ -279,7 +279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>committedFiles</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;org.apache.hadoop.fs.Path&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2029">committedFiles</a></pre>
+<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;org.apache.hadoop.fs.Path&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2053">committedFiles</a></pre>
 </li>
 </ul>
 <a name="cacheFlushCount">
@@ -288,7 +288,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheFlushCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2030">cacheFlushCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2054">cacheFlushCount</a></pre>
 </li>
 </ul>
 <a name="cacheFlushSize">
@@ -297,7 +297,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cacheFlushSize</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2031">cacheFlushSize</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2055">cacheFlushSize</a></pre>
 </li>
 </ul>
 </li>
@@ -314,7 +314,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HStore.StoreFlusherImpl</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2033">HStore.StoreFlusherImpl</a>(long&nbsp;cacheFlushSeqNum)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2057">HStore.StoreFlusherImpl</a>(long&nbsp;cacheFlushSeqNum)</pre>
 </li>
 </ul>
 </li>
@@ -331,7 +331,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2042">prepare</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2066">prepare</a>()</pre>
 <div class="block">This is not thread safe. The caller should have a lock on the region or the store.
  If necessary, the lock can be added with the patch provided in HBASE-10087</div>
 <dl>
@@ -346,7 +346,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>flushCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2050">flushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2074">flushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#flushCache(org.apache.hadoop.hbase.monitoring.MonitoredTask)">StoreFlushContext</a></code></strong></div>
 <div class="block">Flush the cache (create the new store file)
@@ -366,7 +366,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>commit</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2055">commit</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2079">commit</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#commit(org.apache.hadoop.hbase.monitoring.MonitoredTask)">StoreFlushContext</a></code></strong></div>
 <div class="block">Commit the flush - add the store file to the store and clear the
@@ -389,7 +389,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>getCommittedFiles</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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2094">getCommittedFiles</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2118">getCommittedFiles</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#getCommittedFiles()">StoreFlushContext</a></code></strong></div>
 <div class="block">Returns the newly committed files from the flush. Called only if commit returns true</div>
 <dl>
@@ -404,7 +404,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>replayFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2107">replayFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;fileNames,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2131">replayFlush</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;fileNames,
                boolean&nbsp;dropMemstoreSnapshot)
                  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">Similar to commit, but called in secondary region replicas for replaying the
@@ -424,7 +424,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockListLast">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2137">abort</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2161">abort</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">Abort the snapshot preparation. Drops the snapshot if any.</div>
 <dl>


[08/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/xref/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/regionserver/HStore.html b/xref/org/apache/hadoop/hbase/regionserver/HStore.html
index 1a9620d..929329a 100644
--- a/xref/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/xref/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -1052,7 +1052,7 @@
 <a class="jxr_linenumber" name="1042" href="#1042">1042</a>       <strong class="jxr_keyword">this</strong>.lock.writeLock().unlock();
 <a class="jxr_linenumber" name="1043" href="#1043">1043</a>     }
 <a class="jxr_linenumber" name="1044" href="#1044">1044</a>     <em class="jxr_comment">// notify to be called here - only in case of flushes</em>
-<a class="jxr_linenumber" name="1045" href="#1045">1045</a>     notifyChangedReadersObservers();
+<a class="jxr_linenumber" name="1045" href="#1045">1045</a>     notifyChangedReadersObservers(sfs);
 <a class="jxr_linenumber" name="1046" href="#1046">1046</a>     <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
 <a class="jxr_linenumber" name="1047" href="#1047">1047</a>       <strong class="jxr_keyword">long</strong> totalSize = 0;
 <a class="jxr_linenumber" name="1048" href="#1048">1048</a>       <strong class="jxr_keyword">for</strong> (StoreFile sf : sfs) {
@@ -1070,9 +1070,9 @@
 <a class="jxr_linenumber" name="1060" href="#1060">1060</a> <em class="jxr_comment">   * Notify all observers that set of Readers has changed.</em>
 <a class="jxr_linenumber" name="1061" href="#1061">1061</a> <em class="jxr_comment">   * @throws IOException</em>
 <a class="jxr_linenumber" name="1062" href="#1062">1062</a> <em class="jxr_comment">   */</em>
-<a class="jxr_linenumber" name="1063" href="#1063">1063</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> notifyChangedReadersObservers() <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1063" href="#1063">1063</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> notifyChangedReadersObservers(List&lt;StoreFile&gt; sfs) <strong class="jxr_keyword">throws</strong> IOException {
 <a class="jxr_linenumber" name="1064" href="#1064">1064</a>     <strong class="jxr_keyword">for</strong> (ChangedReadersObserver o : <strong class="jxr_keyword">this</strong>.changedReaderObservers) {
-<a class="jxr_linenumber" name="1065" href="#1065">1065</a>       o.updateReaders();
+<a class="jxr_linenumber" name="1065" href="#1065">1065</a>       o.updateReaders(sfs);
 <a class="jxr_linenumber" name="1066" href="#1066">1066</a>     }
 <a class="jxr_linenumber" name="1067" href="#1067">1067</a>   }
 <a class="jxr_linenumber" name="1068" href="#1068">1068</a> 
@@ -1112,1283 +1112,1307 @@
 <a class="jxr_linenumber" name="1102" href="#1102">1102</a>   }
 <a class="jxr_linenumber" name="1103" href="#1103">1103</a> 
 <a class="jxr_linenumber" name="1104" href="#1104">1104</a>   @Override
-<a class="jxr_linenumber" name="1105" href="#1105">1105</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> addChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o) {
-<a class="jxr_linenumber" name="1106" href="#1106">1106</a>     <strong class="jxr_keyword">this</strong>.changedReaderObservers.add(o);
-<a class="jxr_linenumber" name="1107" href="#1107">1107</a>   }
-<a class="jxr_linenumber" name="1108" href="#1108">1108</a> 
-<a class="jxr_linenumber" name="1109" href="#1109">1109</a>   @Override
-<a class="jxr_linenumber" name="1110" href="#1110">1110</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> deleteChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o) {
-<a class="jxr_linenumber" name="1111" href="#1111">1111</a>     <em class="jxr_comment">// We don't check if observer present; it may not be (legitimately)</em>
-<a class="jxr_linenumber" name="1112" href="#1112">1112</a>     <strong class="jxr_keyword">this</strong>.changedReaderObservers.remove(o);
-<a class="jxr_linenumber" name="1113" href="#1113">1113</a>   }
-<a class="jxr_linenumber" name="1114" href="#1114">1114</a> 
-<a class="jxr_linenumber" name="1115" href="#1115">1115</a>   <em class="jxr_comment">//////////////////////////////////////////////////////////////////////////////</em>
-<a class="jxr_linenumber" name="1116" href="#1116">1116</a>   <em class="jxr_comment">// Compaction</em>
-<a class="jxr_linenumber" name="1117" href="#1117">1117</a>   <em class="jxr_comment">//////////////////////////////////////////////////////////////////////////////</em>
-<a class="jxr_linenumber" name="1118" href="#1118">1118</a> 
-<a class="jxr_linenumber" name="1119" href="#1119">1119</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1120" href="#1120">1120</a> <em class="jxr_javadoccomment">   * Compact the StoreFiles.  This method may take some time, so the calling</em>
-<a class="jxr_linenumber" name="1121" href="#1121">1121</a> <em class="jxr_javadoccomment">   * thread must be able to block for long periods.</em>
-<a class="jxr_linenumber" name="1122" href="#1122">1122</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1123" href="#1123">1123</a> <em class="jxr_javadoccomment">   * &lt;p&gt;During this time, the Store can work as usual, getting values from</em>
-<a class="jxr_linenumber" name="1124" href="#1124">1124</a> <em class="jxr_javadoccomment">   * StoreFiles and writing new StoreFiles from the memstore.</em>
-<a class="jxr_linenumber" name="1125" href="#1125">1125</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1126" href="#1126">1126</a> <em class="jxr_javadoccomment">   * Existing StoreFiles are not destroyed until the new compacted StoreFile is</em>
-<a class="jxr_linenumber" name="1127" href="#1127">1127</a> <em class="jxr_javadoccomment">   * completely written-out to disk.</em>
-<a class="jxr_linenumber" name="1128" href="#1128">1128</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1129" href="#1129">1129</a> <em class="jxr_javadoccomment">   * &lt;p&gt;The compactLock prevents multiple simultaneous compactions.</em>
-<a class="jxr_linenumber" name="1130" href="#1130">1130</a> <em class="jxr_javadoccomment">   * The structureLock prevents us from interfering with other write operations.</em>
-<a class="jxr_linenumber" name="1131" href="#1131">1131</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1132" href="#1132">1132</a> <em class="jxr_javadoccomment">   * &lt;p&gt;We don't want to hold the structureLock for the whole time, as a compact()</em>
-<a class="jxr_linenumber" name="1133" href="#1133">1133</a> <em class="jxr_javadoccomment">   * can be lengthy and we want to allow cache-flushes during this period.</em>
-<a class="jxr_linenumber" name="1134" href="#1134">1134</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1135" href="#1135">1135</a> <em class="jxr_javadoccomment">   * &lt;p&gt; Compaction event should be idempotent, since there is no IO Fencing for</em>
-<a class="jxr_linenumber" name="1136" href="#1136">1136</a> <em class="jxr_javadoccomment">   * the region directory in hdfs. A region server might still try to complete the</em>
-<a class="jxr_linenumber" name="1137" href="#1137">1137</a> <em class="jxr_javadoccomment">   * compaction after it lost the region. That is why the following events are carefully</em>
-<a class="jxr_linenumber" name="1138" href="#1138">1138</a> <em class="jxr_javadoccomment">   * ordered for a compaction:</em>
-<a class="jxr_linenumber" name="1139" href="#1139">1139</a> <em class="jxr_javadoccomment">   *  1. Compaction writes new files under region/.tmp directory (compaction output)</em>
-<a class="jxr_linenumber" name="1140" href="#1140">1140</a> <em class="jxr_javadoccomment">   *  2. Compaction atomically moves the temporary file under region directory</em>
-<a class="jxr_linenumber" name="1141" href="#1141">1141</a> <em class="jxr_javadoccomment">   *  3. Compaction appends a WAL edit containing the compaction input and output files.</em>
-<a class="jxr_linenumber" name="1142" href="#1142">1142</a> <em class="jxr_javadoccomment">   *  Forces sync on WAL.</em>
-<a class="jxr_linenumber" name="1143" href="#1143">1143</a> <em class="jxr_javadoccomment">   *  4. Compaction deletes the input files from the region directory.</em>
-<a class="jxr_linenumber" name="1144" href="#1144">1144</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1145" href="#1145">1145</a> <em class="jxr_javadoccomment">   * Failure conditions are handled like this:</em>
-<a class="jxr_linenumber" name="1146" href="#1146">1146</a> <em class="jxr_javadoccomment">   *  - If RS fails before 2, compaction wont complete. Even if RS lives on and finishes</em>
-<a class="jxr_linenumber" name="1147" href="#1147">1147</a> <em class="jxr_javadoccomment">   *  the compaction later, it will only write the new data file to the region directory.</em>
-<a class="jxr_linenumber" name="1148" href="#1148">1148</a> <em class="jxr_javadoccomment">   *  Since we already have this data, this will be idempotent but we will have a redundant</em>
-<a class="jxr_linenumber" name="1149" href="#1149">1149</a> <em class="jxr_javadoccomment">   *  copy of the data.</em>
-<a class="jxr_linenumber" name="1150" href="#1150">1150</a> <em class="jxr_javadoccomment">   *  - If RS fails between 2 and 3, the region will have a redundant copy of the data. The</em>
-<a class="jxr_linenumber" name="1151" href="#1151">1151</a> <em class="jxr_javadoccomment">   *  RS that failed won't be able to finish snyc() for WAL because of lease recovery in WAL.</em>
-<a class="jxr_linenumber" name="1152" href="#1152">1152</a> <em class="jxr_javadoccomment">   *  - If RS fails after 3, the region region server who opens the region will pick up the</em>
-<a class="jxr_linenumber" name="1153" href="#1153">1153</a> <em class="jxr_javadoccomment">   *  the compaction marker from the WAL and replay it by removing the compaction input files.</em>
-<a class="jxr_linenumber" name="1154" href="#1154">1154</a> <em class="jxr_javadoccomment">   *  Failed RS can also attempt to delete those files, but the operation will be idempotent</em>
+<a class="jxr_linenumber" name="1105" href="#1105">1105</a>   <strong class="jxr_keyword">public</strong> List&lt;KeyValueScanner&gt; getScanners(List&lt;StoreFile&gt; files, <strong class="jxr_keyword">boolean</strong> cacheBlocks,
+<a class="jxr_linenumber" name="1106" href="#1106">1106</a>       <strong class="jxr_keyword">boolean</strong> isGet, <strong class="jxr_keyword">boolean</strong> usePread, <strong class="jxr_keyword">boolean</strong> isCompaction, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html">ScanQueryMatcher</a> matcher,
+<a class="jxr_linenumber" name="1107" href="#1107">1107</a>       byte[] startRow, byte[] stopRow, <strong class="jxr_keyword">long</strong> readPt, <strong class="jxr_keyword">boolean</strong> includeMemstoreScanner) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1108" href="#1108">1108</a>     List&lt;KeyValueScanner&gt; memStoreScanners = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1109" href="#1109">1109</a>     <strong class="jxr_keyword">if</strong> (includeMemstoreScanner) {
+<a class="jxr_linenumber" name="1110" href="#1110">1110</a>       <strong class="jxr_keyword">this</strong>.lock.readLock().lock();
+<a class="jxr_linenumber" name="1111" href="#1111">1111</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1112" href="#1112">1112</a>         memStoreScanners = <strong class="jxr_keyword">this</strong>.memstore.getScanners(readPt);
+<a class="jxr_linenumber" name="1113" href="#1113">1113</a>       } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1114" href="#1114">1114</a>         <strong class="jxr_keyword">this</strong>.lock.readLock().unlock();
+<a class="jxr_linenumber" name="1115" href="#1115">1115</a>       }
+<a class="jxr_linenumber" name="1116" href="#1116">1116</a>     }
+<a class="jxr_linenumber" name="1117" href="#1117">1117</a>     List&lt;StoreFileScanner&gt; sfScanners = StoreFileScanner.getScannersForStoreFiles(files,
+<a class="jxr_linenumber" name="1118" href="#1118">1118</a>       cacheBlocks, usePread, isCompaction, false, matcher, readPt, isPrimaryReplicaStore());
+<a class="jxr_linenumber" name="1119" href="#1119">1119</a>     List&lt;KeyValueScanner&gt; scanners = <strong class="jxr_keyword">new</strong> ArrayList&lt;KeyValueScanner&gt;(sfScanners.size() + 1);
+<a class="jxr_linenumber" name="1120" href="#1120">1120</a>     scanners.addAll(sfScanners);
+<a class="jxr_linenumber" name="1121" href="#1121">1121</a>     <em class="jxr_comment">// Then the memstore scanners</em>
+<a class="jxr_linenumber" name="1122" href="#1122">1122</a>     <strong class="jxr_keyword">if</strong> (memStoreScanners != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1123" href="#1123">1123</a>       scanners.addAll(memStoreScanners);
+<a class="jxr_linenumber" name="1124" href="#1124">1124</a>     }
+<a class="jxr_linenumber" name="1125" href="#1125">1125</a>     <strong class="jxr_keyword">return</strong> scanners;
+<a class="jxr_linenumber" name="1126" href="#1126">1126</a>   }
+<a class="jxr_linenumber" name="1127" href="#1127">1127</a> 
+<a class="jxr_linenumber" name="1128" href="#1128">1128</a>   @Override
+<a class="jxr_linenumber" name="1129" href="#1129">1129</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> addChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o) {
+<a class="jxr_linenumber" name="1130" href="#1130">1130</a>     <strong class="jxr_keyword">this</strong>.changedReaderObservers.add(o);
+<a class="jxr_linenumber" name="1131" href="#1131">1131</a>   }
+<a class="jxr_linenumber" name="1132" href="#1132">1132</a> 
+<a class="jxr_linenumber" name="1133" href="#1133">1133</a>   @Override
+<a class="jxr_linenumber" name="1134" href="#1134">1134</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> deleteChangedReaderObserver(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html">ChangedReadersObserver</a> o) {
+<a class="jxr_linenumber" name="1135" href="#1135">1135</a>     <em class="jxr_comment">// We don't check if observer present; it may not be (legitimately)</em>
+<a class="jxr_linenumber" name="1136" href="#1136">1136</a>     <strong class="jxr_keyword">this</strong>.changedReaderObservers.remove(o);
+<a class="jxr_linenumber" name="1137" href="#1137">1137</a>   }
+<a class="jxr_linenumber" name="1138" href="#1138">1138</a> 
+<a class="jxr_linenumber" name="1139" href="#1139">1139</a>   <em class="jxr_comment">//////////////////////////////////////////////////////////////////////////////</em>
+<a class="jxr_linenumber" name="1140" href="#1140">1140</a>   <em class="jxr_comment">// Compaction</em>
+<a class="jxr_linenumber" name="1141" href="#1141">1141</a>   <em class="jxr_comment">//////////////////////////////////////////////////////////////////////////////</em>
+<a class="jxr_linenumber" name="1142" href="#1142">1142</a> 
+<a class="jxr_linenumber" name="1143" href="#1143">1143</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1144" href="#1144">1144</a> <em class="jxr_javadoccomment">   * Compact the StoreFiles.  This method may take some time, so the calling</em>
+<a class="jxr_linenumber" name="1145" href="#1145">1145</a> <em class="jxr_javadoccomment">   * thread must be able to block for long periods.</em>
+<a class="jxr_linenumber" name="1146" href="#1146">1146</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="1147" href="#1147">1147</a> <em class="jxr_javadoccomment">   * &lt;p&gt;During this time, the Store can work as usual, getting values from</em>
+<a class="jxr_linenumber" name="1148" href="#1148">1148</a> <em class="jxr_javadoccomment">   * StoreFiles and writing new StoreFiles from the memstore.</em>
+<a class="jxr_linenumber" name="1149" href="#1149">1149</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="1150" href="#1150">1150</a> <em class="jxr_javadoccomment">   * Existing StoreFiles are not destroyed until the new compacted StoreFile is</em>
+<a class="jxr_linenumber" name="1151" href="#1151">1151</a> <em class="jxr_javadoccomment">   * completely written-out to disk.</em>
+<a class="jxr_linenumber" name="1152" href="#1152">1152</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="1153" href="#1153">1153</a> <em class="jxr_javadoccomment">   * &lt;p&gt;The compactLock prevents multiple simultaneous compactions.</em>
+<a class="jxr_linenumber" name="1154" href="#1154">1154</a> <em class="jxr_javadoccomment">   * The structureLock prevents us from interfering with other write operations.</em>
 <a class="jxr_linenumber" name="1155" href="#1155">1155</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1156" href="#1156">1156</a> <em class="jxr_javadoccomment">   * See HBASE-2231 for details.</em>
-<a class="jxr_linenumber" name="1157" href="#1157">1157</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="1158" href="#1158">1158</a> <em class="jxr_javadoccomment">   * @param compaction compaction details obtained from requestCompaction()</em>
-<a class="jxr_linenumber" name="1159" href="#1159">1159</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="1160" href="#1160">1160</a> <em class="jxr_javadoccomment">   * @return Storefile we compacted into or null if we failed or opted out early.</em>
-<a class="jxr_linenumber" name="1161" href="#1161">1161</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1162" href="#1162">1162</a>   @Override
-<a class="jxr_linenumber" name="1163" href="#1163">1163</a>   <strong class="jxr_keyword">public</strong> List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
-<a class="jxr_linenumber" name="1164" href="#1164">1164</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1165" href="#1165">1165</a>     <strong class="jxr_keyword">return</strong> compact(compaction, throughputController, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="1166" href="#1166">1166</a>   }
-<a class="jxr_linenumber" name="1167" href="#1167">1167</a> 
-<a class="jxr_linenumber" name="1168" href="#1168">1168</a>   @Override
-<a class="jxr_linenumber" name="1169" href="#1169">1169</a>   <strong class="jxr_keyword">public</strong> List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
-<a class="jxr_linenumber" name="1170" href="#1170">1170</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1171" href="#1171">1171</a>     assert compaction != <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1172" href="#1172">1172</a>     List&lt;StoreFile&gt; sfs = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1173" href="#1173">1173</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> cr = compaction.getRequest();
-<a class="jxr_linenumber" name="1174" href="#1174">1174</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1175" href="#1175">1175</a>       <em class="jxr_comment">// Do all sanity checking in here if we have a valid CompactionRequest</em>
-<a class="jxr_linenumber" name="1176" href="#1176">1176</a>       <em class="jxr_comment">// because we need to clean up after it on the way out in a finally</em>
-<a class="jxr_linenumber" name="1177" href="#1177">1177</a>       <em class="jxr_comment">// block below</em>
-<a class="jxr_linenumber" name="1178" href="#1178">1178</a>       <strong class="jxr_keyword">long</strong> compactionStartTime = EnvironmentEdgeManager.currentTime();
-<a class="jxr_linenumber" name="1179" href="#1179">1179</a>       assert compaction.hasSelection();
-<a class="jxr_linenumber" name="1180" href="#1180">1180</a>       Collection&lt;StoreFile&gt; filesToCompact = cr.getFiles();
-<a class="jxr_linenumber" name="1181" href="#1181">1181</a>       assert !filesToCompact.isEmpty();
-<a class="jxr_linenumber" name="1182" href="#1182">1182</a>       <strong class="jxr_keyword">synchronized</strong> (filesCompacting) {
-<a class="jxr_linenumber" name="1183" href="#1183">1183</a>         <em class="jxr_comment">// sanity check: we're compacting files that this store knows about</em>
-<a class="jxr_linenumber" name="1184" href="#1184">1184</a>         <em class="jxr_comment">// TODO: change this to LOG.error() after more debugging</em>
-<a class="jxr_linenumber" name="1185" href="#1185">1185</a>         Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));
-<a class="jxr_linenumber" name="1186" href="#1186">1186</a>       }
-<a class="jxr_linenumber" name="1187" href="#1187">1187</a> 
-<a class="jxr_linenumber" name="1188" href="#1188">1188</a>       <em class="jxr_comment">// Ready to go. Have list of files to compact.</em>
-<a class="jxr_linenumber" name="1189" href="#1189">1189</a>       LOG.info(<span class="jxr_string">"Starting compaction of "</span> + filesToCompact.size() + <span class="jxr_string">" file(s) in "</span>
-<a class="jxr_linenumber" name="1190" href="#1190">1190</a>           + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" of "</span> + <strong class="jxr_keyword">this</strong>.getRegionInfo().getRegionNameAsString()
-<a class="jxr_linenumber" name="1191" href="#1191">1191</a>           + <span class="jxr_string">" into tmpdir="</span> + fs.getTempDir() + <span class="jxr_string">", totalSize="</span>
-<a class="jxr_linenumber" name="1192" href="#1192">1192</a>           + TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(cr.getSize(), <span class="jxr_string">""</span>, 1));
-<a class="jxr_linenumber" name="1193" href="#1193">1193</a> 
-<a class="jxr_linenumber" name="1194" href="#1194">1194</a>       <em class="jxr_comment">// Commence the compaction.</em>
-<a class="jxr_linenumber" name="1195" href="#1195">1195</a>       List&lt;Path&gt; newFiles = compaction.compact(throughputController, user);
-<a class="jxr_linenumber" name="1196" href="#1196">1196</a> 
-<a class="jxr_linenumber" name="1197" href="#1197">1197</a>       <em class="jxr_comment">// TODO: get rid of this!</em>
-<a class="jxr_linenumber" name="1198" href="#1198">1198</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.conf.getBoolean(<span class="jxr_string">"hbase.hstore.compaction.complete"</span>, <strong class="jxr_keyword">true</strong>)) {
-<a class="jxr_linenumber" name="1199" href="#1199">1199</a>         LOG.warn(<span class="jxr_string">"hbase.hstore.compaction.complete is set to false"</span>);
-<a class="jxr_linenumber" name="1200" href="#1200">1200</a>         sfs = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;(newFiles.size());
-<a class="jxr_linenumber" name="1201" href="#1201">1201</a>         <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> evictOnClose =
-<a class="jxr_linenumber" name="1202" href="#1202">1202</a>             cacheConf != <strong class="jxr_keyword">null</strong>? cacheConf.shouldEvictOnClose(): <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1203" href="#1203">1203</a>         <strong class="jxr_keyword">for</strong> (Path newFile : newFiles) {
-<a class="jxr_linenumber" name="1204" href="#1204">1204</a>           <em class="jxr_comment">// Create storefile around what we wrote with a reader on it.</em>
-<a class="jxr_linenumber" name="1205" href="#1205">1205</a>           <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> sf = createStoreFileAndReader(newFile);
-<a class="jxr_linenumber" name="1206" href="#1206">1206</a>           sf.closeReader(evictOnClose);
-<a class="jxr_linenumber" name="1207" href="#1207">1207</a>           sfs.add(sf);
-<a class="jxr_linenumber" name="1208" href="#1208">1208</a>         }
-<a class="jxr_linenumber" name="1209" href="#1209">1209</a>         <strong class="jxr_keyword">return</strong> sfs;
+<a class="jxr_linenumber" name="1156" href="#1156">1156</a> <em class="jxr_javadoccomment">   * &lt;p&gt;We don't want to hold the structureLock for the whole time, as a compact()</em>
+<a class="jxr_linenumber" name="1157" href="#1157">1157</a> <em class="jxr_javadoccomment">   * can be lengthy and we want to allow cache-flushes during this period.</em>
+<a class="jxr_linenumber" name="1158" href="#1158">1158</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="1159" href="#1159">1159</a> <em class="jxr_javadoccomment">   * &lt;p&gt; Compaction event should be idempotent, since there is no IO Fencing for</em>
+<a class="jxr_linenumber" name="1160" href="#1160">1160</a> <em class="jxr_javadoccomment">   * the region directory in hdfs. A region server might still try to complete the</em>
+<a class="jxr_linenumber" name="1161" href="#1161">1161</a> <em class="jxr_javadoccomment">   * compaction after it lost the region. That is why the following events are carefully</em>
+<a class="jxr_linenumber" name="1162" href="#1162">1162</a> <em class="jxr_javadoccomment">   * ordered for a compaction:</em>
+<a class="jxr_linenumber" name="1163" href="#1163">1163</a> <em class="jxr_javadoccomment">   *  1. Compaction writes new files under region/.tmp directory (compaction output)</em>
+<a class="jxr_linenumber" name="1164" href="#1164">1164</a> <em class="jxr_javadoccomment">   *  2. Compaction atomically moves the temporary file under region directory</em>
+<a class="jxr_linenumber" name="1165" href="#1165">1165</a> <em class="jxr_javadoccomment">   *  3. Compaction appends a WAL edit containing the compaction input and output files.</em>
+<a class="jxr_linenumber" name="1166" href="#1166">1166</a> <em class="jxr_javadoccomment">   *  Forces sync on WAL.</em>
+<a class="jxr_linenumber" name="1167" href="#1167">1167</a> <em class="jxr_javadoccomment">   *  4. Compaction deletes the input files from the region directory.</em>
+<a class="jxr_linenumber" name="1168" href="#1168">1168</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="1169" href="#1169">1169</a> <em class="jxr_javadoccomment">   * Failure conditions are handled like this:</em>
+<a class="jxr_linenumber" name="1170" href="#1170">1170</a> <em class="jxr_javadoccomment">   *  - If RS fails before 2, compaction wont complete. Even if RS lives on and finishes</em>
+<a class="jxr_linenumber" name="1171" href="#1171">1171</a> <em class="jxr_javadoccomment">   *  the compaction later, it will only write the new data file to the region directory.</em>
+<a class="jxr_linenumber" name="1172" href="#1172">1172</a> <em class="jxr_javadoccomment">   *  Since we already have this data, this will be idempotent but we will have a redundant</em>
+<a class="jxr_linenumber" name="1173" href="#1173">1173</a> <em class="jxr_javadoccomment">   *  copy of the data.</em>
+<a class="jxr_linenumber" name="1174" href="#1174">1174</a> <em class="jxr_javadoccomment">   *  - If RS fails between 2 and 3, the region will have a redundant copy of the data. The</em>
+<a class="jxr_linenumber" name="1175" href="#1175">1175</a> <em class="jxr_javadoccomment">   *  RS that failed won't be able to finish snyc() for WAL because of lease recovery in WAL.</em>
+<a class="jxr_linenumber" name="1176" href="#1176">1176</a> <em class="jxr_javadoccomment">   *  - If RS fails after 3, the region region server who opens the region will pick up the</em>
+<a class="jxr_linenumber" name="1177" href="#1177">1177</a> <em class="jxr_javadoccomment">   *  the compaction marker from the WAL and replay it by removing the compaction input files.</em>
+<a class="jxr_linenumber" name="1178" href="#1178">1178</a> <em class="jxr_javadoccomment">   *  Failed RS can also attempt to delete those files, but the operation will be idempotent</em>
+<a class="jxr_linenumber" name="1179" href="#1179">1179</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="1180" href="#1180">1180</a> <em class="jxr_javadoccomment">   * See HBASE-2231 for details.</em>
+<a class="jxr_linenumber" name="1181" href="#1181">1181</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="1182" href="#1182">1182</a> <em class="jxr_javadoccomment">   * @param compaction compaction details obtained from requestCompaction()</em>
+<a class="jxr_linenumber" name="1183" href="#1183">1183</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<a class="jxr_linenumber" name="1184" href="#1184">1184</a> <em class="jxr_javadoccomment">   * @return Storefile we compacted into or null if we failed or opted out early.</em>
+<a class="jxr_linenumber" name="1185" href="#1185">1185</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="1186" href="#1186">1186</a>   @Override
+<a class="jxr_linenumber" name="1187" href="#1187">1187</a>   <strong class="jxr_keyword">public</strong> List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
+<a class="jxr_linenumber" name="1188" href="#1188">1188</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1189" href="#1189">1189</a>     <strong class="jxr_keyword">return</strong> compact(compaction, throughputController, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="1190" href="#1190">1190</a>   }
+<a class="jxr_linenumber" name="1191" href="#1191">1191</a> 
+<a class="jxr_linenumber" name="1192" href="#1192">1192</a>   @Override
+<a class="jxr_linenumber" name="1193" href="#1193">1193</a>   <strong class="jxr_keyword">public</strong> List&lt;StoreFile&gt; compact(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html">CompactionContext</a> compaction,
+<a class="jxr_linenumber" name="1194" href="#1194">1194</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionThroughputController.html">CompactionThroughputController</a> throughputController, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1195" href="#1195">1195</a>     assert compaction != <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1196" href="#1196">1196</a>     List&lt;StoreFile&gt; sfs = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1197" href="#1197">1197</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> cr = compaction.getRequest();
+<a class="jxr_linenumber" name="1198" href="#1198">1198</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1199" href="#1199">1199</a>       <em class="jxr_comment">// Do all sanity checking in here if we have a valid CompactionRequest</em>
+<a class="jxr_linenumber" name="1200" href="#1200">1200</a>       <em class="jxr_comment">// because we need to clean up after it on the way out in a finally</em>
+<a class="jxr_linenumber" name="1201" href="#1201">1201</a>       <em class="jxr_comment">// block below</em>
+<a class="jxr_linenumber" name="1202" href="#1202">1202</a>       <strong class="jxr_keyword">long</strong> compactionStartTime = EnvironmentEdgeManager.currentTime();
+<a class="jxr_linenumber" name="1203" href="#1203">1203</a>       assert compaction.hasSelection();
+<a class="jxr_linenumber" name="1204" href="#1204">1204</a>       Collection&lt;StoreFile&gt; filesToCompact = cr.getFiles();
+<a class="jxr_linenumber" name="1205" href="#1205">1205</a>       assert !filesToCompact.isEmpty();
+<a class="jxr_linenumber" name="1206" href="#1206">1206</a>       <strong class="jxr_keyword">synchronized</strong> (filesCompacting) {
+<a class="jxr_linenumber" name="1207" href="#1207">1207</a>         <em class="jxr_comment">// sanity check: we're compacting files that this store knows about</em>
+<a class="jxr_linenumber" name="1208" href="#1208">1208</a>         <em class="jxr_comment">// TODO: change this to LOG.error() after more debugging</em>
+<a class="jxr_linenumber" name="1209" href="#1209">1209</a>         Preconditions.checkArgument(filesCompacting.containsAll(filesToCompact));
 <a class="jxr_linenumber" name="1210" href="#1210">1210</a>       }
-<a class="jxr_linenumber" name="1211" href="#1211">1211</a>       <em class="jxr_comment">// Do the steps necessary to complete the compaction.</em>
-<a class="jxr_linenumber" name="1212" href="#1212">1212</a>       sfs = moveCompatedFilesIntoPlace(cr, newFiles, user);
-<a class="jxr_linenumber" name="1213" href="#1213">1213</a>       writeCompactionWalRecord(filesToCompact, sfs);
-<a class="jxr_linenumber" name="1214" href="#1214">1214</a>       replaceStoreFiles(filesToCompact, sfs);
-<a class="jxr_linenumber" name="1215" href="#1215">1215</a>       <strong class="jxr_keyword">if</strong> (cr.isMajor()) {
-<a class="jxr_linenumber" name="1216" href="#1216">1216</a>         majorCompactedCellsCount += getCompactionProgress().totalCompactingKVs;
-<a class="jxr_linenumber" name="1217" href="#1217">1217</a>         majorCompactedCellsSize += getCompactionProgress().totalCompactedSize;
-<a class="jxr_linenumber" name="1218" href="#1218">1218</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1219" href="#1219">1219</a>         compactedCellsCount += getCompactionProgress().totalCompactingKVs;
-<a class="jxr_linenumber" name="1220" href="#1220">1220</a>         compactedCellsSize += getCompactionProgress().totalCompactedSize;
-<a class="jxr_linenumber" name="1221" href="#1221">1221</a>       }
-<a class="jxr_linenumber" name="1222" href="#1222">1222</a>       <em class="jxr_comment">// At this point the store will use new files for all new scanners.</em>
-<a class="jxr_linenumber" name="1223" href="#1223">1223</a>       completeCompaction(filesToCompact); <em class="jxr_comment">// update store size.</em>
-<a class="jxr_linenumber" name="1224" href="#1224">1224</a> 
-<a class="jxr_linenumber" name="1225" href="#1225">1225</a>       logCompactionEndMessage(cr, sfs, compactionStartTime);
-<a class="jxr_linenumber" name="1226" href="#1226">1226</a>       <strong class="jxr_keyword">return</strong> sfs;
-<a class="jxr_linenumber" name="1227" href="#1227">1227</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1228" href="#1228">1228</a>       finishCompactionRequest(cr);
-<a class="jxr_linenumber" name="1229" href="#1229">1229</a>     }
-<a class="jxr_linenumber" name="1230" href="#1230">1230</a>   }
-<a class="jxr_linenumber" name="1231" href="#1231">1231</a> 
-<a class="jxr_linenumber" name="1232" href="#1232">1232</a>   <strong class="jxr_keyword">private</strong> List&lt;StoreFile&gt; moveCompatedFilesIntoPlace(
-<a class="jxr_linenumber" name="1233" href="#1233">1233</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> cr, List&lt;Path&gt; newFiles, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1234" href="#1234">1234</a>     List&lt;StoreFile&gt; sfs = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;(newFiles.size());
-<a class="jxr_linenumber" name="1235" href="#1235">1235</a>     <strong class="jxr_keyword">for</strong> (Path newFile : newFiles) {
-<a class="jxr_linenumber" name="1236" href="#1236">1236</a>       assert newFile != <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1237" href="#1237">1237</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> sf = moveFileIntoPlace(newFile);
-<a class="jxr_linenumber" name="1238" href="#1238">1238</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.getCoprocessorHost() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1239" href="#1239">1239</a>         <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> thisStore = <strong class="jxr_keyword">this</strong>;
-<a class="jxr_linenumber" name="1240" href="#1240">1240</a>         <strong class="jxr_keyword">if</strong> (user == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1241" href="#1241">1241</a>           getCoprocessorHost().postCompact(thisStore, sf, cr);
-<a class="jxr_linenumber" name="1242" href="#1242">1242</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1243" href="#1243">1243</a>           <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1244" href="#1244">1244</a>             user.getUGI().doAs(<strong class="jxr_keyword">new</strong> PrivilegedExceptionAction&lt;Void&gt;() {
-<a class="jxr_linenumber" name="1245" href="#1245">1245</a>               @Override
-<a class="jxr_linenumber" name="1246" href="#1246">1246</a>               <strong class="jxr_keyword">public</strong> Void run() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="1247" href="#1247">1247</a>                 getCoprocessorHost().postCompact(thisStore, sf, cr);
-<a class="jxr_linenumber" name="1248" href="#1248">1248</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1249" href="#1249">1249</a>               }
-<a class="jxr_linenumber" name="1250" href="#1250">1250</a>             });
-<a class="jxr_linenumber" name="1251" href="#1251">1251</a>           } <strong class="jxr_keyword">catch</strong> (InterruptedException ie) {
-<a class="jxr_linenumber" name="1252" href="#1252">1252</a>             InterruptedIOException iioe = <strong class="jxr_keyword">new</strong> InterruptedIOException();
-<a class="jxr_linenumber" name="1253" href="#1253">1253</a>             iioe.initCause(ie);
-<a class="jxr_linenumber" name="1254" href="#1254">1254</a>             <strong class="jxr_keyword">throw</strong> iioe;
-<a class="jxr_linenumber" name="1255" href="#1255">1255</a>           }
-<a class="jxr_linenumber" name="1256" href="#1256">1256</a>         }
-<a class="jxr_linenumber" name="1257" href="#1257">1257</a>       }
-<a class="jxr_linenumber" name="1258" href="#1258">1258</a>       assert sf != <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1259" href="#1259">1259</a>       sfs.add(sf);
-<a class="jxr_linenumber" name="1260" href="#1260">1260</a>     }
-<a class="jxr_linenumber" name="1261" href="#1261">1261</a>     <strong class="jxr_keyword">return</strong> sfs;
-<a class="jxr_linenumber" name="1262" href="#1262">1262</a>   }
-<a class="jxr_linenumber" name="1263" href="#1263">1263</a> 
-<a class="jxr_linenumber" name="1264" href="#1264">1264</a>   <em class="jxr_comment">// Package-visible for tests</em>
-<a class="jxr_linenumber" name="1265" href="#1265">1265</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> moveFileIntoPlace(<strong class="jxr_keyword">final</strong> Path newFile) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1266" href="#1266">1266</a>     validateStoreFile(newFile);
-<a class="jxr_linenumber" name="1267" href="#1267">1267</a>     <em class="jxr_comment">// Move the file into the right spot</em>
-<a class="jxr_linenumber" name="1268" href="#1268">1268</a>     Path destPath = fs.commitStoreFile(getColumnFamilyName(), newFile);
-<a class="jxr_linenumber" name="1269" href="#1269">1269</a>     <strong class="jxr_keyword">return</strong> createStoreFileAndReader(destPath);
-<a class="jxr_linenumber" name="1270" href="#1270">1270</a>   }
-<a class="jxr_linenumber" name="1271" href="#1271">1271</a> 
-<a class="jxr_linenumber" name="1272" href="#1272">1272</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1273" href="#1273">1273</a> <em class="jxr_javadoccomment">   * Writes the compaction WAL record.</em>
-<a class="jxr_linenumber" name="1274" href="#1274">1274</a> <em class="jxr_javadoccomment">   * @param filesCompacted Files compacted (input).</em>
-<a class="jxr_linenumber" name="1275" href="#1275">1275</a> <em class="jxr_javadoccomment">   * @param newFiles Files from compaction.</em>
-<a class="jxr_linenumber" name="1276" href="#1276">1276</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1277" href="#1277">1277</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> writeCompactionWalRecord(Collection&lt;StoreFile&gt; filesCompacted,
-<a class="jxr_linenumber" name="1278" href="#1278">1278</a>       Collection&lt;StoreFile&gt; newFiles) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1279" href="#1279">1279</a>     <strong class="jxr_keyword">if</strong> (region.getWAL() == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="1280" href="#1280">1280</a>     List&lt;Path&gt; inputPaths = <strong class="jxr_keyword">new</strong> ArrayList&lt;Path&gt;(filesCompacted.size());
-<a class="jxr_linenumber" name="1281" href="#1281">1281</a>     <strong class="jxr_keyword">for</strong> (StoreFile f : filesCompacted) {
-<a class="jxr_linenumber" name="1282" href="#1282">1282</a>       inputPaths.add(f.getPath());
-<a class="jxr_linenumber" name="1283" href="#1283">1283</a>     }
-<a class="jxr_linenumber" name="1284" href="#1284">1284</a>     List&lt;Path&gt; outputPaths = <strong class="jxr_keyword">new</strong> ArrayList&lt;Path&gt;(newFiles.size());
-<a class="jxr_linenumber" name="1285" href="#1285">1285</a>     <strong class="jxr_keyword">for</strong> (StoreFile f : newFiles) {
-<a class="jxr_linenumber" name="1286" href="#1286">1286</a>       outputPaths.add(f.getPath());
-<a class="jxr_linenumber" name="1287" href="#1287">1287</a>     }
-<a class="jxr_linenumber" name="1288" href="#1288">1288</a>     <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> info = <strong class="jxr_keyword">this</strong>.region.getRegionInfo();
-<a class="jxr_linenumber" name="1289" href="#1289">1289</a>     CompactionDescriptor compactionDescriptor = ProtobufUtil.toCompactionDescriptor(info,
-<a class="jxr_linenumber" name="1290" href="#1290">1290</a>         family.getName(), inputPaths, outputPaths, fs.getStoreDir(getFamily().getNameAsString()));
-<a class="jxr_linenumber" name="1291" href="#1291">1291</a>     WALUtil.writeCompactionMarker(region.getWAL(), <strong class="jxr_keyword">this</strong>.region.getTableDesc(),
-<a class="jxr_linenumber" name="1292" href="#1292">1292</a>         <strong class="jxr_keyword">this</strong>.region.getRegionInfo(), compactionDescriptor, region.getMVCC());
-<a class="jxr_linenumber" name="1293" href="#1293">1293</a>   }
-<a class="jxr_linenumber" name="1294" href="#1294">1294</a> 
-<a class="jxr_linenumber" name="1295" href="#1295">1295</a>   @VisibleForTesting
-<a class="jxr_linenumber" name="1296" href="#1296">1296</a>   <strong class="jxr_keyword">void</strong> replaceStoreFiles(<strong class="jxr_keyword">final</strong> Collection&lt;StoreFile&gt; compactedFiles,
-<a class="jxr_linenumber" name="1297" href="#1297">1297</a>       <strong class="jxr_keyword">final</strong> Collection&lt;StoreFile&gt; result) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1298" href="#1298">1298</a>     <strong class="jxr_keyword">this</strong>.lock.writeLock().lock();
-<a class="jxr_linenumber" name="1299" href="#1299">1299</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1300" href="#1300">1300</a>       <strong class="jxr_keyword">this</strong>.storeEngine.getStoreFileManager().addCompactionResults(compactedFiles, result);
-<a class="jxr_linenumber" name="1301" href="#1301">1301</a>       filesCompacting.removeAll(compactedFiles); <em class="jxr_comment">// safe bc: lock.writeLock();</em>
-<a class="jxr_linenumber" name="1302" href="#1302">1302</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1303" href="#1303">1303</a>       <strong class="jxr_keyword">this</strong>.lock.writeLock().unlock();
-<a class="jxr_linenumber" name="1304" href="#1304">1304</a>     }
-<a class="jxr_linenumber" name="1305" href="#1305">1305</a>   }
-<a class="jxr_linenumber" name="1306" href="#1306">1306</a> 
-<a class="jxr_linenumber" name="1307" href="#1307">1307</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1308" href="#1308">1308</a> <em class="jxr_javadoccomment">   * Log a very elaborate compaction completion message.</em>
-<a class="jxr_linenumber" name="1309" href="#1309">1309</a> <em class="jxr_javadoccomment">   * @param cr Request.</em>
-<a class="jxr_linenumber" name="1310" href="#1310">1310</a> <em class="jxr_javadoccomment">   * @param sfs Resulting files.</em>
-<a class="jxr_linenumber" name="1311" href="#1311">1311</a> <em class="jxr_javadoccomment">   * @param compactionStartTime Start time.</em>
-<a class="jxr_linenumber" name="1312" href="#1312">1312</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1313" href="#1313">1313</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> logCompactionEndMessage(
-<a class="jxr_linenumber" name="1314" href="#1314">1314</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> cr, List&lt;StoreFile&gt; sfs, <strong class="jxr_keyword">long</strong> compactionStartTime) {
-<a class="jxr_linenumber" name="1315" href="#1315">1315</a>     <strong class="jxr_keyword">long</strong> now = EnvironmentEdgeManager.currentTime();
-<a class="jxr_linenumber" name="1316" href="#1316">1316</a>     StringBuilder message = <strong class="jxr_keyword">new</strong> StringBuilder(
-<a class="jxr_linenumber" name="1317" href="#1317">1317</a>       <span class="jxr_string">"Completed"</span> + (cr.isMajor() ? <span class="jxr_string">" major"</span> : <span class="jxr_string">""</span>) + <span class="jxr_string">" compaction of "</span>
-<a class="jxr_linenumber" name="1318" href="#1318">1318</a>       + cr.getFiles().size() + (cr.isAllFiles() ? <span class="jxr_string">" (all)"</span> : <span class="jxr_string">""</span>) + <span class="jxr_string">" file(s) in "</span>
-<a class="jxr_linenumber" name="1319" href="#1319">1319</a>       + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" of "</span> + <strong class="jxr_keyword">this</strong>.getRegionInfo().getRegionNameAsString() + <span class="jxr_string">" into "</span>);
-<a class="jxr_linenumber" name="1320" href="#1320">1320</a>     <strong class="jxr_keyword">if</strong> (sfs.isEmpty()) {
-<a class="jxr_linenumber" name="1321" href="#1321">1321</a>       message.append(<span class="jxr_string">"none, "</span>);
-<a class="jxr_linenumber" name="1322" href="#1322">1322</a>     } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1323" href="#1323">1323</a>       <strong class="jxr_keyword">for</strong> (StoreFile sf: sfs) {
-<a class="jxr_linenumber" name="1324" href="#1324">1324</a>         message.append(sf.getPath().getName());
-<a class="jxr_linenumber" name="1325" href="#1325">1325</a>         message.append(<span class="jxr_string">"(size="</span>);
-<a class="jxr_linenumber" name="1326" href="#1326">1326</a>         message.append(TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(sf.getReader().length(), <span class="jxr_string">""</span>, 1));
-<a class="jxr_linenumber" name="1327" href="#1327">1327</a>         message.append(<span class="jxr_string">"), "</span>);
-<a class="jxr_linenumber" name="1328" href="#1328">1328</a>       }
-<a class="jxr_linenumber" name="1329" href="#1329">1329</a>     }
-<a class="jxr_linenumber" name="1330" href="#1330">1330</a>     message.append(<span class="jxr_string">"total size for store is "</span>)
-<a class="jxr_linenumber" name="1331" href="#1331">1331</a>       .append(StringUtils.TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(storeSize, <span class="jxr_string">""</span>, 1))
-<a class="jxr_linenumber" name="1332" href="#1332">1332</a>       .append(<span class="jxr_string">". This selection was in queue for "</span>)
-<a class="jxr_linenumber" name="1333" href="#1333">1333</a>       .append(StringUtils.formatTimeDiff(compactionStartTime, cr.getSelectionTime()))
-<a class="jxr_linenumber" name="1334" href="#1334">1334</a>       .append(<span class="jxr_string">", and took "</span>).append(StringUtils.formatTimeDiff(now, compactionStartTime))
-<a class="jxr_linenumber" name="1335" href="#1335">1335</a>       .append(<span class="jxr_string">" to execute."</span>);
-<a class="jxr_linenumber" name="1336" href="#1336">1336</a>     LOG.info(message.toString());
-<a class="jxr_linenumber" name="1337" href="#1337">1337</a>     <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="1338" href="#1338">1338</a>       <strong class="jxr_keyword">int</strong> fileCount = storeEngine.getStoreFileManager().getStorefileCount();
-<a class="jxr_linenumber" name="1339" href="#1339">1339</a>       <strong class="jxr_keyword">long</strong> resultSize = 0;
-<a class="jxr_linenumber" name="1340" href="#1340">1340</a>       <strong class="jxr_keyword">for</strong> (StoreFile sf : sfs) {
-<a class="jxr_linenumber" name="1341" href="#1341">1341</a>         resultSize += sf.getReader().length();
-<a class="jxr_linenumber" name="1342" href="#1342">1342</a>       }
-<a class="jxr_linenumber" name="1343" href="#1343">1343</a>       String traceMessage = <span class="jxr_string">"COMPACTION start,end,size out,files in,files out,store size,"</span>
-<a class="jxr_linenumber" name="1344" href="#1344">1344</a>         + <span class="jxr_string">"store files ["</span> + compactionStartTime + <span class="jxr_string">","</span> + now + <span class="jxr_string">","</span> + resultSize + <span class="jxr_string">","</span>
-<a class="jxr_linenumber" name="1345" href="#1345">1345</a>           + cr.getFiles().size() + <span class="jxr_string">","</span> + sfs.size() + <span class="jxr_string">","</span> +  storeSize + <span class="jxr_string">","</span> + fileCount + <span class="jxr_string">"]"</span>;
-<a class="jxr_linenumber" name="1346" href="#1346">1346</a>       LOG.trace(traceMessage);
-<a class="jxr_linenumber" name="1347" href="#1347">1347</a>     }
-<a class="jxr_linenumber" name="1348" href="#1348">1348</a>   }
-<a class="jxr_linenumber" name="1349" href="#1349">1349</a> 
-<a class="jxr_linenumber" name="1350" href="#1350">1350</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1351" href="#1351">1351</a> <em class="jxr_javadoccomment">   * Call to complete a compaction. Its for the case where we find in the WAL a compaction</em>
-<a class="jxr_linenumber" name="1352" href="#1352">1352</a> <em class="jxr_javadoccomment">   * that was not finished.  We could find one recovering a WAL after a regionserver crash.</em>
-<a class="jxr_linenumber" name="1353" href="#1353">1353</a> <em class="jxr_javadoccomment">   * See HBASE-2231.</em>
-<a class="jxr_linenumber" name="1354" href="#1354">1354</a> <em class="jxr_javadoccomment">   * @param compaction</em>
-<a class="jxr_linenumber" name="1355" href="#1355">1355</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1356" href="#1356">1356</a>   @Override
-<a class="jxr_linenumber" name="1357" href="#1357">1357</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> replayCompactionMarker(CompactionDescriptor compaction,
-<a class="jxr_linenumber" name="1358" href="#1358">1358</a>       <strong class="jxr_keyword">boolean</strong> pickCompactionFiles, <strong class="jxr_keyword">boolean</strong> removeFiles)
-<a class="jxr_linenumber" name="1359" href="#1359">1359</a>       <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1360" href="#1360">1360</a>     LOG.debug(<span class="jxr_string">"Completing compaction from the WAL marker"</span>);
-<a class="jxr_linenumber" name="1361" href="#1361">1361</a>     List&lt;String&gt; compactionInputs = compaction.getCompactionInputList();
-<a class="jxr_linenumber" name="1362" href="#1362">1362</a>     List&lt;String&gt; compactionOutputs = Lists.newArrayList(compaction.getCompactionOutputList());
-<a class="jxr_linenumber" name="1363" href="#1363">1363</a> 
-<a class="jxr_linenumber" name="1364" href="#1364">1364</a>     <em class="jxr_comment">// The Compaction Marker is written after the compaction is completed,</em>
-<a class="jxr_linenumber" name="1365" href="#1365">1365</a>     <em class="jxr_comment">// and the files moved into the region/family folder.</em>
-<a class="jxr_linenumber" name="1366" href="#1366">1366</a>     <em class="jxr_comment">//</em>
-<a class="jxr_linenumber" name="1367" href="#1367">1367</a>     <em class="jxr_comment">// If we crash after the entry is written, we may not have removed the</em>
-<a class="jxr_linenumber" name="1368" href="#1368">1368</a>     <em class="jxr_comment">// input files, but the output file is present.</em>
-<a class="jxr_linenumber" name="1369" href="#1369">1369</a>     <em class="jxr_comment">// (The unremoved input files will be removed by this function)</em>
-<a class="jxr_linenumber" name="1370" href="#1370">1370</a>     <em class="jxr_comment">//</em>
-<a class="jxr_linenumber" name="1371" href="#1371">1371</a>     <em class="jxr_comment">// If we scan the directory and the file is not present, it can mean that:</em>
-<a class="jxr_linenumber" name="1372" href="#1372">1372</a>     <em class="jxr_comment">//   - The file was manually removed by the user</em>
-<a class="jxr_linenumber" name="1373" href="#1373">1373</a>     <em class="jxr_comment">//   - The file was removed as consequence of subsequent compaction</em>
-<a class="jxr_linenumber" name="1374" href="#1374">1374</a>     <em class="jxr_comment">// so, we can't do anything with the "compaction output list" because those</em>
-<a class="jxr_linenumber" name="1375" href="#1375">1375</a>     <em class="jxr_comment">// files have already been loaded when opening the region (by virtue of</em>
-<a class="jxr_linenumber" name="1376" href="#1376">1376</a>     <em class="jxr_comment">// being in the store's folder) or they may be missing due to a compaction.</em>
-<a class="jxr_linenumber" name="1377" href="#1377">1377</a> 
-<a class="jxr_linenumber" name="1378" href="#1378">1378</a>     String familyName = <strong class="jxr_keyword">this</strong>.getColumnFamilyName();
-<a class="jxr_linenumber" name="1379" href="#1379">1379</a>     List&lt;String&gt; inputFiles = <strong class="jxr_keyword">new</strong> ArrayList&lt;String&gt;(compactionInputs.size());
-<a class="jxr_linenumber" name="1380" href="#1380">1380</a>     <strong class="jxr_keyword">for</strong> (String compactionInput : compactionInputs) {
-<a class="jxr_linenumber" name="1381" href="#1381">1381</a>       Path inputPath = fs.getStoreFilePath(familyName, compactionInput);
-<a class="jxr_linenumber" name="1382" href="#1382">1382</a>       inputFiles.add(inputPath.getName());
-<a class="jxr_linenumber" name="1383" href="#1383">1383</a>     }
-<a class="jxr_linenumber" name="1384" href="#1384">1384</a> 
-<a class="jxr_linenumber" name="1385" href="#1385">1385</a>     <em class="jxr_comment">//some of the input files might already be deleted</em>
-<a class="jxr_linenumber" name="1386" href="#1386">1386</a>     List&lt;StoreFile&gt; inputStoreFiles = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;(compactionInputs.size());
-<a class="jxr_linenumber" name="1387" href="#1387">1387</a>     <strong class="jxr_keyword">for</strong> (StoreFile sf : <strong class="jxr_keyword">this</strong>.getStorefiles()) {
-<a class="jxr_linenumber" name="1388" href="#1388">1388</a>       <strong class="jxr_keyword">if</strong> (inputFiles.contains(sf.getPath().getName())) {
-<a class="jxr_linenumber" name="1389" href="#1389">1389</a>         inputStoreFiles.add(sf);
-<a class="jxr_linenumber" name="1390" href="#1390">1390</a>       }
-<a class="jxr_linenumber" name="1391" href="#1391">1391</a>     }
-<a class="jxr_linenumber" name="1392" href="#1392">1392</a> 
-<a class="jxr_linenumber" name="1393" href="#1393">1393</a>     <em class="jxr_comment">// check whether we need to pick up the new files</em>
-<a class="jxr_linenumber" name="1394" href="#1394">1394</a>     List&lt;StoreFile&gt; outputStoreFiles = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;(compactionOutputs.size());
-<a class="jxr_linenumber" name="1395" href="#1395">1395</a> 
-<a class="jxr_linenumber" name="1396" href="#1396">1396</a>     <strong class="jxr_keyword">if</strong> (pickCompactionFiles) {
-<a class="jxr_linenumber" name="1397" href="#1397">1397</a>       <strong class="jxr_keyword">for</strong> (StoreFile sf : <strong class="jxr_keyword">this</strong>.getStorefiles()) {
-<a class="jxr_linenumber" name="1398" href="#1398">1398</a>         compactionOutputs.remove(sf.getPath().getName());
-<a class="jxr_linenumber" name="1399" href="#1399">1399</a>       }
-<a class="jxr_linenumber" name="1400" href="#1400">1400</a>       <strong class="jxr_keyword">for</strong> (String compactionOutput : compactionOutputs) {
-<a class="jxr_linenumber" name="1401" href="#1401">1401</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html">StoreFileInfo</a> storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), compactionOutput);
-<a class="jxr_linenumber" name="1402" href="#1402">1402</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> storeFile = createStoreFileAndReader(storeFileInfo);
-<a class="jxr_linenumber" name="1403" href="#1403">1403</a>         outputStoreFiles.add(storeFile);
-<a class="jxr_linenumber" name="1404" href="#1404">1404</a>       }
-<a class="jxr_linenumber" name="1405" href="#1405">1405</a>     }
-<a class="jxr_linenumber" name="1406" href="#1406">1406</a> 
-<a class="jxr_linenumber" name="1407" href="#1407">1407</a>     <strong class="jxr_keyword">if</strong> (!inputStoreFiles.isEmpty() || !outputStoreFiles.isEmpty()) {
-<a class="jxr_linenumber" name="1408" href="#1408">1408</a>       LOG.info(<span class="jxr_string">"Replaying compaction marker, replacing input files: "</span> +
-<a class="jxr_linenumber" name="1409" href="#1409">1409</a>           inputStoreFiles + <span class="jxr_string">" with output files : "</span> + outputStoreFiles);
-<a class="jxr_linenumber" name="1410" href="#1410">1410</a>       <strong class="jxr_keyword">this</strong>.replaceStoreFiles(inputStoreFiles, outputStoreFiles);
-<a class="jxr_linenumber" name="1411" href="#1411">1411</a>       <strong class="jxr_keyword">this</strong>.completeCompaction(inputStoreFiles);
-<a class="jxr_linenumber" name="1412" href="#1412">1412</a>     }
-<a class="jxr_linenumber" name="1413" href="#1413">1413</a>   }
-<a class="jxr_linenumber" name="1414" href="#1414">1414</a> 
-<a class="jxr_linenumber" name="1415" href="#1415">1415</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1416" href="#1416">1416</a> <em class="jxr_javadoccomment">   * This method tries to compact N recent files for testing.</em>
-<a class="jxr_linenumber" name="1417" href="#1417">1417</a> <em class="jxr_javadoccomment">   * Note that because compacting "recent" files only makes sense for some policies,</em>
-<a class="jxr_linenumber" name="1418" href="#1418">1418</a> <em class="jxr_javadoccomment">   * e.g. the default one, it assumes default policy is used. It doesn't use policy,</em>
-<a class="jxr_linenumber" name="1419" href="#1419">1419</a> <em class="jxr_javadoccomment">   * but instead makes a compaction candidate list by itself.</em>
-<a class="jxr_linenumber" name="1420" href="#1420">1420</a> <em class="jxr_javadoccomment">   * @param N Number of files.</em>
-<a class="jxr_linenumber" name="1421" href="#1421">1421</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1422" href="#1422">1422</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> compactRecentForTestingAssumingDefaultPolicy(<strong class="jxr_keyword">int</strong> N) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1423" href="#1423">1423</a>     List&lt;StoreFile&gt; filesToCompact;
-<a class="jxr_linenumber" name="1424" href="#1424">1424</a>     <strong class="jxr_keyword">boolean</strong> isMajor;
-<a class="jxr_linenumber" name="1425" href="#1425">1425</a> 
-<a class="jxr_linenumber" name="1426" href="#1426">1426</a>     <strong class="jxr_keyword">this</strong>.lock.readLock().lock();
-<a class="jxr_linenumber" name="1427" href="#1427">1427</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1428" href="#1428">1428</a>       <strong class="jxr_keyword">synchronized</strong> (filesCompacting) {
-<a class="jxr_linenumber" name="1429" href="#1429">1429</a>         filesToCompact = Lists.newArrayList(storeEngine.getStoreFileManager().getStorefiles());
-<a class="jxr_linenumber" name="1430" href="#1430">1430</a>         <strong class="jxr_keyword">if</strong> (!filesCompacting.isEmpty()) {
-<a class="jxr_linenumber" name="1431" href="#1431">1431</a>           <em class="jxr_comment">// exclude all files older than the newest file we're currently</em>
-<a class="jxr_linenumber" name="1432" href="#1432">1432</a>           <em class="jxr_comment">// compacting. this allows us to preserve contiguity (HBASE-2856)</em>
-<a class="jxr_linenumber" name="1433" href="#1433">1433</a>           <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> last = filesCompacting.get(filesCompacting.size() - 1);
-<a class="jxr_linenumber" name="1434" href="#1434">1434</a>           <strong class="jxr_keyword">int</strong> idx = filesToCompact.indexOf(last);
-<a class="jxr_linenumber" name="1435" href="#1435">1435</a>           Preconditions.checkArgument(idx != -1);
-<a class="jxr_linenumber" name="1436" href="#1436">1436</a>           filesToCompact.subList(0, idx + 1).clear();
-<a class="jxr_linenumber" name="1437" href="#1437">1437</a>         }
-<a class="jxr_linenumber" name="1438" href="#1438">1438</a>         <strong class="jxr_keyword">int</strong> count = filesToCompact.size();
-<a class="jxr_linenumber" name="1439" href="#1439">1439</a>         <strong class="jxr_keyword">if</strong> (N &gt; count) {
-<a class="jxr_linenumber" name="1440" href="#1440">1440</a>           <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Not enough files"</span>);
-<a class="jxr_linenumber" name="1441" href="#1441">1441</a>         }
-<a class="jxr_linenumber" name="1442" href="#1442">1442</a> 
-<a class="jxr_linenumber" name="1443" href="#1443">1443</a>         filesToCompact = filesToCompact.subList(count - N, count);
-<a class="jxr_linenumber" name="1444" href="#1444">1444</a>         isMajor = (filesToCompact.size() == storeEngine.getStoreFileManager().getStorefileCount());
-<a class="jxr_linenumber" name="1445" href="#1445">1445</a>         filesCompacting.addAll(filesToCompact);
-<a class="jxr_linenumber" name="1446" href="#1446">1446</a>         Collections.sort(filesCompacting, StoreFile.Comparators.SEQ_ID);
-<a class="jxr_linenumber" name="1447" href="#1447">1447</a>       }
-<a class="jxr_linenumber" name="1448" href="#1448">1448</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1449" href="#1449">1449</a>       <strong class="jxr_keyword">this</strong>.lock.readLock().unlock();
-<a class="jxr_linenumber" name="1450" href="#1450">1450</a>     }
-<a class="jxr_linenumber" name="1451" href="#1451">1451</a> 
-<a class="jxr_linenumber" name="1452" href="#1452">1452</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1453" href="#1453">1453</a>       <em class="jxr_comment">// Ready to go. Have list of files to compact.</em>
-<a class="jxr_linenumber" name="1454" href="#1454">1454</a>       List&lt;Path&gt; newFiles = ((DefaultCompactor)<strong class="jxr_keyword">this</strong>.storeEngine.getCompactor())
-<a class="jxr_linenumber" name="1455" href="#1455">1455</a>           .compactForTesting(filesToCompact, isMajor);
-<a class="jxr_linenumber" name="1456" href="#1456">1456</a>       <strong class="jxr_keyword">for</strong> (Path newFile: newFiles) {
-<a class="jxr_linenumber" name="1457" href="#1457">1457</a>         <em class="jxr_comment">// Move the compaction into place.</em>
-<a class="jxr_linenumber" name="1458" href="#1458">1458</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> sf = moveFileIntoPlace(newFile);
-<a class="jxr_linenumber" name="1459" href="#1459">1459</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.getCoprocessorHost() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1460" href="#1460">1460</a>           <strong class="jxr_keyword">this</strong>.getCoprocessorHost().postCompact(<strong class="jxr_keyword">this</strong>, sf, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="1211" href="#1211">1211</a> 
+<a class="jxr_linenumber" name="1212" href="#1212">1212</a>       <em class="jxr_comment">// Ready to go. Have list of files to compact.</em>
+<a class="jxr_linenumber" name="1213" href="#1213">1213</a>       LOG.info(<span class="jxr_string">"Starting compaction of "</span> + filesToCompact.size() + <span class="jxr_string">" file(s) in "</span>
+<a class="jxr_linenumber" name="1214" href="#1214">1214</a>           + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" of "</span> + <strong class="jxr_keyword">this</strong>.getRegionInfo().getRegionNameAsString()
+<a class="jxr_linenumber" name="1215" href="#1215">1215</a>           + <span class="jxr_string">" into tmpdir="</span> + fs.getTempDir() + <span class="jxr_string">", totalSize="</span>
+<a class="jxr_linenumber" name="1216" href="#1216">1216</a>           + TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(cr.getSize(), <span class="jxr_string">""</span>, 1));
+<a class="jxr_linenumber" name="1217" href="#1217">1217</a> 
+<a class="jxr_linenumber" name="1218" href="#1218">1218</a>       <em class="jxr_comment">// Commence the compaction.</em>
+<a class="jxr_linenumber" name="1219" href="#1219">1219</a>       List&lt;Path&gt; newFiles = compaction.compact(throughputController, user);
+<a class="jxr_linenumber" name="1220" href="#1220">1220</a> 
+<a class="jxr_linenumber" name="1221" href="#1221">1221</a>       <em class="jxr_comment">// TODO: get rid of this!</em>
+<a class="jxr_linenumber" name="1222" href="#1222">1222</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.conf.getBoolean(<span class="jxr_string">"hbase.hstore.compaction.complete"</span>, <strong class="jxr_keyword">true</strong>)) {
+<a class="jxr_linenumber" name="1223" href="#1223">1223</a>         LOG.warn(<span class="jxr_string">"hbase.hstore.compaction.complete is set to false"</span>);
+<a class="jxr_linenumber" name="1224" href="#1224">1224</a>         sfs = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;(newFiles.size());
+<a class="jxr_linenumber" name="1225" href="#1225">1225</a>         <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> evictOnClose =
+<a class="jxr_linenumber" name="1226" href="#1226">1226</a>             cacheConf != <strong class="jxr_keyword">null</strong>? cacheConf.shouldEvictOnClose(): <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="1227" href="#1227">1227</a>         <strong class="jxr_keyword">for</strong> (Path newFile : newFiles) {
+<a class="jxr_linenumber" name="1228" href="#1228">1228</a>           <em class="jxr_comment">// Create storefile around what we wrote with a reader on it.</em>
+<a class="jxr_linenumber" name="1229" href="#1229">1229</a>           <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> sf = createStoreFileAndReader(newFile);
+<a class="jxr_linenumber" name="1230" href="#1230">1230</a>           sf.closeReader(evictOnClose);
+<a class="jxr_linenumber" name="1231" href="#1231">1231</a>           sfs.add(sf);
+<a class="jxr_linenumber" name="1232" href="#1232">1232</a>         }
+<a class="jxr_linenumber" name="1233" href="#1233">1233</a>         <strong class="jxr_keyword">return</strong> sfs;
+<a class="jxr_linenumber" name="1234" href="#1234">1234</a>       }
+<a class="jxr_linenumber" name="1235" href="#1235">1235</a>       <em class="jxr_comment">// Do the steps necessary to complete the compaction.</em>
+<a class="jxr_linenumber" name="1236" href="#1236">1236</a>       sfs = moveCompatedFilesIntoPlace(cr, newFiles, user);
+<a class="jxr_linenumber" name="1237" href="#1237">1237</a>       writeCompactionWalRecord(filesToCompact, sfs);
+<a class="jxr_linenumber" name="1238" href="#1238">1238</a>       replaceStoreFiles(filesToCompact, sfs);
+<a class="jxr_linenumber" name="1239" href="#1239">1239</a>       <strong class="jxr_keyword">if</strong> (cr.isMajor()) {
+<a class="jxr_linenumber" name="1240" href="#1240">1240</a>         majorCompactedCellsCount += getCompactionProgress().totalCompactingKVs;
+<a class="jxr_linenumber" name="1241" href="#1241">1241</a>         majorCompactedCellsSize += getCompactionProgress().totalCompactedSize;
+<a class="jxr_linenumber" name="1242" href="#1242">1242</a>       } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1243" href="#1243">1243</a>         compactedCellsCount += getCompactionProgress().totalCompactingKVs;
+<a class="jxr_linenumber" name="1244" href="#1244">1244</a>         compactedCellsSize += getCompactionProgress().totalCompactedSize;
+<a class="jxr_linenumber" name="1245" href="#1245">1245</a>       }
+<a class="jxr_linenumber" name="1246" href="#1246">1246</a>       <em class="jxr_comment">// At this point the store will use new files for all new scanners.</em>
+<a class="jxr_linenumber" name="1247" href="#1247">1247</a>       completeCompaction(filesToCompact); <em class="jxr_comment">// update store size.</em>
+<a class="jxr_linenumber" name="1248" href="#1248">1248</a> 
+<a class="jxr_linenumber" name="1249" href="#1249">1249</a>       logCompactionEndMessage(cr, sfs, compactionStartTime);
+<a class="jxr_linenumber" name="1250" href="#1250">1250</a>       <strong class="jxr_keyword">return</strong> sfs;
+<a class="jxr_linenumber" name="1251" href="#1251">1251</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1252" href="#1252">1252</a>       finishCompactionRequest(cr);
+<a class="jxr_linenumber" name="1253" href="#1253">1253</a>     }
+<a class="jxr_linenumber" name="1254" href="#1254">1254</a>   }
+<a class="jxr_linenumber" name="1255" href="#1255">1255</a> 
+<a class="jxr_linenumber" name="1256" href="#1256">1256</a>   <strong class="jxr_keyword">private</strong> List&lt;StoreFile&gt; moveCompatedFilesIntoPlace(
+<a class="jxr_linenumber" name="1257" href="#1257">1257</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> cr, List&lt;Path&gt; newFiles, <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1258" href="#1258">1258</a>     List&lt;StoreFile&gt; sfs = <strong class="jxr_keyword">new</strong> ArrayList&lt;StoreFile&gt;(newFiles.size());
+<a class="jxr_linenumber" name="1259" href="#1259">1259</a>     <strong class="jxr_keyword">for</strong> (Path newFile : newFiles) {
+<a class="jxr_linenumber" name="1260" href="#1260">1260</a>       assert newFile != <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1261" href="#1261">1261</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> sf = moveFileIntoPlace(newFile);
+<a class="jxr_linenumber" name="1262" href="#1262">1262</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.getCoprocessorHost() != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1263" href="#1263">1263</a>         <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html">Store</a> thisStore = <strong class="jxr_keyword">this</strong>;
+<a class="jxr_linenumber" name="1264" href="#1264">1264</a>         <strong class="jxr_keyword">if</strong> (user == <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1265" href="#1265">1265</a>           getCoprocessorHost().postCompact(thisStore, sf, cr);
+<a class="jxr_linenumber" name="1266" href="#1266">1266</a>         } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1267" href="#1267">1267</a>           <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1268" href="#1268">1268</a>             user.getUGI().doAs(<strong class="jxr_keyword">new</strong> PrivilegedExceptionAction&lt;Void&gt;() {
+<a class="jxr_linenumber" name="1269" href="#1269">1269</a>               @Override
+<a class="jxr_linenumber" name="1270" href="#1270">1270</a>               <strong class="jxr_keyword">public</strong> Void run() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="1271" href="#1271">1271</a>                 getCoprocessorHost().postCompact(thisStore, sf, cr);
+<a class="jxr_linenumber" name="1272" href="#1272">1272</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1273" href="#1273">1273</a>               }
+<a class="jxr_linenumber" name="1274" href="#1274">1274</a>             });
+<a class="jxr_linenumber" name="1275" href="#1275">1275</a>           } <strong class="jxr_keyword">catch</strong> (InterruptedException ie) {
+<a class="jxr_linenumber" name="1276" href="#1276">1276</a>             InterruptedIOException iioe = <strong class="jxr_keyword">new</strong> InterruptedIOException();
+<a class="jxr_linenumber" name="1277" href="#1277">1277</a>             iioe.initCause(ie);
+<a class="jxr_linenumber" name="1278" href="#1278">1278</a>             <strong class="jxr_keyword">throw</strong> iioe;
+<a class="jxr_linenumber" name="1279" href="#1279">1279</a>           }
+<a class="jxr_linenumber" name="1280" href="#1280">1280</a>         }
+<a class="jxr_linenumber" name="1281" href="#1281">1281</a>       }
+<a class="jxr_linenumber" name="1282" href="#1282">1282</a>       assert sf != <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="1283" href="#1283">1283</a>       sfs.add(sf);
+<a class="jxr_linenumber" name="1284" href="#1284">1284</a>     }
+<a class="jxr_linenumber" name="1285" href="#1285">1285</a>     <strong class="jxr_keyword">return</strong> sfs;
+<a class="jxr_linenumber" name="1286" href="#1286">1286</a>   }
+<a class="jxr_linenumber" name="1287" href="#1287">1287</a> 
+<a class="jxr_linenumber" name="1288" href="#1288">1288</a>   <em class="jxr_comment">// Package-visible for tests</em>
+<a class="jxr_linenumber" name="1289" href="#1289">1289</a>   <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">StoreFile</a> moveFileIntoPlace(<strong class="jxr_keyword">final</strong> Path newFile) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1290" href="#1290">1290</a>     validateStoreFile(newFile);
+<a class="jxr_linenumber" name="1291" href="#1291">1291</a>     <em class="jxr_comment">// Move the file into the right spot</em>
+<a class="jxr_linenumber" name="1292" href="#1292">1292</a>     Path destPath = fs.commitStoreFile(getColumnFamilyName(), newFile);
+<a class="jxr_linenumber" name="1293" href="#1293">1293</a>     <strong class="jxr_keyword">return</strong> createStoreFileAndReader(destPath);
+<a class="jxr_linenumber" name="1294" href="#1294">1294</a>   }
+<a class="jxr_linenumber" name="1295" href="#1295">1295</a> 
+<a class="jxr_linenumber" name="1296" href="#1296">1296</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1297" href="#1297">1297</a> <em class="jxr_javadoccomment">   * Writes the compaction WAL record.</em>
+<a class="jxr_linenumber" name="1298" href="#1298">1298</a> <em class="jxr_javadoccomment">   * @param filesCompacted Files compacted (input).</em>
+<a class="jxr_linenumber" name="1299" href="#1299">1299</a> <em class="jxr_javadoccomment">   * @param newFiles Files from compaction.</em>
+<a class="jxr_linenumber" name="1300" href="#1300">1300</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="1301" href="#1301">1301</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> writeCompactionWalRecord(Collection&lt;StoreFile&gt; filesCompacted,
+<a class="jxr_linenumber" name="1302" href="#1302">1302</a>       Collection&lt;StoreFile&gt; newFiles) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1303" href="#1303">1303</a>     <strong class="jxr_keyword">if</strong> (region.getWAL() == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="1304" href="#1304">1304</a>     List&lt;Path&gt; inputPaths = <strong class="jxr_keyword">new</strong> ArrayList&lt;Path&gt;(filesCompacted.size());
+<a class="jxr_linenumber" name="1305" href="#1305">1305</a>     <strong class="jxr_keyword">for</strong> (StoreFile f : filesCompacted) {
+<a class="jxr_linenumber" name="1306" href="#1306">1306</a>       inputPaths.add(f.getPath());
+<a class="jxr_linenumber" name="1307" href="#1307">1307</a>     }
+<a class="jxr_linenumber" name="1308" href="#1308">1308</a>     List&lt;Path&gt; outputPaths = <strong class="jxr_keyword">new</strong> ArrayList&lt;Path&gt;(newFiles.size());
+<a class="jxr_linenumber" name="1309" href="#1309">1309</a>     <strong class="jxr_keyword">for</strong> (StoreFile f : newFiles) {
+<a class="jxr_linenumber" name="1310" href="#1310">1310</a>       outputPaths.add(f.getPath());
+<a class="jxr_linenumber" name="1311" href="#1311">1311</a>     }
+<a class="jxr_linenumber" name="1312" href="#1312">1312</a>     <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html">HRegionInfo</a> info = <strong class="jxr_keyword">this</strong>.region.getRegionInfo();
+<a class="jxr_linenumber" name="1313" href="#1313">1313</a>     CompactionDescriptor compactionDescriptor = ProtobufUtil.toCompactionDescriptor(info,
+<a class="jxr_linenumber" name="1314" href="#1314">1314</a>         family.getName(), inputPaths, outputPaths, fs.getStoreDir(getFamily().getNameAsString()));
+<a class="jxr_linenumber" name="1315" href="#1315">1315</a>     WALUtil.writeCompactionMarker(region.getWAL(), <strong class="jxr_keyword">this</strong>.region.getTableDesc(),
+<a class="jxr_linenumber" name="1316" href="#1316">1316</a>         <strong class="jxr_keyword">this</strong>.region.getRegionInfo(), compactionDescriptor, region.getMVCC());
+<a class="jxr_linenumber" name="1317" href="#1317">1317</a>   }
+<a class="jxr_linenumber" name="1318" href="#1318">1318</a> 
+<a class="jxr_linenumber" name="1319" href="#1319">1319</a>   @VisibleForTesting
+<a class="jxr_linenumber" name="1320" href="#1320">1320</a>   <strong class="jxr_keyword">void</strong> replaceStoreFiles(<strong class="jxr_keyword">final</strong> Collection&lt;StoreFile&gt; compactedFiles,
+<a class="jxr_linenumber" name="1321" href="#1321">1321</a>       <strong class="jxr_keyword">final</strong> Collection&lt;StoreFile&gt; result) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1322" href="#1322">1322</a>     <strong class="jxr_keyword">this</strong>.lock.writeLock().lock();
+<a class="jxr_linenumber" name="1323" href="#1323">1323</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="1324" href="#1324">1324</a>       <strong class="jxr_keyword">this</strong>.storeEngine.getStoreFileManager().addCompactionResults(compactedFiles, result);
+<a class="jxr_linenumber" name="1325" href="#1325">1325</a>       filesCompacting.removeAll(compactedFiles); <em class="jxr_comment">// safe bc: lock.writeLock();</em>
+<a class="jxr_linenumber" name="1326" href="#1326">1326</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="1327" href="#1327">1327</a>       <strong class="jxr_keyword">this</strong>.lock.writeLock().unlock();
+<a class="jxr_linenumber" name="1328" href="#1328">1328</a>     }
+<a class="jxr_linenumber" name="1329" href="#1329">1329</a>   }
+<a class="jxr_linenumber" name="1330" href="#1330">1330</a> 
+<a class="jxr_linenumber" name="1331" href="#1331">1331</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1332" href="#1332">1332</a> <em class="jxr_javadoccomment">   * Log a very elaborate compaction completion message.</em>
+<a class="jxr_linenumber" name="1333" href="#1333">1333</a> <em class="jxr_javadoccomment">   * @param cr Request.</em>
+<a class="jxr_linenumber" name="1334" href="#1334">1334</a> <em class="jxr_javadoccomment">   * @param sfs Resulting files.</em>
+<a class="jxr_linenumber" name="1335" href="#1335">1335</a> <em class="jxr_javadoccomment">   * @param compactionStartTime Start time.</em>
+<a class="jxr_linenumber" name="1336" href="#1336">1336</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="1337" href="#1337">1337</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> logCompactionEndMessage(
+<a class="jxr_linenumber" name="1338" href="#1338">1338</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html">CompactionRequest</a> cr, List&lt;StoreFile&gt; sfs, <strong class="jxr_keyword">long</strong> compactionStartTime) {
+<a class="jxr_linenumber" name="1339" href="#1339">1339</a>     <strong class="jxr_keyword">long</strong> now = EnvironmentEdgeManager.currentTime();
+<a class="jxr_linenumber" name="1340" href="#1340">1340</a>     StringBuilder message = <strong class="jxr_keyword">new</strong> StringBuilder(
+<a class="jxr_linenumber" name="1341" href="#1341">1341</a>       <span class="jxr_string">"Completed"</span> + (cr.isMajor() ? <span class="jxr_string">" major"</span> : <span class="jxr_string">""</span>) + <span class="jxr_string">" compaction of "</span>
+<a class="jxr_linenumber" name="1342" href="#1342">1342</a>       + cr.getFiles().size() + (cr.isAllFiles() ? <span class="jxr_string">" (all)"</span> : <span class="jxr_string">""</span>) + <span class="jxr_string">" file(s) in "</span>
+<a class="jxr_linenumber" name="1343" href="#1343">1343</a>       + <strong class="jxr_keyword">this</strong> + <span class="jxr_string">" of "</span> + <strong class="jxr_keyword">this</strong>.getRegionInfo().getRegionNameAsString() + <span class="jxr_string">" into "</span>);
+<a class="jxr_linenumber" name="1344" href="#1344">1344</a>     <strong class="jxr_keyword">if</strong> (sfs.isEmpty()) {
+<a class="jxr_linenumber" name="1345" href="#1345">1345</a>       message.append(<span class="jxr_string">"none, "</span>);
+<a class="jxr_linenumber" name="1346" href="#1346">1346</a>     } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="1347" href="#1347">1347</a>       <strong class="jxr_keyword">for</strong> (StoreFile sf: sfs) {
+<a class="jxr_linenumber" name="1348" href="#1348">1348</a>         message.append(sf.getPath().getName());
+<a class="jxr_linenumber" name="1349" href="#1349">1349</a>         message.append(<span class="jxr_string">"(size="</span>);
+<a class="jxr_linenumber" name="1350" href="#1350">1350</a>         message.append(TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(sf.getReader().length(), <span class="jxr_string">""</span>, 1));
+<a class="jxr_linenumber" name="1351" href="#1351">1351</a>         message.append(<span class="jxr_string">"), "</span>);
+<a class="jxr_linenumber" name="1352" href="#1352">1352</a>       }
+<a class="jxr_linenumber" name="1353" href="#1353">1353</a>     }
+<a class="jxr_linenumber" name="1354" href="#1354">1354</a>     message.append(<span class="jxr_string">"total size for store is "</span>)
+<a class="jxr_linenumber" name="1355" href="#1355">1355</a>       .append(StringUtils.TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(storeSize, <span class="jxr_string">""</span>, 1))
+<a class="jxr_linenumber" name="1356" href="#1356">1356</a>       .append(<span class="jxr_string">". This selection was in queue for "</span>)
+<a class="jxr_linenumber" name="1357" href="#1357">1357</a>       .append(StringUtils.formatTimeDiff(compactionStartTime, cr.getSelectionTime()))
+<a class="jxr_linenumber" name="1358" href="#1358">1358</a>       .append(<span class="jxr_string">", and took "</span>).append(StringUtils.formatTimeDiff(now, compactionStartTime))
+<a class="jxr_linenumber" name="1359" href="#1359">1359</a>       .append(<span class="jxr_string">" to execute."</span>);
+<a class="jxr_linenumber" name="1360" href="#1360">1360</a>     LOG.info(message.toString());
+<a class="jxr_linenumber" name="1361" href="#1361">1361</a>     <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="1362" href="#1362">1362</a>       <strong class="jxr_keyword">int</strong> fileCount = storeEngine.getStoreFileManager().getStorefileCount();
+<a class="jxr_linenumber" name="1363" href="#1363">1363</a>       <strong class="jxr_keyword">long</strong> resultSize = 0;
+<a class="jxr_linenumber" name="1364" href="#1364">1364</a>       <strong class="jxr_keyword">for</strong> (StoreFile sf : sfs) {
+<a class="jxr_linenumber" name="1365" href="#1365">1365</a>         resultSize += sf.getReader().length();
+<a class="jxr_linenumber" name="1366" href="#1366">1366</a>       }
+<a class="jxr_linenumber" name="1367" href="#1367">1367</a>   

<TRUNCATED>

[28/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
index 606c077..0f3725c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
@@ -35,865 +35,885 @@
 <span class="sourceLineNo">027</span>import java.util.NavigableSet;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Set;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.concurrent.CountDownLatch;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Cell;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HConstants;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.IsolationLevel;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.executor.ExecutorService;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import com.google.common.annotations.VisibleForTesting;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * into List&amp;lt;KeyValue&amp;gt; for a single row.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>@InterfaceAudience.Private<a name="line.56"></a>
-<span class="sourceLineNo">057</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  // In unit tests, the store could be null<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected final Store store;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  protected ScanQueryMatcher matcher;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  protected KeyValueHeap heap;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  protected boolean cacheBlocks;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  protected int countPerRow = 0;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  protected int storeLimit = -1;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  protected int storeOffset = 0;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  // Doesnt need to be volatile because it's always accessed via synchronized methods<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  protected boolean closing = false;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  protected final boolean get;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  protected final boolean explicitColumnQuery;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  protected final boolean useRowColBloom;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  /**<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  protected boolean parallelSeekEnabled = false;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  protected ExecutorService executor;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  protected final Scan scan;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected final NavigableSet&lt;byte[]&gt; columns;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected final long oldestUnexpiredTS;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  protected final long now;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected final int minVersions;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  protected final long maxRowSize;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected final long cellsPerHeartbeatCheck;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // Collects all the KVHeap that are eagerly getting closed during the<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  // course of a scan<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected Set&lt;KeyValueHeap&gt; heapsForDelayedClose = new HashSet&lt;KeyValueHeap&gt;();<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private long kvsScanned = 0;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private Cell prevCell = null;<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected static boolean lazySeekEnabledGlobally =<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      LAZY_SEEK_ENABLED_BY_DEFAULT;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * timeout checks.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  // if heap == null and lastTop != null, you need to reseek given the key below<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  protected Cell lastTop = null;<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  // A flag whether use pread for scan<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private boolean scanUsePread = false;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // Indicates whether there was flush during the course of the scan<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  protected volatile boolean flushed = false;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  <a name="line.129"></a>
-<span class="sourceLineNo">130</span>  protected final long readPt;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  enum StoreScannerCompactionRace {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    BEFORE_SEEK,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    AFTER_SEEK,<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    COMPACT_COMPLETE<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.IsolationLevel;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.executor.ExecutorService;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.MatchCode;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import com.google.common.annotations.VisibleForTesting;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * into List&amp;lt;KeyValue&amp;gt; for a single row.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>@InterfaceAudience.Private<a name="line.57"></a>
+<span class="sourceLineNo">058</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // In unit tests, the store could be null<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  protected final Store store;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  protected ScanQueryMatcher matcher;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected KeyValueHeap heap;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  protected boolean cacheBlocks;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  protected int countPerRow = 0;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  protected int storeLimit = -1;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  protected int storeOffset = 0;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  // Doesnt need to be volatile because it's always accessed via synchronized methods<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  protected boolean closing = false;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected final boolean get;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  protected final boolean explicitColumnQuery;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  protected final boolean useRowColBloom;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  /**<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  protected boolean parallelSeekEnabled = false;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  protected ExecutorService executor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  protected final Scan scan;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected final NavigableSet&lt;byte[]&gt; columns;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected final long oldestUnexpiredTS;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected final long now;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected final int minVersions;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected final long maxRowSize;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected final long cellsPerHeartbeatCheck;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  // Collects all the KVHeap that are eagerly getting closed during the<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  // course of a scan<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected Set&lt;KeyValueHeap&gt; heapsForDelayedClose = new HashSet&lt;KeyValueHeap&gt;();<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private long kvsScanned = 0;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private Cell prevCell = null;<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  protected static boolean lazySeekEnabledGlobally =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      LAZY_SEEK_ENABLED_BY_DEFAULT;<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>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * timeout checks.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  // if heap == null and lastTop != null, you need to reseek given the key below<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  protected Cell lastTop = null;<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  // A flag whether use pread for scan<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private boolean scanUsePread = false;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  // Indicates whether there was flush during the course of the scan<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  protected volatile boolean flushed = false;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // generally we get one file from a flush<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  protected List&lt;StoreFile&gt; flushedStoreFiles = new ArrayList&lt;StoreFile&gt;(1);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // The current list of scanners<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  protected List&lt;KeyValueScanner&gt; currentScanners = new ArrayList&lt;KeyValueScanner&gt;();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // flush update lock<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private ReentrantLock flushLock = new ReentrantLock();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  <a name="line.136"></a>
+<span class="sourceLineNo">137</span>  protected final long readPt;<a name="line.137"></a>
 <span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  /** An internal constructor. */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  protected StoreScanner(Store store, Scan scan, final ScanInfo scanInfo,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      final NavigableSet&lt;byte[]&gt; columns, long readPt, boolean cacheBlocks) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    this.readPt = readPt;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    this.store = store;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this.cacheBlocks = cacheBlocks;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    get = scan.isGetScan();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    int numCol = columns == null ? 0 : columns.size();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    explicitColumnQuery = numCol &gt; 0;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    this.scan = scan;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    this.columns = columns;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.now = EnvironmentEdgeManager.currentTime();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    this.oldestUnexpiredTS = now - scanInfo.getTtl();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    this.minVersions = scanInfo.getMinVersions();<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>     // We look up row-column Bloom filters for multi-column queries as part of<a name="line.154"></a>
-<span class="sourceLineNo">155</span>     // the seek operation. However, we also look the row-column Bloom filter<a name="line.155"></a>
-<span class="sourceLineNo">156</span>     // for multi-row (non-"get") scans because this is not done in<a name="line.156"></a>
-<span class="sourceLineNo">157</span>     // StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).<a name="line.157"></a>
-<span class="sourceLineNo">158</span>     this.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>     this.maxRowSize = scanInfo.getTableMaxRowSize();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>     this.scanUsePread = scan.isSmall()? true: scanInfo.isUsePread();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>     this.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>     // Parallel seeking is on if the config allows and more there is more than one store file.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>     if (this.store != null &amp;&amp; this.store.getStorefilesCount() &gt; 1) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>       RegionServerServices rsService = ((HStore)store).getHRegion().getRegionServerServices();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>       if (rsService != null &amp;&amp; scanInfo.isParallelSeekEnabled()) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>         this.parallelSeekEnabled = true;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>         this.executor = rsService.getExecutorService();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>       }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * are not in a compaction.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   *<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param store who we scan<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param scan the spec<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param columns which columns we are scanning<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @throws IOException<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, final NavigableSet&lt;byte[]&gt; columns,<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      long readPt)<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  throws IOException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    if (columns != null &amp;&amp; scan.isRaw()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      throw new DoNotRetryIOException("Cannot specify any column for a raw scan");<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    matcher = new ScanQueryMatcher(scan, scanInfo, columns,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        ScanType.USER_SCAN, Long.MAX_VALUE, HConstants.LATEST_TIMESTAMP,<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    this.store.addChangedReaderObserver(this);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // Pass columns to try to filter out unnecessary StoreFiles.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // key does not exist, then to the start of the next matching Row).<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    // family marker.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        &amp;&amp; lazySeekEnabledGlobally, parallelSeekEnabled);<a name="line.203"></a>
+<span class="sourceLineNo">139</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  enum StoreScannerCompactionRace {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    BEFORE_SEEK,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    AFTER_SEEK,<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    COMPACT_COMPLETE<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>  /** An internal constructor. */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  protected StoreScanner(Store store, Scan scan, final ScanInfo scanInfo,<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      final NavigableSet&lt;byte[]&gt; columns, long readPt, boolean cacheBlocks) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    this.readPt = readPt;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    this.store = store;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    this.cacheBlocks = cacheBlocks;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    get = scan.isGetScan();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    int numCol = columns == null ? 0 : columns.size();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    explicitColumnQuery = numCol &gt; 0;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    this.scan = scan;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    this.columns = columns;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.now = EnvironmentEdgeManager.currentTime();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    this.oldestUnexpiredTS = now - scanInfo.getTtl();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.minVersions = scanInfo.getMinVersions();<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>     // We look up row-column Bloom filters for multi-column queries as part of<a name="line.161"></a>
+<span class="sourceLineNo">162</span>     // the seek operation. However, we also look the row-column Bloom filter<a name="line.162"></a>
+<span class="sourceLineNo">163</span>     // for multi-row (non-"get") scans because this is not done in<a name="line.163"></a>
+<span class="sourceLineNo">164</span>     // StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).<a name="line.164"></a>
+<span class="sourceLineNo">165</span>     this.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>     this.maxRowSize = scanInfo.getTableMaxRowSize();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>     this.scanUsePread = scan.isSmall()? true: scanInfo.isUsePread();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>     this.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>     // Parallel seeking is on if the config allows and more there is more than one store file.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>     if (this.store != null &amp;&amp; this.store.getStorefilesCount() &gt; 1) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>       RegionServerServices rsService = ((HStore)store).getHRegion().getRegionServerServices();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>       if (rsService != null &amp;&amp; scanInfo.isParallelSeekEnabled()) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>         this.parallelSeekEnabled = true;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>         this.executor = rsService.getExecutorService();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>       }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>     }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  protected void addCurrentScanners(List&lt;? extends KeyValueScanner&gt; scanners) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.currentScanners.addAll(scanners);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * are not in a compaction.<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   *<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * @param store who we scan<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @param scan the spec<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @param columns which columns we are scanning<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @throws IOException<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, final NavigableSet&lt;byte[]&gt; columns,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      long readPt)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  throws IOException {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (columns != null &amp;&amp; scan.isRaw()) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      throw new DoNotRetryIOException("Cannot specify any column for a raw scan");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    matcher = new ScanQueryMatcher(scan, scanInfo, columns,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        ScanType.USER_SCAN, Long.MAX_VALUE, HConstants.LATEST_TIMESTAMP,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.store.addChangedReaderObserver(this);<a name="line.203"></a>
 <span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // set storeLimit<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    this.storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.206"></a>
+<span class="sourceLineNo">205</span>    // Pass columns to try to filter out unnecessary StoreFiles.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();<a name="line.206"></a>
 <span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // set rowOffset<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    this.storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // Combine all seeked scanners with a heap<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    resetKVHeap(scanners, store.getComparator());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">208</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // key does not exist, then to the start of the next matching Row).<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // family marker.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        &amp;&amp; lazySeekEnabledGlobally, parallelSeekEnabled);<a name="line.213"></a>
 <span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Used for compactions.&lt;p&gt;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   *<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * Opens a scanner across specified StoreFiles.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * @param store who we scan<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param scan the spec<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param scanners ancillary scanners<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param smallestReadPoint the readPoint that we should use for tracking<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   *          versions<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      long smallestReadPoint, long earliestPutTs) throws IOException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    this(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, null, null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   *<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * Opens a scanner across specified StoreFiles.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @param store who we scan<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @param scan the spec<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * @param scanners ancillary scanners<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param smallestReadPoint the readPoint that we should use for tracking versions<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      List&lt;? extends KeyValueScanner&gt; scanners, long smallestReadPoint, long earliestPutTs,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    this(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        earliestPutTs, dropDeletesFromRow, dropDeletesToRow);<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>  private StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType, long smallestReadPoint,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    this(store, scan, scanInfo, null,<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      ((HStore)store).getHRegion().getReadpoint(IsolationLevel.READ_COMMITTED), false);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (dropDeletesFromRow == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, scanType, smallestReadPoint,<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          earliestPutTs, oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    } else {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, smallestReadPoint, earliestPutTs,<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow, store.getCoprocessorHost());<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>    // Filter the list of scanners using Bloom filters, time range, TTL, etc.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    scanners = selectScannersFrom(scanners);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // Seek all scanners to the initial key<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    // Combine all seeked scanners with a heap<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    resetKVHeap(scanners, store.getComparator());<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">215</span>    // set storeLimit<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    this.storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // set rowOffset<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    this.storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    addCurrentScanners(scanners);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    // Combine all seeked scanners with a heap<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    resetKVHeap(scanners, store.getComparator());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * Used for compactions.&lt;p&gt;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * Opens a scanner across specified StoreFiles.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param store who we scan<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param scan the spec<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param scanners ancillary scanners<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param smallestReadPoint the readPoint that we should use for tracking<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   *          versions<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      long smallestReadPoint, long earliestPutTs) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    this(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, null, null);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   *<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * Opens a scanner across specified StoreFiles.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @param store who we scan<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param scan the spec<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @param scanners ancillary scanners<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * @param smallestReadPoint the readPoint that we should use for tracking versions<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      List&lt;? extends KeyValueScanner&gt; scanners, long smallestReadPoint, long earliestPutTs,<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    this(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        earliestPutTs, dropDeletesFromRow, dropDeletesToRow);<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>  private StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType, long smallestReadPoint,<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    this(store, scan, scanInfo, null,<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      ((HStore)store).getHRegion().getReadpoint(IsolationLevel.READ_COMMITTED), false);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (dropDeletesFromRow == null) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, scanType, smallestReadPoint,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          earliestPutTs, oldestUnexpiredTS, now, store.getCoprocessorHost());<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    } else {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      matcher = new ScanQueryMatcher(scan, scanInfo, null, smallestReadPoint, earliestPutTs,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow, store.getCoprocessorHost());<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>  @VisibleForTesting<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final List&lt;KeyValueScanner&gt; scanners) throws IOException {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    this(scan, scanInfo, scanType, columns, scanners,<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        HConstants.LATEST_TIMESTAMP,<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        // 0 is passed as readpoint because the test bypasses Store<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        0);<a name="line.279"></a>
+<span class="sourceLineNo">272</span>    // Filter the list of scanners using Bloom filters, time range, TTL, etc.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    scanners = selectScannersFrom(scanners);<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    // Seek all scanners to the initial key<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    addCurrentScanners(scanners);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    // Combine all seeked scanners with a heap<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    resetKVHeap(scanners, store.getComparator());<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>  @VisibleForTesting<a name="line.282"></a>
 <span class="sourceLineNo">283</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs)<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        throws IOException {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    this(scan, scanInfo, scanType, columns, scanners, earliestPutTs,<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      // 0 is passed as readpoint because the test bypasses Store<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      0);<a name="line.289"></a>
+<span class="sourceLineNo">284</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      final List&lt;KeyValueScanner&gt; scanners) throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    this(scan, scanInfo, scanType, columns, scanners,<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        HConstants.LATEST_TIMESTAMP,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        // 0 is passed as readpoint because the test bypasses Store<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        0);<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>  public StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs, long readPt)<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  throws IOException {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    this(null, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.matcher = new ScanQueryMatcher(scan, scanInfo, columns, scanType,<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Long.MAX_VALUE, earliestPutTs, oldestUnexpiredTS, now, null);<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>    // In unit tests, the store could be null<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    if (this.store != null) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.store.addChangedReaderObserver(this);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // Seek all scanners to the initial key<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    resetKVHeap(scanners, scanInfo.getComparator());<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>   * Get a filtered list of scanners. Assumes we are not in a compaction.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return list of scanners to seek<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  protected List&lt;KeyValueScanner&gt; getScannersNoCompaction() throws IOException {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    final boolean isCompaction = false;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    boolean usePread = get || scanUsePread;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return selectScannersFrom(store.getScanners(cacheBlocks, get, usePread,<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        isCompaction, matcher, scan.getStartRow(), scan.getStopRow(), this.readPt));<a name="line.317"></a>
+<span class="sourceLineNo">292</span>  @VisibleForTesting<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs)<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        throws IOException {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    this(scan, scanInfo, scanType, columns, scanners, earliestPutTs,<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      // 0 is passed as readpoint because the test bypasses Store<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      0);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      final List&lt;KeyValueScanner&gt; scanners, long earliestPutTs, long readPt)<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  throws IOException {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    this(null, scan, scanInfo, columns, readPt, scan.getCacheBlocks());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this.matcher = new ScanQueryMatcher(scan, scanInfo, columns, scanType,<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        Long.MAX_VALUE, earliestPutTs, oldestUnexpiredTS, now, null);<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>    // In unit tests, the store could be null<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (this.store != null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      this.store.addChangedReaderObserver(this);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    // Seek all scanners to the initial key<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    addCurrentScanners(scanners);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    resetKVHeap(scanners, scanInfo.getComparator());<a name="line.317"></a>
 <span class="sourceLineNo">318</span>  }<a name="line.318"></a>
 <span class="sourceLineNo">319</span><a name="line.319"></a>
 <span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * Seek the specified scanners with the given key<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @param scanners<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param seekKey<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param isLazy true if using lazy seek<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @param isParallelSeek true if using parallel seek<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @throws IOException<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  protected void seekScanners(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      Cell seekKey, boolean isLazy, boolean isParallelSeek)<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      throws IOException {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // key does not exist, then to the start of the next matching Row).<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    // family marker.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    if (isLazy) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      for (KeyValueScanner scanner : scanners) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        scanner.requestSeek(seekKey, false, true);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      }<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } else {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      if (!isParallelSeek) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        long totalScannersSoughtBytes = 0;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        for (KeyValueScanner scanner : scanners) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>          if (totalScannersSoughtBytes &gt;= maxRowSize) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            throw new RowTooBigException("Max row size allowed: " + maxRowSize<a name="line.344"></a>
-<span class="sourceLineNo">345</span>              + ", but row is bigger than that");<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          scanner.seek(seekKey);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          Cell c = scanner.peek();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          if (c != null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>            totalScannersSoughtBytes += CellUtil.estimatedSerializedSizeOf(c);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      } else {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        parallelSeek(scanners, seekKey);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  protected void resetKVHeap(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      CellComparator comparator) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    // Combine all seeked scanners with a heap<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    heap = new KeyValueHeap(scanners, comparator);<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>   * Filters the given list of scanners using Bloom filter, time range, and<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * TTL.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  protected List&lt;KeyValueScanner&gt; selectScannersFrom(<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      final List&lt;? extends KeyValueScanner&gt; allScanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    boolean memOnly;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    boolean filesOnly;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    if (scan instanceof InternalScan) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      InternalScan iscan = (InternalScan)scan;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      memOnly = iscan.isCheckOnlyMemStore();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      filesOnly = iscan.isCheckOnlyStoreFiles();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      memOnly = false;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      filesOnly = false;<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>    List&lt;KeyValueScanner&gt; scanners =<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        new ArrayList&lt;KeyValueScanner&gt;(allScanners.size());<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    // We can only exclude store files based on TTL if minVersions is set to 0.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    // Otherwise, we might have to return KVs that have technically expired.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    long expiredTimestampCutoff = minVersions == 0 ? oldestUnexpiredTS :<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        Long.MIN_VALUE;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // include only those scan files which pass all filters<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    for (KeyValueScanner kvs : allScanners) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      boolean isFile = kvs.isFileScanner();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      if ((!isFile &amp;&amp; filesOnly) || (isFile &amp;&amp; memOnly)) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        continue;<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>      if (kvs.shouldUseScanner(scan, store, expiredTimestampCutoff)) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        scanners.add(kvs);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return scanners;<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>  @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public Cell peek() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    checkResetHeap();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    if (this.heap == null) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      return this.lastTop;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    return this.heap.peek();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  @Override<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  public KeyValue next() {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    // throw runtime exception perhaps?<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    throw new RuntimeException("Never call StoreScanner.next()");<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>  @Override<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public void close() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    close(true);<a name="line.421"></a>
+<span class="sourceLineNo">321</span>   * Get a filtered list of scanners. Assumes we are not in a compaction.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @return list of scanners to seek<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  protected List&lt;KeyValueScanner&gt; getScannersNoCompaction() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final boolean isCompaction = false;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    boolean usePread = get || scanUsePread;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    return selectScannersFrom(store.getScanners(cacheBlocks, get, usePread,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        isCompaction, matcher, scan.getStartRow(), scan.getStopRow(), this.readPt));<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>   * Seek the specified scanners with the given key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param scanners<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param seekKey<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param isLazy true if using lazy seek<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @param isParallelSeek true if using parallel seek<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected void seekScanners(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      Cell seekKey, boolean isLazy, boolean isParallelSeek)<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      throws IOException {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    // key does not exist, then to the start of the next matching Row).<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // family marker.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    if (isLazy) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      for (KeyValueScanner scanner : scanners) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        scanner.requestSeek(seekKey, false, true);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    } else {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      if (!isParallelSeek) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        long totalScannersSoughtBytes = 0;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        for (KeyValueScanner scanner : scanners) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>          if (totalScannersSoughtBytes &gt;= maxRowSize) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            throw new RowTooBigException("Max row size allowed: " + maxRowSize<a name="line.355"></a>
+<span class="sourceLineNo">356</span>              + ", but row is bigger than that");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          scanner.seek(seekKey);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          Cell c = scanner.peek();<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          if (c != null) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>            totalScannersSoughtBytes += CellUtil.estimatedSerializedSizeOf(c);<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>      } else {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        parallelSeek(scanners, seekKey);<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><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  protected void resetKVHeap(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      CellComparator comparator) throws IOException {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    // Combine all seeked scanners with a heap<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    heap = new KeyValueHeap(scanners, comparator);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * Filters the given list of scanners using Bloom filter, time range, and<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * TTL.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected List&lt;KeyValueScanner&gt; selectScannersFrom(<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      final List&lt;? extends KeyValueScanner&gt; allScanners) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    boolean memOnly;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    boolean filesOnly;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (scan instanceof InternalScan) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      InternalScan iscan = (InternalScan)scan;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      memOnly = iscan.isCheckOnlyMemStore();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      filesOnly = iscan.isCheckOnlyStoreFiles();<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    } else {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      memOnly = false;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      filesOnly = false;<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>    List&lt;KeyValueScanner&gt; scanners =<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        new ArrayList&lt;KeyValueScanner&gt;(allScanners.size());<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    // We can only exclude store files based on TTL if minVersions is set to 0.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    // Otherwise, we might have to return KVs that have technically expired.<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    long expiredTimestampCutoff = minVersions == 0 ? oldestUnexpiredTS :<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        Long.MIN_VALUE;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>    // include only those scan files which pass all filters<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    for (KeyValueScanner kvs : allScanners) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      boolean isFile = kvs.isFileScanner();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      if ((!isFile &amp;&amp; filesOnly) || (isFile &amp;&amp; memOnly)) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        continue;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if (kvs.shouldUseScanner(scan, store, expiredTimestampCutoff)) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        scanners.add(kvs);<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>    return scanners;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>  }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>  @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  public Cell peek() {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    checkFlushed();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    if (this.heap == null) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      return this.lastTop;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    return this.heap.peek();<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>  private void close(boolean withHeapClose) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    if (this.closing) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    if (withHeapClose) this.closing = true;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Under test, we dont have a this.store<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (this.store != null) this.store.deleteChangedReaderObserver(this);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (withHeapClose) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      for (KeyValueHeap h : this.heapsForDelayedClose) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        h.close();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      this.heapsForDelayedClose.clear();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      if (this.heap != null) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        this.heap.close();<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        this.heap = null; // CLOSED!<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    } else {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      if (this.heap != null) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        this.heapsForDelayedClose.add(this.heap);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        this.heap = null;<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>    this.lastTop = null; // If both are null, we are closed.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span>  public boolean seek(Cell key) throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    checkResetHeap();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // reset matcher state, in case that underlying store changed<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    checkReseek();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    return this.heap.seek(key);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  @Override<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  public boolean next(List&lt;Cell&gt; outResult) throws IOException {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return next(outResult, NoLimitScannerContext.getInstance());<a name="line.459"></a>
+<span class="sourceLineNo">424</span>  @Override<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  public KeyValue next() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    // throw runtime exception perhaps?<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    throw new RuntimeException("Never call StoreScanner.next()");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public void close() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    close(true);<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>  private void close(boolean withHeapClose) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (this.closing) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    if (withHeapClose) this.closing = true;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    // Under test, we dont have a this.store<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    if (this.store != null) this.store.deleteChangedReaderObserver(this);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    if (withHeapClose) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      for (KeyValueHeap h : this.heapsForDelayedClose) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        h.close();<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      }<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      this.heapsForDelayedClose.clear();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      if (this.heap != null) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        this.heap.close();<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        this.currentScanners.clear();<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        this.heap = null; // CLOSED!<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      if (this.heap != null) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        this.heapsForDelayedClose.add(this.heap);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        this.currentScanners.clear();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        this.heap = null;<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>    this.lastTop = null; // If both are null, we are closed.<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>  /**<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * Get the next row of values from this Store.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @param outResult<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @param scannerContext<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * @return true if there are more rows, false if scanner is done<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   */<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  @Override<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  public boolean next(List&lt;Cell&gt; outResult, ScannerContext scannerContext) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    if (scannerContext == null) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    checkResetHeap();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (checkReseek()) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<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>    // if the heap was left null, then the scanners had previously run out anyways, close and<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // return.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    if (this.heap == null) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // By this time partial close should happened because already heap is null<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      close(false);// Do all cleanup except heap.close()<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>    Cell cell = this.heap.peek();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    if (cell == null) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      close(false);// Do all cleanup except heap.close()<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span>    // only call setRow if the row changes; avoids confusing the query matcher<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // if scanning intra-row<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    // If no limits exists in the scope LimitScope.Between_Cells then we are sure we are changing<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    // rows. Else it is possible we are still traversing the same row so we must perform the row<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    // comparison.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (!scannerContext.hasAnyLimit(LimitScope.BETWEEN_CELLS) ||

<TRUNCATED>

[30/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
index 2ac9890..f7f9d20 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileScanner.html
@@ -56,479 +56,482 @@
 <span class="sourceLineNo">048</span>  private final StoreFile.Reader reader;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>  private final HFileScanner hfs;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private Cell cur = null;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private boolean realSeekDone;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private boolean delayedReseek;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private Cell delayedSeekKV;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private boolean enforceMVCC = false;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private boolean hasMVCCInfo = false;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // A flag represents whether could stop skipping KeyValues for MVCC<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  // if have encountered the next row. Only used for reversed scan<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private boolean stopSkippingKVsIfNextRow = false;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static AtomicLong seekCount;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private ScanQueryMatcher matcher;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private long readPt;<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>   * Implements a {@link KeyValueScanner} on top of the specified {@link HFileScanner}<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * @param hfs HFile scanner<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public StoreFileScanner(StoreFile.Reader reader, HFileScanner hfs, boolean useMVCC,<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      boolean hasMVCC, long readPt) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.readPt = readPt;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    this.reader = reader;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.hfs = hfs;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    this.enforceMVCC = useMVCC;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    this.hasMVCCInfo = hasMVCC;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  boolean isPrimaryReplica() {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    return reader.isPrimaryReplicaReader();<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>  /**<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * Return an array of scanners corresponding to the given<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * set of store files.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      Collection&lt;StoreFile&gt; files,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      boolean cacheBlocks,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      boolean usePread, long readPt) throws IOException {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return getScannersForStoreFiles(files, cacheBlocks,<a name="line.93"></a>
-<span class="sourceLineNo">094</span>                                   usePread, false, false, readPt);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * Return an array of scanners corresponding to the given set of store files.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      Collection&lt;StoreFile&gt; files, boolean cacheBlocks, boolean usePread,<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      boolean isCompaction, boolean useDropBehind, long readPt) throws IOException {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    return getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction,<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        useDropBehind, null, readPt);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  /**<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * Return an array of scanners corresponding to the given set of store files,<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * And set the ScanQueryMatcher for each store file scanner for further<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * optimization<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      Collection&lt;StoreFile&gt; files, boolean cacheBlocks, boolean usePread,<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      boolean isCompaction, boolean canUseDrop,<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      ScanQueryMatcher matcher, long readPt, boolean isPrimaryReplica) throws IOException {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    List&lt;StoreFileScanner&gt; scanners = new ArrayList&lt;StoreFileScanner&gt;(<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        files.size());<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    for (StoreFile file : files) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      StoreFile.Reader r = file.createReader(canUseDrop);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      r.setReplicaStoreFile(isPrimaryReplica);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      StoreFileScanner scanner = r.getStoreFileScanner(cacheBlocks, usePread,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          isCompaction, readPt);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      scanner.setScanQueryMatcher(matcher);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      scanners.add(scanner);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return scanners;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Collection&lt;StoreFile&gt; files, boolean cacheBlocks, boolean usePread,<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    boolean isCompaction, boolean canUseDrop,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    ScanQueryMatcher matcher, long readPt) throws IOException {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    return getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction, canUseDrop,<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      matcher, readPt, true);<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>  public String toString() {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    return "StoreFileScanner[" + hfs.toString() + ", cur=" + cur + "]";<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>  public Cell peek() {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    return cur;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public Cell next() throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    Cell retKey = cur;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    try {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      // only seek if we aren't at the end. cur == null implies 'end'.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      if (cur != null) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        hfs.next();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        setCurrentCell(hfs.getCell());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        if (hasMVCCInfo || this.reader.isBulkLoaded()) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>          skipKVsNewerThanReadpoint();<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>    } catch (FileNotFoundException e) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      throw e;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    } catch(IOException e) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      throw new IOException("Could not iterate " + this, e);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    return retKey;<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>  public boolean seek(Cell key) throws IOException {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    if (seekCount != null) seekCount.incrementAndGet();<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      try {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        if(!seekAtOrAfter(hfs, key)) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          this.cur = null;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          return false;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>        setCurrentCell(hfs.getCell());<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (!hasMVCCInfo &amp;&amp; this.reader.isBulkLoaded()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          return skipKVsNewerThanReadpoint();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        } else {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      } finally {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        realSeekDone = true;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    } catch (FileNotFoundException e) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      throw e;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    } catch (IOException ioe) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      throw new IOException("Could not seek " + this + " to key " + key, ioe);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  public boolean reseek(Cell key) throws IOException {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (seekCount != null) seekCount.incrementAndGet();<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    try {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      try {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        if (!reseekAtOrAfter(hfs, key)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          this.cur = null;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          return false;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        setCurrentCell(hfs.getCell());<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>        if (!hasMVCCInfo &amp;&amp; this.reader.isBulkLoaded()) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          return skipKVsNewerThanReadpoint();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      } finally {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        realSeekDone = true;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    } catch (FileNotFoundException e) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      throw e;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } catch (IOException ioe) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      throw new IOException("Could not reseek " + this + " to key " + key,<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          ioe);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  protected void setCurrentCell(Cell newVal) throws IOException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    this.cur = newVal;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (this.cur != null &amp;&amp; this.reader.isBulkLoaded() &amp;&amp; !this.reader.isSkipResetSeqId()) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      CellUtil.setSequenceId(cur, this.reader.getSequenceID());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  protected boolean skipKVsNewerThanReadpoint() throws IOException {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    // We want to ignore all key-values that are newer than our current<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // readPoint<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    Cell startKV = cur;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    while(enforceMVCC<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        &amp;&amp; cur != null<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        &amp;&amp; (cur.getSequenceId() &gt; readPt)) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      hfs.next();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      setCurrentCell(hfs.getCell());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (this.stopSkippingKVsIfNextRow<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          &amp;&amp; getComparator().compareRows(cur, startKV) &gt; 0) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        return false;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    if (cur == null) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      return false;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return true;<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>  public void close() {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    cur = null;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    this.hfs.close();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (this.reader != null) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      this.reader.decrementRefCount();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   *<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @param s<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * @param k<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @return false if not found or if k is after the end.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @throws IOException<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  public static boolean seekAtOrAfter(HFileScanner s, Cell k)<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  throws IOException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    int result = s.seekTo(k);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if(result &lt; 0) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (result == HConstants.INDEX_KEY_MAGIC) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        // using faked key<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        return true;<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      // Passed KV is smaller than first KV in file, work from start of file<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      return s.seekTo();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    } else if(result &gt; 0) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      // Passed KV is larger than current KV in file, if there is a next<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      // it is the "after", if not then this scanner is done.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return s.next();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // Seeked to the exact key<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    return true;<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>  static boolean reseekAtOrAfter(HFileScanner s, Cell k)<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  throws IOException {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    //This function is similar to seekAtOrAfter function<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    int result = s.reseekTo(k);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    if (result &lt;= 0) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      if (result == HConstants.INDEX_KEY_MAGIC) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        // using faked key<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        return true;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // If up to now scanner is not seeked yet, this means passed KV is smaller<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      // than first KV in file, and it is the first time we seek on this file.<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      // So we also need to work from the start of file.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      if (!s.isSeeked()) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return  s.seekTo();<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      return true;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    // passed KV is larger than current KV in file, if there is a next<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    // it is after, if not then this scanner is done.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    return s.next();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public long getSequenceID() {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return reader.getSequenceID();<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>   * Pretend we have done a seek but don't do it yet, if possible. The hope is<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * that we find requested columns in more recent files and won't have to seek<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * in older files. Creates a fake key/value with the given row/column and the<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * highest (most recent) possible timestamp we might get from this file. When<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * users of such "lazy scanner" need to know the next KV precisely (e.g. when<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * this scanner is at the top of the heap), they run {@link #enforceSeek()}.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * &lt;p&gt;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Note that this function does guarantee that the current KV of this scanner<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * will be advanced to at least the given KV. Because of this, it does have<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * to do a real seek in cases when the seek timestamp is older than the<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * highest timestamp of the file, e.g. when we are trying to seek to the next<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * row/column and use OLDEST_TIMESTAMP in the seek key.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  @Override<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public boolean requestSeek(Cell kv, boolean forward, boolean useBloom)<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      throws IOException {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (kv.getFamilyLength() == 0) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      useBloom = false;<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>    boolean haveToSeek = true;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    if (useBloom) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      // check ROWCOL Bloom filter first.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      if (reader.getBloomFilterType() == BloomType.ROWCOL) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        haveToSeek = reader.passesGeneralRowColBloomFilter(kv);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else if (this.matcher != null &amp;&amp; !matcher.hasNullColumnInQuery() &amp;&amp;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          ((CellUtil.isDeleteFamily(kv) || CellUtil.isDeleteFamilyVersion(kv)))) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        // if there is no such delete family kv in the store file,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        // then no need to seek.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        haveToSeek = reader.passesDeleteFamilyBloomFilter(kv.getRowArray(),<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            kv.getRowOffset(), kv.getRowLength());<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><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    delayedReseek = forward;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    delayedSeekKV = kv;<a name="line.345"></a>
+<span class="sourceLineNo">051</span>  private boolean closed = false;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private boolean realSeekDone;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private boolean delayedReseek;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private Cell delayedSeekKV;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private boolean enforceMVCC = false;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private boolean hasMVCCInfo = false;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  // A flag represents whether could stop skipping KeyValues for MVCC<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  // if have encountered the next row. Only used for reversed scan<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private boolean stopSkippingKVsIfNextRow = false;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static AtomicLong seekCount;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private ScanQueryMatcher matcher;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private long readPt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * Implements a {@link KeyValueScanner} on top of the specified {@link HFileScanner}<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * @param hfs HFile scanner<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public StoreFileScanner(StoreFile.Reader reader, HFileScanner hfs, boolean useMVCC,<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      boolean hasMVCC, long readPt) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.readPt = readPt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    this.reader = reader;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.hfs = hfs;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    this.enforceMVCC = useMVCC;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    this.hasMVCCInfo = hasMVCC;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  boolean isPrimaryReplica() {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    return reader.isPrimaryReplicaReader();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * Return an array of scanners corresponding to the given<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * set of store files.<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      Collection&lt;StoreFile&gt; files,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      boolean cacheBlocks,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      boolean usePread, long readPt) throws IOException {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return getScannersForStoreFiles(files, cacheBlocks,<a name="line.94"></a>
+<span class="sourceLineNo">095</span>                                   usePread, false, false, readPt);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * Return an array of scanners corresponding to the given set of store files.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      Collection&lt;StoreFile&gt; files, boolean cacheBlocks, boolean usePread,<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      boolean isCompaction, boolean useDropBehind, long readPt) throws IOException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    return getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction,<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        useDropBehind, null, readPt);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * Return an array of scanners corresponding to the given set of store files,<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * And set the ScanQueryMatcher for each store file scanner for further<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * optimization<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      Collection&lt;StoreFile&gt; files, boolean cacheBlocks, boolean usePread,<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      boolean isCompaction, boolean canUseDrop,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      ScanQueryMatcher matcher, long readPt, boolean isPrimaryReplica) throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    List&lt;StoreFileScanner&gt; scanners = new ArrayList&lt;StoreFileScanner&gt;(<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        files.size());<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    for (StoreFile file : files) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      StoreFile.Reader r = file.createReader(canUseDrop);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      r.setReplicaStoreFile(isPrimaryReplica);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      StoreFileScanner scanner = r.getStoreFileScanner(cacheBlocks, usePread,<a name="line.122"></a>
+<span class="sourceLineNo">123</span>          isCompaction, readPt);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      scanner.setScanQueryMatcher(matcher);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      scanners.add(scanner);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return scanners;<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>  public static List&lt;StoreFileScanner&gt; getScannersForStoreFiles(<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    Collection&lt;StoreFile&gt; files, boolean cacheBlocks, boolean usePread,<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    boolean isCompaction, boolean canUseDrop,<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    ScanQueryMatcher matcher, long readPt) throws IOException {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    return getScannersForStoreFiles(files, cacheBlocks, usePread, isCompaction, canUseDrop,<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      matcher, readPt, true);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  public String toString() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return "StoreFileScanner[" + hfs.toString() + ", cur=" + cur + "]";<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>  public Cell peek() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    return cur;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public Cell next() throws IOException {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    Cell retKey = cur;<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    try {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      // only seek if we aren't at the end. cur == null implies 'end'.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      if (cur != null) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        hfs.next();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        setCurrentCell(hfs.getCell());<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        if (hasMVCCInfo || this.reader.isBulkLoaded()) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          skipKVsNewerThanReadpoint();<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>    } catch (FileNotFoundException e) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      throw e;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    } catch(IOException e) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      throw new IOException("Could not iterate " + this, e);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return retKey;<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>  public boolean seek(Cell key) throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    if (seekCount != null) seekCount.incrementAndGet();<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    try {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      try {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        if(!seekAtOrAfter(hfs, key)) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          this.cur = null;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          return false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>        setCurrentCell(hfs.getCell());<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (!hasMVCCInfo &amp;&amp; this.reader.isBulkLoaded()) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          return skipKVsNewerThanReadpoint();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      } finally {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        realSeekDone = true;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    } catch (FileNotFoundException e) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      throw e;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    } catch (IOException ioe) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      throw new IOException("Could not seek " + this + " to key " + key, ioe);<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><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public boolean reseek(Cell key) throws IOException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (seekCount != null) seekCount.incrementAndGet();<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>    try {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      try {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (!reseekAtOrAfter(hfs, key)) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          this.cur = null;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          return false;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        setCurrentCell(hfs.getCell());<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>        if (!hasMVCCInfo &amp;&amp; this.reader.isBulkLoaded()) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          return skipKVsNewerThanReadpoint();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        } else {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      } finally {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        realSeekDone = true;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } catch (FileNotFoundException e) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      throw e;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    } catch (IOException ioe) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      throw new IOException("Could not reseek " + this + " to key " + key,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          ioe);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  protected void setCurrentCell(Cell newVal) throws IOException {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    this.cur = newVal;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (this.cur != null &amp;&amp; this.reader.isBulkLoaded() &amp;&amp; !this.reader.isSkipResetSeqId()) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      CellUtil.setSequenceId(cur, this.reader.getSequenceID());<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>  protected boolean skipKVsNewerThanReadpoint() throws IOException {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    // We want to ignore all key-values that are newer than our current<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    // readPoint<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    Cell startKV = cur;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    while(enforceMVCC<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        &amp;&amp; cur != null<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        &amp;&amp; (cur.getSequenceId() &gt; readPt)) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      hfs.next();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      setCurrentCell(hfs.getCell());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      if (this.stopSkippingKVsIfNextRow<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          &amp;&amp; getComparator().compareRows(cur, startKV) &gt; 0) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        return false;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (cur == null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      return false;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return true;<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>  public void close() {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (closed) return;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    cur = null;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.hfs.close();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    if (this.reader != null) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      this.reader.decrementRefCount();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    closed = true;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   *<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @param s<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @param k<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * @return false if not found or if k is after the end.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * @throws IOException<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  public static boolean seekAtOrAfter(HFileScanner s, Cell k)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    int result = s.seekTo(k);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    if(result &lt; 0) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      if (result == HConstants.INDEX_KEY_MAGIC) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        // using faked key<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        return true;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      // Passed KV is smaller than first KV in file, work from start of file<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return s.seekTo();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    } else if(result &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      // Passed KV is larger than current KV in file, if there is a next<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      // it is the "after", if not then this scanner is done.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      return s.next();<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // Seeked to the exact key<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return true;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  static boolean reseekAtOrAfter(HFileScanner s, Cell k)<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  throws IOException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    //This function is similar to seekAtOrAfter function<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    int result = s.reseekTo(k);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    if (result &lt;= 0) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      if (result == HConstants.INDEX_KEY_MAGIC) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        // using faked key<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        return true;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // If up to now scanner is not seeked yet, this means passed KV is smaller<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // than first KV in file, and it is the first time we seek on this file.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      // So we also need to work from the start of file.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (!s.isSeeked()) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        return  s.seekTo();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    // passed KV is larger than current KV in file, if there is a next<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // it is after, if not then this scanner is done.<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return s.next();<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  @Override<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public long getSequenceID() {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return reader.getSequenceID();<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>   * Pretend we have done a seek but don't do it yet, if possible. The hope is<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * that we find requested columns in more recent files and won't have to seek<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * in older files. Creates a fake key/value with the given row/column and the<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * highest (most recent) possible timestamp we might get from this file. When<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * users of such "lazy scanner" need to know the next KV precisely (e.g. when<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * this scanner is at the top of the heap), they run {@link #enforceSeek()}.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * &lt;p&gt;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   * Note that this function does guarantee that the current KV of this scanner<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * will be advanced to at least the given KV. Because of this, it does have<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * to do a real seek in cases when the seek timestamp is older than the<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * highest timestamp of the file, e.g. when we are trying to seek to the next<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * row/column and use OLDEST_TIMESTAMP in the seek key.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  @Override<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public boolean requestSeek(Cell kv, boolean forward, boolean useBloom)<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      throws IOException {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (kv.getFamilyLength() == 0) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      useBloom = false;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>    boolean haveToSeek = true;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    if (useBloom) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      // check ROWCOL Bloom filter first.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      if (reader.getBloomFilterType() == BloomType.ROWCOL) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        haveToSeek = reader.passesGeneralRowColBloomFilter(kv);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      } else if (this.matcher != null &amp;&amp; !matcher.hasNullColumnInQuery() &amp;&amp;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          ((CellUtil.isDeleteFamily(kv) || CellUtil.isDeleteFamilyVersion(kv)))) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        // if there is no such delete family kv in the store file,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // then no need to seek.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        haveToSeek = reader.passesDeleteFamilyBloomFilter(kv.getRowArray(),<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            kv.getRowOffset(), kv.getRowLength());<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>    if (haveToSeek) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // This row/column might be in this store file (or we did not use the<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // Bloom filter), so we still need to seek.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      realSeekDone = false;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      long maxTimestampInFile = reader.getMaxTimestamp();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      long seekTimestamp = kv.getTimestamp();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      if (seekTimestamp &gt; maxTimestampInFile) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Create a fake key that is not greater than the real next key.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        // (Lower timestamps correspond to higher KVs.)<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        // To understand this better, consider that we are asked to seek to<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        // a higher timestamp than the max timestamp in this file. We know that<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        // the next point when we have to consider this file again is when we<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // pass the max timestamp of this file (with the same row/column).<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        setCurrentCell(CellUtil.createFirstOnRowColTS(kv, maxTimestampInFile));<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        // This will be the case e.g. when we need to seek to the next<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        // row/column, and we don't know exactly what they are, so we set the<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        // seek key's timestamp to OLDEST_TIMESTAMP to skip the rest of this<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        // row/column.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        enforceSeek();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return cur != null;<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>    // Multi-column Bloom filter optimization.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    // Create a fake key/value, so that this scanner only bubbles up to the top<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // of the KeyValueHeap in StoreScanner after we scanned this row/column in<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    // all other store files. The query matcher will then just skip this fake<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    // key/value and the store scanner will progress to the next column. This<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // is obviously not a "real real" seek, but unlike the fake KV earlier in<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    // this method, we want this to be propagated to ScanQueryMatcher.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    setCurrentCell(CellUtil.createLastOnRowCol(kv));<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    realSeekDone = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    return true;<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>  Reader getReader() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return reader;<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>  CellComparator getComparator() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return reader.getComparator();<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>  @Override<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public boolean realSeekDone() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return realSeekDone;<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>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public void enforceSeek() throws IOException {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    if (realSeekDone)<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      return;<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (delayedReseek) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      reseek(delayedSeekKV);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    } else {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      seek(delayedSeekKV);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  public void setScanQueryMatcher(ScanQueryMatcher matcher) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    this.matcher = matcher;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  @Override<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  public boolean isFileScanner() {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    return true;<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>  // Test methods<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  static final long getSeekCount() {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    return seekCount.get();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  static final void instrument() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    seekCount = new AtomicLong();<a name="line.424"></a>
+<span class="sourceLineNo">347</span>    delayedReseek = forward;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    delayedSeekKV = kv;<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (haveToSeek) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      // This row/column might be in this store file (or we did not use the<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      // Bloom filter), so we still need to seek.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      realSeekDone = false;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      long maxTimestampInFile = reader.getMaxTimestamp();<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      long seekTimestamp = kv.getTimestamp();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      if (seekTimestamp &gt; maxTimestampInFile) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        // Create a fake key that is not greater than the real next key.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        // (Lower timestamps correspond to higher KVs.)<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        // To understand this better, consider that we are asked to seek to<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        // a higher timestamp than the max timestamp in this file. We know that<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        // the next point when we have to consider this file again is when we<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        // pass the max timestamp of this file (with the same row/column).<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        setCurrentCell(CellUtil.createFirstOnRowColTS(kv, maxTimestampInFile));<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // This will be the case e.g. when we need to seek to the next<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        // row/column, and we don't know exactly what they are, so we set the<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        // seek key's timestamp to OLDEST_TIMESTAMP to skip the rest of this<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        // row/column.<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        enforceSeek();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      return cur != null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Multi-column Bloom filter optimization.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    // Create a fake key/value, so that this scanner only bubbles up to the top<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    // of the KeyValueHeap in StoreScanner after we scanned this row/column in<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    // all other store files. The query matcher will then just skip this fake<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    // key/value and the store scanner will progress to the next column. This<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    // is obviously not a "real real" seek, but unlike the fake KV earlier in<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    // this method, we want this to be propagated to ScanQueryMatcher.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    setCurrentCell(CellUtil.createLastOnRowCol(kv));<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    realSeekDone = true;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    return true;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  Reader getReader() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return reader;<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>  CellComparator getComparator() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    return reader.getComparator();<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>  @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public boolean realSeekDone() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return realSeekDone;<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>  @Override<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  public void enforceSeek() throws IOException {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    if (realSeekDone)<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      return;<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (delayedReseek) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      reseek(delayedSeekKV);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    } else {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      seek(delayedSeekKV);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  public void setScanQueryMatcher(ScanQueryMatcher matcher) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    this.matcher = matcher;<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>  @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  public boolean isFileScanner() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    return true;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>  // Test methods<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  static final long getSeekCount() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    return seekCount.get();<a name="line.424"></a>
 <span class="sourceLineNo">425</span>  }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>  @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  public boolean shouldUseScanner(Scan scan, Store store, long oldestUnexpiredTS) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // if the file has no entries, no need to validate or create a scanner.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte[] cf = store.getFamily().getName();<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    TimeRange timeRange = scan.getColumnFamilyTimeRange().get(cf);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    if (timeRange == null) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      timeRange = scan.getTimeRange();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    return reader.passesTimerangeFilter(timeRange, oldestUnexpiredTS) &amp;&amp; reader<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        .passesKeyRangeFilter(scan) &amp;&amp; reader.passesBloomFilter(scan, scan.getFamilyMap().get(cf));<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  @Override<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  public boolean seekToPreviousRow(Cell originalKey) throws IOException {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      try {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        boolean keepSeeking = false;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        Cell key = originalKey;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        do {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          Cell seekKey = CellUtil.createFirstOnRow(key);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>          if (seekCount != null) seekCount.incrementAndGet();<a name="line.447"></a>
-<span class="sourceLineNo">448</span>          if (!hfs.seekBefore(seekKey)) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>            this.cur = null;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>            return false;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          }<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          Cell curCell = hfs.getCell();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          Cell firstKeyOfPreviousRow = CellUtil.createFirstOnRow(curCell);<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>          if (seekCount != null) seekCount.incrementAndGet();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          if (!seekAtOrAfter(hfs, firstKeyOfPreviousRow)) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            this.cur = null;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>            return false;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>          setCurrentCell(hfs.getCell());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>          this.stopSkippingKVsIfNextRow = true;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          boolean resultOfSkipKVs;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          try {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            resultOfSkipKVs = skipKVsNewerThanReadpoint();<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          } finally {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>            this.stopSkippingKVsIfNextRow = false;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>          }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          if (!resultOfSkipKVs<a name="line.469"></a>
-<span class="sourceLineNo">470</span>              || getComparator().compareRows(cur, firstKeyOfPreviousRow) &gt; 0) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>            keepSeeking = true;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>            key = firstKeyOfPreviousRow;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>            continue;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          } else {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            keepSeeking = false;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } while (keepSeeking);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        return true;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      } finally {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        realSeekDone = true;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    } catch (FileNotFoundException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      throw e;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (IOException ioe) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new IOException("Could not seekToPreviousRow " + this + " to key "<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          + originalKey, ioe);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>  @Override<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  public boolean seekToLastRow() throws IOException {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    byte[] lastRow = reader.getLastRowKey();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    if (lastRow == null) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return false;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    KeyValue seekKey = KeyValueUtil.createFirstOnRow(lastRow);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    if (seek(seekKey)) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      return true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    } else {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      return seekToPreviousRow(seekKey);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>  }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>  @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  public boolean backwardSeek(Cell key) throws IOException {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    seek(key);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (cur == null<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        || getComparator().compareRows(cur, key) &gt; 0) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      return seekToPreviousRow(key);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return true;<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>  @Override<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public Cell getNextIndexedKey() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    return hfs.getNextIndexedKey();<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 void shipped() throws IOException {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    this.hfs.shipped();<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">426</span>  static final void instrument() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    seekCount = new AtomicLong();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public boolean shouldUseScanner(Scan scan, Store store, long oldestUnexpiredTS) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    // if the file has no entries, no need to validate or create a scanner.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    byte[] cf = store.getFamily().getName();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    TimeRange timeRange = scan.getColumnFamilyTimeRange().get(cf);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    if (timeRange == null) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      timeRange = scan.getTimeRange();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    return reader.passesTimerangeFilter(timeRange, oldestUnexpiredTS) &amp;&amp; reader<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        .passesKeyRangeFilter(scan) &amp;&amp; reader.passesBloomFilter(scan, scan.getFamilyMap().get(cf));<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  }<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span>  @Override<a name="line.442"></a>
+<span class="sourceLineNo">443</span>  public boolean seekToPreviousRow(Cell originalKey) throws IOException {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    try {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      try {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        boolean keepSeeking = false;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        Cell key = originalKey;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        do {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>          Cell seekKey = CellUtil.createFirstOnRow(key);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>          if (seekCount != null) seekCount.incrementAndGet();<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          if (!hfs.seekBefore(seekKey)) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>            this.cur = null;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>            return false;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          Cell curCell = hfs.getCell();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          Cell firstKeyOfPreviousRow = CellUtil.createFirstOnRow(curCell);<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>          if (seekCount != null) seekCount.incrementAndGet();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>          if (!seekAtOrAfter(hfs, firstKeyOfPreviousRow)) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            this.cur = null;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>            return false;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>          setCurrentCell(hfs.getCell());<a name="line.464"></a>
+<span class="sourceLineNo">465</span>          this.stopSkippingKVsIfNextRow = true;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          boolean resultOfSkipKVs;<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          try {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            resultOfSkipKVs = skipKVsNewerThanReadpoint();<a name="line.468"></a>
+<span class="sourceLineNo">469</span>          } finally {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>            this.stopSkippingKVsIfNextRow = false;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>          }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>          if (!resultOfSkipKVs<a name="line.472"></a>
+<span class="sourceLineNo">473</span>              || getComparator().compareRows(cur, firstKeyOfPreviousRow) &gt; 0) {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>            keepSeeking = true;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>            key = firstKeyOfPreviousRow;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            continue;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>          } else {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>            keepSeeking = false;<a name="line.478"></a>
+<span class="sourceLineNo">479</span>          }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        } while (keepSeeking);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        return true;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      } finally {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        realSeekDone = true;<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    } catch (FileNotFoundException e) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      throw e;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } catch (IOException ioe) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      throw new IOException("Could not seekToPreviousRow " + this + " to key "<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          + originalKey, ioe);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
+<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span>  @Override<a name="line.493"></a>
+<span class="sourceLineNo">494</span>  public boolean seekToLastRow() throws IOException {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    byte[] lastRow = reader.getLastRowKey();<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    if (lastRow == null) {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return false;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    KeyValue seekKey = KeyValueUtil.createFirstOnRow(lastRow);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    if (seek(seekKey)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      return true;<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      return seekToPreviousRow(seekKey);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  }<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>  @Override<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  public boolean backwardSeek(Cell key) throws IOException {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    seek(key);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    if (cur == null<a name="line.510"></a>
+<span class="sourceLineNo">511</span>        || getComparator().compareRows(cur, key) &gt; 0) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      return seekToPreviousRow(key);<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    return true;<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  }<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>  @Override<a name="line.517"></a>
+<span class="sourceLineNo">518</span>  public Cell getNextIndexedKey() {<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    return hfs.getNextIndexedKey();<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>  @Override<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  public void shipped() throws IOException {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    this.hfs.shipped();<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">526</span>}<a name="line.526"></a>
 
 
 


[44/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 9766c28..8d8689d 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="20151211" />
+    <meta name="Date-Revision-yyyymmdd" content="20151214" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -283,7 +283,7 @@
 <td>1655</td>
 <td>0</td>
 <td>0</td>
-<td>13074</td></tr></table></div>
+<td>13075</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -3576,7 +3576,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>41</td></tr>
+<td>42</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.java</a></td>
 <td>0</td>
@@ -3896,7 +3896,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.Store.java">org/apache/hadoop/hbase/regionserver/Store.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>22</td></tr>
+<td>23</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreEngine.java">org/apache/hadoop/hbase/regionserver/StoreEngine.java</a></td>
 <td>0</td>
@@ -3921,7 +3921,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>9</td></tr>
+<td>10</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlushContext.java">org/apache/hadoop/hbase/regionserver/StoreFlushContext.java</a></td>
 <td>0</td>
@@ -3936,7 +3936,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreScanner.java">org/apache/hadoop/hbase/regionserver/StoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>144</td></tr>
+<td>142</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreUtils.java">org/apache/hadoop/hbase/regionserver/StoreUtils.java</a></td>
 <td>0</td>
@@ -6048,7 +6048,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
-<td>1771</td>
+<td>1770</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>coding</td>
@@ -6132,7 +6132,7 @@
 <li>arrayInitIndent: <tt>&quot;2&quot;</tt></li>
 <li>throwsIndent: <tt>&quot;2&quot;</tt></li>
 <li>basicOffset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>4757</td>
+<td>4758</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>javadoc</td>
@@ -6160,7 +6160,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>331</td>
+<td>332</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -28719,7 +28719,7 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/io/hfile/CacheStats.html#L279">279</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/io/hfile/CacheStats.html#L280">280</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.io.hfile.CacheableDeserializer.java">org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.java</h3>
 <table border="0" class="table table-striped">
@@ -59751,98 +59751,104 @@
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L876">876</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 104).</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1107">1107</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/HStore.html#L1159">1159</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1183">1183</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/HStore.html#L1279">1279</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1303">1303</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/HStore.html#L1354">1354</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/HStore.html#L1629">1629</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1378">1378</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/HStore.html#L1639">1639</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1653">1653</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/HStore.html#L1659">1659</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1663">1663</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/HStore.html#L1753">1753</a></td></tr>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1683">1683</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/HStore.html#L1754">1754</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1777">1777</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/HStore.html#L1988">1988</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1778">1778</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/HStore.html#L2104">2104</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2012">2012</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/HStore.html#L2134">2134</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2128">2128</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/HStore.html#L2158">2158</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 11, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2271">2271</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2295">2295</a></td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>FileTabCharacter</td>
 <td>File contains tab characters (this is the first instance).</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2271">2271</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2295">2295</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.html#L28">28</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -59851,109 +59857,109 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.lang.management.ManagementFactory' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L23">23</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L41">41</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L191">191</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L192">192</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L193">193</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L194">194</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L347">347</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L348">348</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L348">348</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L349">349</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L350">350</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L351">351</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L351">351</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L352">352</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L353">353</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L355">355</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -59962,19 +59968,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configurable' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.html#L23">23</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -59983,19 +59989,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.html#L99">99</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -60004,19 +60010,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/InternalScan.html#L53">53</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -60025,19 +60031,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/InternalScanner.html#L55">55</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60046,13 +60052,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
@@ -60061,67 +60067,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L72">72</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L73">73</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L82">82</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L83">83</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L84">84</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L139">139</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L182">182</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L207">207</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#L208">208</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60130,25 +60136,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Cell' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#L24">24</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#L152">152</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -60157,13 +60163,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60172,79 +60178,79 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.ConcurrentModificationException' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L27">27</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L34">34</a></td></tr>
-<tr class="a">
+<tr class="b">
 <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/Leases.html#L84">84</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L110">110</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L159">159</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L170">170</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L171">171</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L188">188</a></td></tr>
-<tr class="a">
+<tr class="b">
 <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/Leases.html#L196">196</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L206">206</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Leases.html#L218">218</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60253,37 +60259,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.HConstants' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LogRoller.html#L30">30</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.wal.WALActionsListener' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LogRoller.html#L34">34</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LogRoller.html#L39">39</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LogRoller.html#L91">91</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -60292,421 +60298,421 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.LruHashMap.java">org/apache/hadoop/hbase/regionserver/LruHashMap.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.ArrayList' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L28">28</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'implements' have incorrect indentation level 0, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L53">53</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L104">104</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L107">107</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'long' have incorrect indentation level 2, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L110">110</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L143">143</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L157">157</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L169">169</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L318">318</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L348">348</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L352">352</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L402">402</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L416">416</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L422">422</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L423">423</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L424">424</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L424">424</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L440">440</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L458">458</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L541">541</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L542">542</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L543">543</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L544">544</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L545">545</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L546">546</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L548">548</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L548">548</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L549">549</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L549">549</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L551">551</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L552">552</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L553">553</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L554">554</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L555">555</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L556">556</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L557">557</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L558">558</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L559">559</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L560">560</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L562">562</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L585">585</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L586">586</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L587">587</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L588">588</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L589">589</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L590">590</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L593">593</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L593">593</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L594">594</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L594">594</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L595">595</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L596">596</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L597">597</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L598">598</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L599">599</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L600">600</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L601">601</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L602">602</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L603">603</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L604">604</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L606">606</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'implements' have incorrect indentation level 2, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L924">924</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L1024">1024</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L1030">1030</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L1030">1030</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L1031">1031</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L1031">1031</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/LruHashMap.html#L1032">1032</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -60715,85 +60721,85 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Cell' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L23">23</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L45">45</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L46">46</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L69">69</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L82">82</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L88">88</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L101">101</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L102">102</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L103">103</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L104">104</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L105">105</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStore.html#L121">121</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -60802,61 +60808,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.java">org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L32">32</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.util.concurrent.ThreadFactoryBuilder' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L37">37</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L118">118</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L131">131</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L167">167</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L179">179</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L183">183</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.html#L186">186</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -60865,151 +60871,151 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L23">23</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.base.Preconditions' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L63">63</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L103">103</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L104">104</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class FlushHandler should be declared as final.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L227">227</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L395">395</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L432">432</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L434">434</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L435">435</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L479">479</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L480">480</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L481">481</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L484">484</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L485">485</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 5, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L500">500</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L657">657</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L666">666</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L676">676</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EqualsHashCode</td>
 <td>Definition of 'equals()' without corresponding definition of 'hashCode()'.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L707">707</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L738">738</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L747">747</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L762">762</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#L763">763</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -61018,13 +61024,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -61033,13 +61039,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61048,13 +61054,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61063,13 +61069,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactory.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -61078,13 +61084,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactoryImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -61093,19 +61099,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 3, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html#L133">133</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -61114,19 +61120,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.CompatibilitySingletonFactory' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#L30">30</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -61135,13 +61141,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61150,49 +61156,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html#L57">57</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html#L68">68</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html#L69">69</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html#L76">76</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html#L85">85</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html#L86">86</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -61201,25 +61207,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MultiRowMutationProcessor.java">org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Cell' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.html#L27">27</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'MultiRowMutationProcessorResponse' have incorrect indentation level 0, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.html#L43">43</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -61228,37 +61234,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html#L24">24</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html#L72">72</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html#L77">77</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.html#L78">78</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -61267,13 +61273,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NoOpHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/NoOpHeapMemoryTuner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61282,13 +61288,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61297,13 +61303,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61312,55 +61318,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.HBaseInterfaceAudience' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L26">26</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Server' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L28">28</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L40">40</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L57">57</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L59">59</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L65">65</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L67">67</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -61369,13 +61375,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61384,19 +61390,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSDumpServlet.html#L31">31</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -61405,841 +61411,841 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L184">184</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'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>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L286">286</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'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>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L405">405</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L450">450</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>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>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L482">482</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L483">483</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L485">485</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L521">521</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L522">522</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L524">524</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L525">525</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L526">526</a></td>

<TRUNCATED>

[16/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
index 9640466..93346d6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.MultiGetThread.html
@@ -929,524 +929,656 @@
 <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>  @Test<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    HTable table = null;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    try {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      latch = new CountDownLatch(1);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      exceptionLatch = new CountDownLatch(1);<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      // Create KV that will give you two blocks<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      // Create a table with block size as 1024<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.932"></a>
-<span class="sourceLineNo">933</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      // get the block cache and region<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      RegionLocator locator = table.getRegionLocator();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionName);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      Store store = region.getStores().iterator().next();<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      cacheConf.setEvictOnClose(true);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      // insert data. 2 Rows are added<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      insertData(table);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      // flush the data<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      System.out.println("Flushing cache");<a name="line.947"></a>
-<span class="sourceLineNo">948</span>      // Should create one Hfile with 2 blocks<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      region.flush(true);<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      // The block would have been decremented for the scan case as it was<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      // wrapped<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      // before even the postNext hook gets executed.<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      // giving some time for the block to be decremented<a name="line.956"></a>
-<span class="sourceLineNo">957</span>      Thread.sleep(100);<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      boolean usedBlocksFound = false;<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      int refCount = 0;<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      while (iterator.hasNext()) {<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        CachedBlock next = iterator.next();<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        if (cache instanceof BucketCache) {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.965"></a>
-<span class="sourceLineNo">966</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>        } else {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          continue;<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        }<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        if (refCount != 0) {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          // Blocks will be with count 3<a name="line.972"></a>
-<span class="sourceLineNo">973</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.973"></a>
-<span class="sourceLineNo">974</span>          usedBlocksFound = true;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      assertTrue(usedBlocksFound);<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      exceptionLatch.countDown();<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // countdown the latch<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      for (ScanThread thread : scanThreads) {<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        thread.join();<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      iterator = cache.iterator();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      usedBlocksFound = false;<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      refCount = 0;<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      while (iterator.hasNext()) {<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        CachedBlock next = iterator.next();<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        if (cache instanceof BucketCache) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>        } else {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          continue;<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>        if (refCount != 0) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>          // Blocks will be with count 3<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          usedBlocksFound = true;<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      }<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      assertTrue(usedBlocksFound);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      Thread.sleep(5100);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      iterator = cache.iterator();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      refCount = 0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      while (iterator.hasNext()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        CachedBlock next = iterator.next();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (cache instanceof BucketCache) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>          continue;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        assertEquals(0, refCount);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    } finally {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>      if (table != null) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        table.close();<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    int refCount;<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    while (iterator.hasNext()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      CachedBlock next = iterator.next();<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (cache instanceof BucketCache) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      } else {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        continue;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      assertEquals(0, refCount);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  private void insertData(HTable table) throws IOException {<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    Put put = new Put(ROW);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    table.put(put);<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    put = new Put(ROW1);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    table.put(put);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    put = new Put(ROW);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    table.put(put);<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>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      InterruptedException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    for (ScanThread thread : scanThreads) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      thread.start();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return scanThreads;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      throws IOException, InterruptedException {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    for (GetThread thread : getThreads) {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      thread.start();<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    return getThreads;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      throws IOException, InterruptedException {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      thread.start();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    }<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    return multiGetThreads;<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>  }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span><a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    int counter = NO_OF_THREADS;<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      counter = counter - 1;<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        Thread.sleep(100);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    } else {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        Thread.sleep(100);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    int refCount = 0;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    while (iterator.hasNext()) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      CachedBlock next = iterator.next();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>      if (cache instanceof BucketCache) {<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      } else {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        if (expectOnlyZero) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          assertTrue(refCount == 0);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        if (refCount != 0) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>          // Because the scan would have also touched up on these blocks but<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          // it<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>          // would have touched<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>          // all 3<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>          if (getClosed) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>            // If get has closed only the scan's blocks would be available<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          } else {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>          }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        }<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>      } else {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // Because the get would have also touched up on these blocks but it<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // would have touched<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        // upon only 2 additionally<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        if (expectOnlyZero) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          assertTrue(refCount == 0);<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        if (refCount != 0) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (getLatch == null || wrappedCp) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          } else {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private static class MultiGetThread extends Thread {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    private final HTable table;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    public MultiGetThread(HTable table) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      this.table = table;<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    @Override<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    public void run() {<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      gets.add(new Get(ROW));<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      gets.add(new Get(ROW1));<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      try {<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        Result[] r = table.get(gets);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (IOException e) {<a name="line.1169"></a>
+<span class="sourceLineNo">924</span>  public void testBlockEvictionAfterHBASE13082WithCompactionAndFlush()<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      throws IOException, InterruptedException {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    // do flush and scan in parallel<a name="line.926"></a>
+<span class="sourceLineNo">927</span>    HTable table = null;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    try {<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      latch = new CountDownLatch(1);<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      compactionLatch = new CountDownLatch(1);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      TableName tableName =<a name="line.931"></a>
+<span class="sourceLineNo">932</span>          TableName.valueOf("testBlockEvictionAfterHBASE13082WithCompactionAndFlush");<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      // Create a table with block size as 1024<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      // get the block cache and region<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      RegionLocator locator = table.getRegionLocator();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.939"></a>
+<span class="sourceLineNo">940</span>          regionName);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      Store store = region.getStores().iterator().next();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      cacheConf.setEvictOnClose(true);<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>      // insert data. 2 Rows are added<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      Put put = new Put(ROW);<a name="line.948"></a>
+<span class="sourceLineNo">949</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      table.put(put);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      put = new Put(ROW1);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      put.addColumn(FAMILY, QUALIFIER, data);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      table.put(put);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>      assertTrue(Bytes.equals(table.get(new Get(ROW)).value(), data));<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // Should create one Hfile with 2 blocks<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      region.flush(true);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      // read the data and expect same blocks, one new hit, no misses<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      int refCount = 0;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      // Check how this miss is happening<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      // insert a second column, read the row, no new blocks, 3 new hits<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      byte[] data2 = Bytes.add(data, data);<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      put = new Put(ROW);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      table.put(put);<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // flush, one new block<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      System.out.println("Flushing cache");<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      region.flush(true);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      iterateBlockCache(cache, iterator);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      // Create three sets of scan<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      Thread.sleep(100);<a name="line.973"></a>
+<span class="sourceLineNo">974</span>      iterator = cache.iterator();<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      boolean usedBlocksFound = false;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      while (iterator.hasNext()) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        CachedBlock next = iterator.next();<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.978"></a>
+<span class="sourceLineNo">979</span>        if (cache instanceof BucketCache) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        } else {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          continue;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>        }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        if (refCount != 0) {<a name="line.986"></a>
+<span class="sourceLineNo">987</span>          // Blocks will be with count 3<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          usedBlocksFound = true;<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        }<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>      // Make a put and do a flush<a name="line.992"></a>
+<span class="sourceLineNo">993</span>      QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>      data2 = Bytes.add(data, data);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      put = new Put(ROW1);<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      table.put(put);<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      // flush, one new block<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      System.out.println("Flushing cache");<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      region.flush(true);<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      usedBlocksFound = false;<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      System.out.println("Compacting");<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      assertEquals(3, store.getStorefilesCount());<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      store.triggerMajorCompaction();<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      region.compact(true);<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      waitForStoreFileCount(store, 1, 10000); // wait 10 seconds max<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      assertEquals(1, store.getStorefilesCount());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      // Even after compaction is done we will have some blocks that cannot<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // be evicted this is because the scan is still referencing them<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      iterator = cache.iterator();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      while (iterator.hasNext()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        CachedBlock next = iterator.next();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        if (cache instanceof BucketCache) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        } else {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          continue;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        }<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (refCount != 0) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // Blocks will be with count 3 as they are not yet cleared<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          usedBlocksFound = true;<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>      assertTrue("Blocks with non zero ref count should be found ", usedBlocksFound);<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>      // Should not throw exception<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>      compactionLatch.countDown();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      latch.countDown();<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      for (ScanThread thread : scanThreads) {<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        thread.join();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      // by this time all blocks should have been evicted<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      iterator = cache.iterator();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // Since a flush and compaction happened after a scan started<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // we need to ensure that all the original blocks of the compacted file<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // is also removed.<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      iterateBlockCache(cache, iterator);<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>      Result r = table.get(new Get(ROW));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      // The gets would be working on new blocks<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>      iterator = cache.iterator();<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      iterateBlockCache(cache, iterator);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    } finally {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      if (table != null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        table.close();<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><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  @Test<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>  public void testScanWithException() throws IOException, InterruptedException {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    HTable table = null;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      latch = new CountDownLatch(1);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      exceptionLatch = new CountDownLatch(1);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      TableName tableName = TableName.valueOf("testScanWithException");<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      // Create KV that will give you two blocks<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      // Create a table with block size as 1024<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      table = TEST_UTIL.createTable(tableName, FAMILIES_1, 1, 1024,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          CustomInnerRegionObserverWrapper.class.getName());<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      // get the block cache and region<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      RegionLocator locator = table.getRegionLocator();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>      String regionName = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      Region region = TEST_UTIL.getRSForFirstRegionInTable(tableName).getFromOnlineRegions(<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>          regionName);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      Store store = region.getStores().iterator().next();<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      CacheConfig cacheConf = store.getCacheConfig();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      cacheConf.setCacheDataOnWrite(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>      cacheConf.setEvictOnClose(true);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      BlockCache cache = cacheConf.getBlockCache();<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      // insert data. 2 Rows are added<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      insertData(table);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>      // flush the data<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      System.out.println("Flushing cache");<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      // Should create one Hfile with 2 blocks<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      region.flush(true);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      // CustomInnerRegionObserver.sleepTime.set(5000);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      CustomInnerRegionObserver.throwException.set(true);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>      ScanThread[] scanThreads = initiateScan(table, false);<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      // The block would have been decremented for the scan case as it was<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      // wrapped<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // before even the postNext hook gets executed.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      // giving some time for the block to be decremented<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      Thread.sleep(100);<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>      Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>      boolean usedBlocksFound = false;<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      int refCount = 0;<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      while (iterator.hasNext()) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        CachedBlock next = iterator.next();<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        if (cache instanceof BucketCache) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        } else {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>          continue;<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>        if (refCount != 0) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>          // Blocks will be with count 3<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          usedBlocksFound = true;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        }<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>      }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      assertTrue(usedBlocksFound);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>      exceptionLatch.countDown();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // countdown the latch<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      for (ScanThread thread : scanThreads) {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        thread.join();<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      iterator = cache.iterator();<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>      usedBlocksFound = false;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>      refCount = 0;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      while (iterator.hasNext()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        CachedBlock next = iterator.next();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>        if (cache instanceof BucketCache) {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        } else {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>          continue;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        if (refCount != 0) {<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>          // Blocks will be with count 3<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>          assertEquals(NO_OF_THREADS, refCount);<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          usedBlocksFound = true;<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>        }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>      }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      assertTrue(usedBlocksFound);<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>      // Sleep till the scan lease would expire? Can we reduce this value?<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>      Thread.sleep(5100);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      iterator = cache.iterator();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      refCount = 0;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>      while (iterator.hasNext()) {<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>        CachedBlock next = iterator.next();<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>        if (cache instanceof BucketCache) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>          refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        } else if (cache instanceof CombinedBlockCache) {<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        } else {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>          continue;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        assertEquals(0, refCount);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      }<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    } finally {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>      if (table != null) {<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>        table.close();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span><a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>  private void iterateBlockCache(BlockCache cache, Iterator&lt;CachedBlock&gt; iterator) {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    int refCount;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    while (iterator.hasNext()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      CachedBlock next = iterator.next();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>      if (cache instanceof BucketCache) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      } else {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        continue;<a name="line.1169"></a>
 <span class="sourceLineNo">1170</span>      }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    }<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  private static class GetThread extends Thread {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    private final HTable table;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    private final boolean tracker;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    private final boolean multipleCFs;<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span><a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      this.table = table;<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>      this.tracker = tracker;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      this.multipleCFs = multipleCFs;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span><a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    @Override<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    public void run() {<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>      try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>        initiateGet(table);<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      } catch (IOException e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>        // do nothing<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    private void initiateGet(HTable table) throws IOException {<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      Get get = new Get(ROW);<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      if (tracker) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>        // Change this<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        if (!multipleCFs) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 3));<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 8));<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 9));<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>          // Unknown key<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>          get.addColumn(FAMILY, Bytes.toBytes("testQualifier" + 900));<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>        } else {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>          get.addColumn(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3));<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>          get.addColumn(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9));<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>          // Unknown key<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>          get.addColumn(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 900));<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>        }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      Result r = table.get(get);<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      System.out.println(r);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      if (!tracker) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER), data));<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>        assertTrue(Bytes.equals(r.getValue(FAMILY, QUALIFIER2), data2));<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      } else {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>        if (!multipleCFs) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 3)), data2));<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 8)), data2));<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>          assertTrue(Bytes.equals(r.getValue(FAMILY, Bytes.toBytes("testQualifier" + 9)), data2));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        } else {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>          assertTrue(Bytes.equals(<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>              r.getValue(Bytes.toBytes("testFamily" + 3), Bytes.toBytes("testQualifier" + 3)),<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>              data2));<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          assertTrue(Bytes.equals(<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              r.getValue(Bytes.toBytes("testFamily" + 8), Bytes.toBytes("testQualifier" + 8)),<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>              data2));<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>          assertTrue(Bytes.equals(<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>              r.getValue(Bytes.toBytes("testFamily" + 9), Bytes.toBytes("testQualifier" + 9)),<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>              data2));<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span><a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  private static class ScanThread extends Thread {<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    private final HTable table;<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    private final boolean reverse;<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span><a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    public ScanThread(HTable table, boolean reverse) {<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>      this.table = table;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>      this.reverse = reverse;<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span><a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    @Override<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    public void run() {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>      try {<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        initiateScan(table);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      } catch (IOException e) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        // do nothing<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      }<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span><a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>    private void initiateScan(HTable table) throws IOException {<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      Scan scan = new Scan();<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      if (reverse) {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>        scan.setReversed(true);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>      }<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      ResultScanner resScanner = table.getScanner(scan);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      int i = (reverse ? ROWS.length - 1 : 0);<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>      boolean resultFound = false;<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      for (Result result : resScanner) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        resultFound = true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        System.out.println(result);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>        if (!reverse) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>          i++;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>        } else {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>          assertTrue(Bytes.equals(result.getRow(), ROWS[i]));<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>          i--;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      assertTrue(resultFound);<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  }<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span><a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>  private void waitForStoreFileCount(Store store, int count, int timeout)<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      throws InterruptedException {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    long start = System.currentTimeMillis();<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    while (start + timeout &gt; System.currentTimeMillis() &amp;&amp; store.getStorefilesCount() != count) {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      Thread.sleep(100);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    System.out.println("start=" + start + ", now=" + System.currentTimeMillis() + ", cur="<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        + store.getStorefilesCount());<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    assertEquals(count, store.getStorefilesCount());<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span><a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  private static class CustomScanner implements RegionScanner {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    private RegionScanner delegate;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span><a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    public CustomScanner(RegionScanner delegate) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      this.delegate = delegate;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span><a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    public boolean next(List&lt;Cell&gt; results) throws IOException {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      return delegate.next(results);<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    @Override<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    public boolean next(List&lt;Cell&gt; result, ScannerContext scannerContext) throws IOException {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return delegate.next(result, scannerContext);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public boolean nextRaw(List&lt;Cell&gt; result) throws IOException {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return delegate.nextRaw(result);<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    public boolean nextRaw(List&lt;Cell&gt; result, ScannerContext context) throws IOException {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      boolean nextRaw = delegate.nextRaw(result, context);<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      if (compactionLatch != null &amp;&amp; compactionLatch.getCount() &gt; 0) {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>        try {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          compactionLatch.await();<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>        } catch (InterruptedException ie) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>      }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      if (CustomInnerRegionObserver.throwException.get()) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (exceptionLatch.getCount() &gt; 0) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          try {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            exceptionLatch.await();<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          } catch (InterruptedException e) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>          throw new IOException("throw exception");<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        }<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>      return nextRaw;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>    }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    @Override<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    public void close() throws IOException {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      delegate.close();<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span><a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    @Override<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    public HRegionInfo getRegionInfo() {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      return delegate.getRegionInfo();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    }<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span><a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    @Override<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    public boolean isFilterDone() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return delegate.isFilterDone();<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    public boolean reseek(byte[] row) throws IOException {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>      return false;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span><a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    @Override<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    public long getMaxResultSize() {<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>      return delegate.getMaxResultSize();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    public long getMvccReadPoint() {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      return delegate.getMvccReadPoint();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span><a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    @Override<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>    public int getBatch() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      return delegate.getBatch();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>    @Override<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    public void shipped() throws IOException {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      this.delegate.shipped();<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span><a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>  public static class CustomInnerRegionObserverWrapper extends CustomInnerRegionObserver {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    @Override<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    public RegionScanner postScannerOpen(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        Scan scan, RegionScanner s) throws IOException {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      return new CustomScanner(s);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>  }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span><a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>  public static class CustomInnerRegionObserver extends BaseRegionObserver {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    static final AtomicLong sleepTime = new AtomicLong(0);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    static final AtomicBoolean slowDownNext = new AtomicBoolean(false);<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    static final AtomicInteger countOfNext = new AtomicInteger(0);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    static final AtomicInteger countOfGets = new AtomicInteger(0);<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    static final AtomicBoolean waitForGets = new AtomicBoolean(false);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    static final AtomicBoolean throwException = new AtomicBoolean(false);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    private static final AtomicReference&lt;CountDownLatch&gt; cdl = new AtomicReference&lt;CountDownLatch&gt;(<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        new CountDownLatch(0));<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>    public boolean postScannerNext(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e,<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        InternalScanner s, List&lt;Result&gt; results, int limit, boolean hasMore) throws IOException {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      slowdownCode(e, false);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      if (getLatch != null &amp;&amp; getLatch.getCount() &gt; 0) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>          getLatch.await();<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        } catch (InterruptedException e1) {<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      return super.postScannerNext(e, s, results, limit, hasMore);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>    public void postGetOp(ObserverContext&lt;RegionCoprocessorEnvironment&gt; e, Get get,<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        List&lt;Cell&gt; results) throws IOException {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      slowdownCode(e, true);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      super.postGetOp(e, get, results);<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>    }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    public static AtomicReference&lt;CountDownLatch&gt; getCdl() {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      return cdl;<a name="line.1416"></a>
+<span class="sourceLineNo">1171</span>      assertEquals(0, refCount);<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  private void insertData(HTable table) throws IOException {<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    Put put = new Put(ROW);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    table.put(put);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    put = new Put(ROW1);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    put.addColumn(FAMILY, QUALIFIER, data);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    table.put(put);<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    byte[] QUALIFIER2 = Bytes.add(QUALIFIER, QUALIFIER);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    put = new Put(ROW);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    put.addColumn(FAMILY, QUALIFIER2, data2);<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    table.put(put);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span><a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  private ScanThread[] initiateScan(HTable table, boolean reverse) throws IOException,<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>      InterruptedException {<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    ScanThread[] scanThreads = new ScanThread[NO_OF_THREADS];<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      scanThreads[i] = new ScanThread(table, reverse);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    for (ScanThread thread : scanThreads) {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>      thread.start();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    }<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return scanThreads;<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  private GetThread[] initiateGet(HTable table, boolean tracker, boolean multipleCFs)<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      throws IOException, InterruptedException {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    GetThread[] getThreads = new GetThread[NO_OF_THREADS];<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      getThreads[i] = new GetThread(table, tracker, multipleCFs);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    for (GetThread thread : getThreads) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      thread.start();<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    return getThreads;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  }<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span><a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>  private MultiGetThread[] initiateMultiGet(HTable table)<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      throws IOException, InterruptedException {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    MultiGetThread[] multiGetThreads = new MultiGetThread[NO_OF_THREADS];<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    for (int i = 0; i &lt; NO_OF_THREADS; i++) {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      multiGetThreads[i] = new MultiGetThread(table);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    for (MultiGetThread thread : multiGetThreads) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      thread.start();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    return multiGetThreads;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span><a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  private void checkForBlockEviction(BlockCache cache, boolean getClosed, boolean expectOnlyZero,<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      boolean wrappedCp) throws InterruptedException {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    int counter = NO_OF_THREADS;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Because only one row is selected, it has only 2 blocks<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      counter = counter - 1;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      while (CustomInnerRegionObserver.countOfGets.get() &lt; NO_OF_THREADS) {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>        Thread.sleep(100);<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>    } else {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      while (CustomInnerRegionObserver.countOfNext.get() &lt; NO_OF_THREADS) {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        Thread.sleep(100);<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    Iterator&lt;CachedBlock&gt; iterator = cache.iterator();<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    int refCount = 0;<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    while (iterator.hasNext()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      CachedBlock next = iterator.next();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      if (cache instanceof BucketCache) {<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>        refCount = ((BucketCache) cache).getRefCount(cacheKey);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      } else if (cache instanceof CombinedBlockCache) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        continue;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      System.out.println(" the refcount is " + refCount + " block is " + cacheKey);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      if (CustomInnerRegionObserver.waitForGets.get()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        if (expectOnlyZero) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>          assertTrue(refCount == 0);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>        }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>        if (refCount != 0) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>          // Because the scan would have also touched up on these blocks but<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>          // it<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>          // would have touched<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>          // all 3<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>          if (getClosed) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>            // If get has closed only the scan's blocks would be available<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get());<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          } else {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>              assertEquals(refCount, CustomInnerRegionObserver.countOfGets.get() + (NO_OF_THREADS));<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          }<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>        // Because the get would have also touched up on these blocks but it<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>        // would have touched<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        // upon only 2 additionally<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>        if (expectOnlyZero) {<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>          assertTrue(refCount == 0);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>        }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        if (refCount != 0) {<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>          if (getLatch == null || wrappedCp) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get());<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          } else {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            assertEquals(refCount, CustomInnerRegionObserver.countOfNext.get() + (NO_OF_THREADS));<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>    CustomInnerRegionObserver.getCdl().get().countDown();<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span><a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>  private static class MultiGetThread extends Thread {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    private final HTable table;<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    private final List&lt;Get&gt; gets = new ArrayList&lt;Get&gt;();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>    public MultiGetThread(HTable table) {<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      this.table = table;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>    }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    @Override<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    public void run() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>      gets.add(new Get(ROW));<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      gets.add(new Get(ROW1));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      try {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        CustomInnerRegionObserver.getCdl().set(latch);<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        Result[] r = table.get(gets);<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        assertTrue(Bytes.equals(r[0].getRow(), ROW));<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        assertTrue(Bytes.equals(r[1].getRow(), ROW1));<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      } catch (IOException e) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  private static class GetThread extends Thread {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>    private final HTable table;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    private final boolean tracker;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    private final boolean multipleCFs;<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    public GetThread(HTable table, boolean tracker, boolean multipleCFs) {<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      this.table = table;<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      this.tracker = tracker;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>      this.multipleCFs = multipleCFs;<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span><a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    @Override<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    public void run() {<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      try {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        initiateGet(table);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      } catch (IOException e) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>        // do nothing<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>      }<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    }<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="l

<TRUNCATED>

[35/45] hbase-site git commit: Published site at 04622254f7209c5cfeadcfa137a97fbed161075a.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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 a47a6c7..1377d03 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -379,130 +379,130 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.110">m_master</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_frags">
 <!--   -->
 </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.122">m_deadServers</a></pre>
+<h4>m_frags</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.122">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_frags__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.127">m_deadServers__IsNotDefault</a></pre>
+<h4>m_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_metaLocation</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.139">m_format</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_metaLocation__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.144">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_filter">
 <!--   -->
 </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.156">m_assignmentManager</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/master/MasterStatusTmpl.ImplData.html#line.156">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_filter__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.161">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </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.173">m_serverManager</a></pre>
+<h4>m_catalogJanitorEnabled</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.173">m_catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_catalogJanitorEnabled__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.178">m_serverManager__IsNotDefault</a></pre>
+<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_assignmentManager">
 <!--   -->
 </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/master/MasterStatusTmpl.ImplData.html#line.190">m_filter</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.190">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_filter__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.195">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled">
+<a name="m_serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_catalogJanitorEnabled</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.207">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_serverManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_catalogJanitorEnabled__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.212">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_metaLocation">
 <!--   -->
 </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.224">m_format</a></pre>
+<h4>m_metaLocation</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.224">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_metaLocation__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.229">m_format__IsNotDefault</a></pre>
+<h4>m_metaLocation__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_servers">
@@ -523,22 +523,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.246">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_deadServers">
 <!--   -->
 </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.258">m_frags</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.258">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_deadServers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_frags__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_frags__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.263">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -584,193 +584,193 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.106">getMaster</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </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.112">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>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
 </li>
 </ul>
-<a name="getDeadServers()">
+<a name="getFrags()">
 <!--   -->
 </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.118">getDeadServers</a>()</pre>
+<h4>getFrags</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.118">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault()">
+<a name="getFrags__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.123">getDeadServers__IsNotDefault</a>()</pre>
+<h4>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getMetaLocation()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getMetaLocation</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.135">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getMetaLocation__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.140">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </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.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>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">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="getAssignmentManager()">
+<a name="getFilter()">
 <!--   -->
 </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.152">getAssignmentManager</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/master/MasterStatusTmpl.ImplData.html#line.152">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault()">
+<a name="getFilter__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.157">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </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.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>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="getServerManager()">
+<a name="getCatalogJanitorEnabled()">
 <!--   -->
 </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.169">getServerManager</a>()</pre>
+<h4>getCatalogJanitorEnabled</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.169">getCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault()">
+<a name="getCatalogJanitorEnabled__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.174">getServerManager__IsNotDefault</a>()</pre>
+<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">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>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">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="getFilter()">
+<a name="getAssignmentManager()">
 <!--   -->
 </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/master/MasterStatusTmpl.ImplData.html#line.186">getFilter</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.186">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getAssignmentManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFilter__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.191">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">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="getCatalogJanitorEnabled()">
+<a name="getServerManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getCatalogJanitorEnabled</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.203">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault()">
+<a name="getServerManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getCatalogJanitorEnabled__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.208">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </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.214">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>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getMetaLocation()">
 <!--   -->
 </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.220">getFormat</a>()</pre>
+<h4>getMetaLocation</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.220">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getMetaLocation__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.225">getFormat__IsNotDefault</a>()</pre>
+<h4>getMetaLocation__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setServers(java.util.List)">
@@ -800,31 +800,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.242">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </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.248">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>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">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="getFrags()">
+<a name="getDeadServers()">
 <!--   -->
 </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.254">getFrags</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.254">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault()">
+<a name="getDeadServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFrags__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getFrags__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.259">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/736088b3/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..c1a715c 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -279,76 +279,76 @@ 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_bcn">
 <!--   -->
 </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_bcn</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_bcn</a></pre>
 </li>
 </ul>
-<a name="m_bcv__IsNotDefault">
+<a name="m_bcn__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcv__IsNotDefault</a></pre>
+<h4>m_bcn__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_bcn">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn</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.117">m_bcn</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.117">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_bcn__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcn__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.122">m_filter__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,112 +394,112 @@ 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="setBcn(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.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>setBcn</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">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;bcn)</pre>
 </li>
 </ul>
-<a name="getBcv()">
+<a name="getBcn()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/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>getBcn</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">getBcn</a>()</pre>
 </li>
 </ul>
-<a name="getBcv__IsNotDefault()">
+<a name="getBcn__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcv__IsNotDefault</a>()</pre>
+<h4>getBcn__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setBcn(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.107">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;bcn)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.107">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="getBcn()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn</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.113">getBcn</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.113">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getBcn__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcn__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.118">getFilter__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/736088b3/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..b025bb1 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -283,40 +283,40 @@ 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="bcn">
 <!--   -->
 </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>bcn</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">bcn</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</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.165">bcn</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.165">filter</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,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setFormat(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>
-</li>
-</ul>
 <a name="setBcv(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>
+<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="setBcn(java.lang.String)">
@@ -412,7 +403,7 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setBcn</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.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>
+<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">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)">
@@ -421,7 +412,16 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <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>
+<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">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="setFormat(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.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/736088b3/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..294cb62 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -224,40 +224,40 @@ 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="bcn">
 <!--   -->
 </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>bcn</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">bcn</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</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.31">bcn</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.31">filter</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>