You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2025/07/07 14:50:21 UTC

(hbase-site) branch asf-site updated: Published site at 8ddf925daac7af48a5b624c6192bd2cdc45f7955.

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new f593940c730 Published site at 8ddf925daac7af48a5b624c6192bd2cdc45f7955.
f593940c730 is described below

commit f593940c730800e21aa024a77b3f4fe32880fa25
Author: jenkins <bu...@apache.org>
AuthorDate: Mon Jul 7 14:50:06 2025 +0000

    Published site at 8ddf925daac7af48a5b624c6192bd2cdc45f7955.
---
 acid-semantics.html                                |   2 +-
 apache_hbase_reference_guide.pdf                   |   4 +-
 apidocs/index-all.html                             |  32 +-
 apidocs/member-search-index.js                     |   2 +-
 .../hfile/BlockCacheUtil.CachedBlocksByFile.html   | 766 +++++++++++----------
 .../hadoop/hbase/io/hfile/BlockCacheUtil.html      | 766 +++++++++++----------
 book.html                                          |   2 +-
 bulk-loads.html                                    |   2 +-
 checkstyle-aggregate.html                          |   8 +-
 checkstyle.rss                                     | 706 +++++++++----------
 coc.html                                           |   2 +-
 dependencies.html                                  |   2 +-
 dependency-convergence.html                        |   2 +-
 dependency-info.html                               |   2 +-
 dependency-management.html                         |   2 +-
 .../BlockCacheUtil.CachedBlockCountsPerFile.html   |  24 +-
 .../hfile/BlockCacheUtil.CachedBlocksByFile.html   |  40 +-
 .../hadoop/hbase/io/hfile/BlockCacheUtil.html      |  38 +-
 .../BlockCacheUtil.CachedBlockCountsPerFile.html   | 766 +++++++++++----------
 .../hfile/BlockCacheUtil.CachedBlocksByFile.html   | 766 +++++++++++----------
 .../hadoop/hbase/io/hfile/BlockCacheUtil.html      | 766 +++++++++++----------
 downloads.html                                     |   2 +-
 export_control.html                                |   2 +-
 index.html                                         |   2 +-
 issue-management.html                              |   2 +-
 licenses.html                                      |   2 +-
 mailing-lists.html                                 |   2 +-
 metrics.html                                       |   2 +-
 old_news.html                                      |   2 +-
 plugin-management.html                             |   2 +-
 plugins.html                                       |   2 +-
 poweredbyhbase.html                                |   2 +-
 project-info.html                                  |   2 +-
 project-reports.html                               |   2 +-
 pseudo-distributed.html                            |   2 +-
 replication.html                                   |   2 +-
 resources.html                                     |   2 +-
 scm.html                                           |   2 +-
 sponsors.html                                      |   2 +-
 summary.html                                       |   2 +-
 supportingprojects.html                            |   2 +-
 team.html                                          |   2 +-
 testapidocs/index-all.html                         |  92 +--
 testapidocs/member-search-index.js                 |   2 +-
 testdevapidocs/index-all.html                      | 156 ++---
 testdevapidocs/member-search-index.js              |   2 +-
 46 files changed, 2502 insertions(+), 2492 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index 69c0f116ea0..a84de087952 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -469,7 +469,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 73f985b490f..fbbb755961e 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 2.0.6, based on Prawn 2.4.0)
 /Producer (Apache HBase Team)
-/ModDate (D:20250702143128+00'00')
-/CreationDate (D:20250702144706+00'00')
+/ModDate (D:20250707143002+00'00')
+/CreationDate (D:20250707144615+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index d27af2d4685..fe266ffd5e6 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -1488,9 +1488,9 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>affixShutdownHook(Thread, int) - Static method in class org.apache.hadoop.hbase.util.ShutdownHookManager</dt>
 <dd>&nbsp;</dd>
-<dt>afterDecodingKeyValue(DataInputStream, ByteBuffer, HFileBlockDefaultDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>afterDecodingKeyValue(DataInputStream, ByteBuffer, HFileBlockDefaultDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
-<dt>afterEncodingKeyValue(ExtendedCell, DataOutputStream, HFileBlockDefaultEncodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>afterEncodingKeyValue(ExtendedCell, DataOutputStream, HFileBlockDefaultEncodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>
 <div class="block">Returns unencoded size added</div>
 </dd>
@@ -8601,11 +8601,11 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Compares the family and qualifier part of the cell</div>
 </dd>
-<dt>compareCommonFamilyPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>compareCommonFamilyPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
-<dt>compareCommonQualifierPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>compareCommonQualifierPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
-<dt>compareCommonRowPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>compareCommonRowPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>
 <div class="block">common prefixes</div>
 </dd>
@@ -9294,7 +9294,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.StoreFileReader</dt>
 <dd>&nbsp;</dd>
-<dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL</dt>
 <dd>
@@ -11974,7 +11974,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Create a new Scan with a cursor.</div>
 </dd>
-<dt>createScanner(List&lt;KeyValueScanner&gt;, FlushLifeCycleTracker) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>createScanner(List&lt;KeyValueScanner&gt;, FlushLifeCycleTracker) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>
 <div class="block">Creates the scanner for flushing snapshot.</div>
 </dd>
@@ -12510,7 +12510,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Create a writer for writing new store files.</div>
 </dd>
-<dt>createWriter(MemStoreSnapshot, boolean, Consumer&lt;Path&gt;) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>createWriter(MemStoreSnapshot, boolean, Consumer&lt;Path&gt;) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>createWriterInstance(FileSystem, Path) - Method in class org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL</dt>
 <dd>&nbsp;</dd>
@@ -13102,7 +13102,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Decode an <code>int8</code> value.</div>
 </dd>
-<dt>decodeKeyValues(DataInputStream, HFileBlockDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>decodeKeyValues(DataInputStream, HFileBlockDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>decodeKeyValues(DataInputStream, HFileBlockDecodingContext) - Method in interface org.apache.hadoop.hbase.io.encoding.DataBlockEncoder</dt>
 <dd>
@@ -15960,7 +15960,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Separator used to demarcate the encodedName in a region name in the new format.</div>
 </dd>
-<dt>encode(ExtendedCell, HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>encode(ExtendedCell, HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>encode(ExtendedCell, HFileBlockEncodingContext, DataOutputStream) - Method in interface org.apache.hadoop.hbase.io.encoding.DataBlockEncoder</dt>
 <dd>
@@ -16374,7 +16374,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt>END_TIME_KEY - Static variable in class org.apache.hadoop.hbase.mapreduce.WALInputFormat</dt>
 <dd>&nbsp;</dd>
-<dt>endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[]) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[]) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[]) - Method in interface org.apache.hadoop.hbase.io.encoding.DataBlockEncoder</dt>
 <dd>
@@ -16485,7 +16485,7 @@ loadScripts(document, 'script');</script>
 <div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>
 <div class="block">Make sure that at least the specified number of region servers are running</div>
 </dd>
-<dt>ensureSpace(ByteBuffer, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>ensureSpace(ByteBuffer, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>
 <div class="block">Asserts that there is at least the given amount of unfilled space remaining in the given
  buffer.</div>
@@ -18569,7 +18569,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher</dt>
 <dd>&nbsp;</dd>
-<dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>findArchivedLog(Path, Configuration) - Static method in class org.apache.hadoop.hbase.wal.AbstractFSWALProvider</dt>
 <dd>
@@ -52160,7 +52160,7 @@ service.</div>
 <dd>
 <div class="block">Performs compaction on a column family with the mob flag enabled.</div>
 </dd>
-<dt>performFlush(InternalScanner, CellSink, ThroughputController) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>performFlush(InternalScanner, CellSink, ThroughputController) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>
 <div class="block">Performs memstore flush, writing data from scanner into sink.</div>
 </dd>
@@ -67601,7 +67601,7 @@ service.</div>
 &nbsp;</dd>
 <dt>START_TIME_KEY - Static variable in class org.apache.hadoop.hbase.mapreduce.WALInputFormat</dt>
 <dd>&nbsp;</dd>
-<dt>startBlockEncoding(HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
+<dt>startBlockEncoding(HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>startBlockEncoding(HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.CopyKeyDataBlockEncoder</dt>
 <dd>&nbsp;</dd>
@@ -68491,7 +68491,7 @@ service.</div>
 </dd>
 <dt>store - Variable in class org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</dt>
 <dd>&nbsp;</dd>
-<dt>store - Variable in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>store - Variable in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>store - Variable in class org.apache.hadoop.hbase.regionserver.StoreScanner</dt>
 <dd>&nbsp;</dd>
diff --git a/apidocs/member-search-index.js b/apidocs/member-search-index.js
index e505797a3f6..35ecc261234 100644
--- a/apidocs/member-search-index.js
+++ b/apidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html b/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
index e608edb663f..8b998b6bada 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
@@ -33,389 +33,391 @@
 <span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.io.hfile.HFileBlock.FILL_HEADER;</span>
 <span class="source-line-no">021</span><span id="line-21"></span>
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
-<span class="source-line-no">023</span><span id="line-23">import java.nio.ByteBuffer;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.util.HashSet;</span>
-<span class="source-line-no">025</span><span id="line-25">import java.util.Map;</span>
-<span class="source-line-no">026</span><span id="line-26">import java.util.NavigableMap;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableSet;</span>
-<span class="source-line-no">028</span><span id="line-28">import java.util.Set;</span>
-<span class="source-line-no">029</span><span id="line-29">import java.util.concurrent.ConcurrentSkipListMap;</span>
-<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListSet;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.ChecksumType;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.GsonUtil;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.slf4j.Logger;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47">/**</span>
-<span class="source-line-no">048</span><span id="line-48"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
-<span class="source-line-no">049</span><span id="line-49"> * No attempt has been made at making this thread safe.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51">@InterfaceAudience.Private</span>
-<span class="source-line-no">052</span><span id="line-52">public class BlockCacheUtil {</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">  public static final long NANOS_PER_SECOND = 1000000000;</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58">  /**</span>
-<span class="source-line-no">059</span><span id="line-59">   * Needed generating JSON.</span>
-<span class="source-line-no">060</span><span id="line-60">   */</span>
-<span class="source-line-no">061</span><span id="line-61">  private static final Gson GSON = GsonUtil.createGson()</span>
-<span class="source-line-no">062</span><span id="line-62">    .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64">      @Override</span>
-<span class="source-line-no">065</span><span id="line-65">      public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
-<span class="source-line-no">066</span><span id="line-66">        AgeSnapshot snapshot = new AgeSnapshot(value);</span>
-<span class="source-line-no">067</span><span id="line-67">        out.beginObject();</span>
-<span class="source-line-no">068</span><span id="line-68">        out.name("mean").value(snapshot.getMean());</span>
-<span class="source-line-no">069</span><span id="line-69">        out.name("min").value(snapshot.getMin());</span>
-<span class="source-line-no">070</span><span id="line-70">        out.name("max").value(snapshot.getMax());</span>
-<span class="source-line-no">071</span><span id="line-71">        out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
-<span class="source-line-no">072</span><span id="line-72">        out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
-<span class="source-line-no">073</span><span id="line-73">        out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
-<span class="source-line-no">074</span><span id="line-74">        out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
-<span class="source-line-no">075</span><span id="line-75">        out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
-<span class="source-line-no">076</span><span id="line-76">        out.endObject();</span>
-<span class="source-line-no">077</span><span id="line-77">      }</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79">      @Override</span>
-<span class="source-line-no">080</span><span id="line-80">      public FastLongHistogram read(JsonReader in) throws IOException {</span>
-<span class="source-line-no">081</span><span id="line-81">        throw new UnsupportedOperationException();</span>
-<span class="source-line-no">082</span><span id="line-82">      }</span>
-<span class="source-line-no">083</span><span id="line-83">    }).setPrettyPrinting().create();</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85">  /** Returns The block content as String. */</span>
-<span class="source-line-no">086</span><span id="line-86">  public static String toString(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">087</span><span id="line-87">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
-<span class="source-line-no">088</span><span id="line-88">  }</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90">  /**</span>
-<span class="source-line-no">091</span><span id="line-91">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
-<span class="source-line-no">092</span><span id="line-92">   */</span>
-<span class="source-line-no">093</span><span id="line-93">  static class CachedBlockCountsPerFile {</span>
-<span class="source-line-no">094</span><span id="line-94">    private int count = 0;</span>
-<span class="source-line-no">095</span><span id="line-95">    private long size = 0;</span>
-<span class="source-line-no">096</span><span id="line-96">    private int countData = 0;</span>
-<span class="source-line-no">097</span><span id="line-97">    private long sizeData = 0;</span>
-<span class="source-line-no">098</span><span id="line-98">    private final String filename;</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100">    CachedBlockCountsPerFile(final String filename) {</span>
-<span class="source-line-no">101</span><span id="line-101">      this.filename = filename;</span>
-<span class="source-line-no">102</span><span id="line-102">    }</span>
-<span class="source-line-no">103</span><span id="line-103"></span>
-<span class="source-line-no">104</span><span id="line-104">    public int getCount() {</span>
-<span class="source-line-no">105</span><span id="line-105">      return count;</span>
-<span class="source-line-no">106</span><span id="line-106">    }</span>
-<span class="source-line-no">107</span><span id="line-107"></span>
-<span class="source-line-no">108</span><span id="line-108">    public long getSize() {</span>
-<span class="source-line-no">109</span><span id="line-109">      return size;</span>
-<span class="source-line-no">110</span><span id="line-110">    }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112">    public int getCountData() {</span>
-<span class="source-line-no">113</span><span id="line-113">      return countData;</span>
-<span class="source-line-no">114</span><span id="line-114">    }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">    public long getSizeData() {</span>
-<span class="source-line-no">117</span><span id="line-117">      return sizeData;</span>
-<span class="source-line-no">118</span><span id="line-118">    }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">    public String getFilename() {</span>
-<span class="source-line-no">121</span><span id="line-121">      return filename;</span>
-<span class="source-line-no">122</span><span id="line-122">    }</span>
-<span class="source-line-no">123</span><span id="line-123">  }</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
-<span class="source-line-no">126</span><span id="line-126">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
-<span class="source-line-no">127</span><span id="line-127">    throws IOException {</span>
-<span class="source-line-no">128</span><span id="line-128">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
-<span class="source-line-no">129</span><span id="line-129">    for (CachedBlock cb : blocks) {</span>
-<span class="source-line-no">130</span><span id="line-130">      counts.count++;</span>
-<span class="source-line-no">131</span><span id="line-131">      counts.size += cb.getSize();</span>
-<span class="source-line-no">132</span><span id="line-132">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">133</span><span id="line-133">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">134</span><span id="line-134">        counts.countData++;</span>
-<span class="source-line-no">135</span><span id="line-135">        counts.sizeData += cb.getSize();</span>
-<span class="source-line-no">136</span><span id="line-136">      }</span>
-<span class="source-line-no">137</span><span id="line-137">    }</span>
-<span class="source-line-no">138</span><span id="line-138">    return GSON.toJson(counts);</span>
-<span class="source-line-no">139</span><span id="line-139">  }</span>
-<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
-<span class="source-line-no">142</span><span id="line-142">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
-<span class="source-line-no">143</span><span id="line-143">    return GSON.toJson(cbsbf);</span>
-<span class="source-line-no">144</span><span id="line-144">  }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
-<span class="source-line-no">147</span><span id="line-147">  public static String toJSON(BlockCache bc) throws IOException {</span>
-<span class="source-line-no">148</span><span id="line-148">    return GSON.toJson(bc);</span>
-<span class="source-line-no">149</span><span id="line-149">  }</span>
-<span class="source-line-no">150</span><span id="line-150"></span>
-<span class="source-line-no">151</span><span id="line-151">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
-<span class="source-line-no">152</span><span id="line-152">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">153</span><span id="line-153">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
-<span class="source-line-no">154</span><span id="line-154">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
-<span class="source-line-no">155</span><span id="line-155">      + cb.getBlockPriority();</span>
-<span class="source-line-no">156</span><span id="line-156">  }</span>
-<span class="source-line-no">157</span><span id="line-157"></span>
-<span class="source-line-no">158</span><span id="line-158">  /**</span>
-<span class="source-line-no">159</span><span id="line-159">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
-<span class="source-line-no">160</span><span id="line-160">   * {@link BlockCache}.</span>
-<span class="source-line-no">161</span><span id="line-161">   * @param conf Used to read configurations</span>
-<span class="source-line-no">162</span><span id="line-162">   * @param bc   Block Cache to iterate.</span>
-<span class="source-line-no">163</span><span id="line-163">   * @return Laoded up instance of CachedBlocksByFile</span>
-<span class="source-line-no">164</span><span id="line-164">   */</span>
-<span class="source-line-no">165</span><span id="line-165">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
-<span class="source-line-no">166</span><span id="line-166">    final BlockCache bc) {</span>
-<span class="source-line-no">167</span><span id="line-167">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
-<span class="source-line-no">168</span><span id="line-168">    for (CachedBlock cb : bc) {</span>
-<span class="source-line-no">169</span><span id="line-169">      if (cbsbf.update(cb)) break;</span>
-<span class="source-line-no">170</span><span id="line-170">    }</span>
-<span class="source-line-no">171</span><span id="line-171">    return cbsbf;</span>
-<span class="source-line-no">172</span><span id="line-172">  }</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
-<span class="source-line-no">175</span><span id="line-175">    boolean includeNextBlockMetadata) {</span>
-<span class="source-line-no">176</span><span id="line-176">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
-<span class="source-line-no">177</span><span id="line-177">    left.serialize(l, includeNextBlockMetadata);</span>
-<span class="source-line-no">178</span><span id="line-178">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
-<span class="source-line-no">179</span><span id="line-179">    right.serialize(r, includeNextBlockMetadata);</span>
-<span class="source-line-no">180</span><span id="line-180">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
-<span class="source-line-no">181</span><span id="line-181">      r.limit());</span>
-<span class="source-line-no">182</span><span id="line-182">  }</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">  /**</span>
-<span class="source-line-no">185</span><span id="line-185">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
-<span class="source-line-no">186</span><span id="line-186">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
-<span class="source-line-no">187</span><span id="line-187">   * comparison.</span>
-<span class="source-line-no">188</span><span id="line-188">   * @param existing block that is existing in the cache.</span>
-<span class="source-line-no">189</span><span id="line-189">   * @param newBlock block that is trying to be cached.</span>
-<span class="source-line-no">190</span><span id="line-190">   * @param cacheKey the cache key of the blocks.</span>
-<span class="source-line-no">191</span><span id="line-191">   * @return comparison of the existing block to the newBlock.</span>
-<span class="source-line-no">192</span><span id="line-192">   */</span>
-<span class="source-line-no">193</span><span id="line-193">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
-<span class="source-line-no">194</span><span id="line-194">    BlockCacheKey cacheKey) {</span>
-<span class="source-line-no">195</span><span id="line-195">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
-<span class="source-line-no">196</span><span id="line-196">    if (comparison != 0) {</span>
-<span class="source-line-no">197</span><span id="line-197">      throw new RuntimeException(</span>
-<span class="source-line-no">198</span><span id="line-198">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
-<span class="source-line-no">199</span><span id="line-199">    }</span>
-<span class="source-line-no">200</span><span id="line-200">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
-<span class="source-line-no">201</span><span id="line-201">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
-<span class="source-line-no">202</span><span id="line-202">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
-<span class="source-line-no">203</span><span id="line-203">    }</span>
-<span class="source-line-no">204</span><span id="line-204">    return comparison;</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206"></span>
-<span class="source-line-no">207</span><span id="line-207">  /**</span>
-<span class="source-line-no">208</span><span id="line-208">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
-<span class="source-line-no">209</span><span id="line-209">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
-<span class="source-line-no">210</span><span id="line-210">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
-<span class="source-line-no">211</span><span id="line-211">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
-<span class="source-line-no">212</span><span id="line-212">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
-<span class="source-line-no">213</span><span id="line-213">   * new block to cache has, then we can replace the existing block with the new block for better</span>
-<span class="source-line-no">214</span><span id="line-214">   * performance.(HBASE-20447)</span>
-<span class="source-line-no">215</span><span id="line-215">   * @param blockCache BlockCache to check</span>
-<span class="source-line-no">216</span><span id="line-216">   * @param cacheKey   the block cache key</span>
-<span class="source-line-no">217</span><span id="line-217">   * @param newBlock   the new block which try to put into the block cache.</span>
-<span class="source-line-no">218</span><span id="line-218">   * @return true means need to replace existing block with new block for the same block cache key.</span>
-<span class="source-line-no">219</span><span id="line-219">   *         false means just keep the existing block.</span>
-<span class="source-line-no">220</span><span id="line-220">   */</span>
-<span class="source-line-no">221</span><span id="line-221">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
-<span class="source-line-no">222</span><span id="line-222">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
-<span class="source-line-no">223</span><span id="line-223">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
-<span class="source-line-no">224</span><span id="line-224">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
-<span class="source-line-no">225</span><span id="line-225">    if (existingBlock == null) {</span>
-<span class="source-line-no">226</span><span id="line-226">      return true;</span>
-<span class="source-line-no">227</span><span id="line-227">    }</span>
-<span class="source-line-no">228</span><span id="line-228">    try {</span>
-<span class="source-line-no">229</span><span id="line-229">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
-<span class="source-line-no">230</span><span id="line-230">      if (comparison &lt; 0) {</span>
-<span class="source-line-no">231</span><span id="line-231">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
-<span class="source-line-no">232</span><span id="line-232">          + "nextBlockOnDiskSize set. Caching new block.");</span>
-<span class="source-line-no">233</span><span id="line-233">        return true;</span>
-<span class="source-line-no">234</span><span id="line-234">      } else if (comparison &gt; 0) {</span>
-<span class="source-line-no">235</span><span id="line-235">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
-<span class="source-line-no">236</span><span id="line-236">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
-<span class="source-line-no">237</span><span id="line-237">        return false;</span>
-<span class="source-line-no">238</span><span id="line-238">      } else {</span>
-<span class="source-line-no">239</span><span id="line-239">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
-<span class="source-line-no">240</span><span id="line-240">          + "cases (see HBASE-8547)", cacheKey);</span>
-<span class="source-line-no">241</span><span id="line-241">        return false;</span>
-<span class="source-line-no">242</span><span id="line-242">      }</span>
-<span class="source-line-no">243</span><span id="line-243">    } finally {</span>
-<span class="source-line-no">244</span><span id="line-244">      // Release this block to decrement the reference count.</span>
-<span class="source-line-no">245</span><span id="line-245">      existingBlock.release();</span>
-<span class="source-line-no">246</span><span id="line-246">    }</span>
-<span class="source-line-no">247</span><span id="line-247">  }</span>
-<span class="source-line-no">248</span><span id="line-248"></span>
-<span class="source-line-no">249</span><span id="line-249">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
-<span class="source-line-no">250</span><span id="line-250">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
-<span class="source-line-no">251</span><span id="line-251">    onlineRegions.values().forEach(r -&gt; {</span>
-<span class="source-line-no">252</span><span id="line-252">      r.getStores().forEach(s -&gt; {</span>
-<span class="source-line-no">253</span><span id="line-253">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
-<span class="source-line-no">254</span><span id="line-254">      });</span>
-<span class="source-line-no">255</span><span id="line-255">    });</span>
-<span class="source-line-no">256</span><span id="line-256">    return files;</span>
-<span class="source-line-no">257</span><span id="line-257">  }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.lang.reflect.Modifier;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.nio.ByteBuffer;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.util.HashSet;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.util.Map;</span>
+<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableMap;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.NavigableSet;</span>
+<span class="source-line-no">029</span><span id="line-29">import java.util.Set;</span>
+<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListMap;</span>
+<span class="source-line-no">031</span><span id="line-31">import java.util.concurrent.ConcurrentSkipListSet;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.ChecksumType;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.util.GsonUtil;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.slf4j.Logger;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
+<span class="source-line-no">050</span><span id="line-50"> * No attempt has been made at making this thread safe.</span>
+<span class="source-line-no">051</span><span id="line-51"> */</span>
+<span class="source-line-no">052</span><span id="line-52">@InterfaceAudience.Private</span>
+<span class="source-line-no">053</span><span id="line-53">public class BlockCacheUtil {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">  public static final long NANOS_PER_SECOND = 1000000000;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59">  /**</span>
+<span class="source-line-no">060</span><span id="line-60">   * Needed generating JSON.</span>
+<span class="source-line-no">061</span><span id="line-61">   */</span>
+<span class="source-line-no">062</span><span id="line-62">  private static final Gson GSON =</span>
+<span class="source-line-no">063</span><span id="line-63">    GsonUtil.createGson().excludeFieldsWithModifiers(Modifier.PRIVATE)</span>
+<span class="source-line-no">064</span><span id="line-64">      .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66">        @Override</span>
+<span class="source-line-no">067</span><span id="line-67">        public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
+<span class="source-line-no">068</span><span id="line-68">          AgeSnapshot snapshot = new AgeSnapshot(value);</span>
+<span class="source-line-no">069</span><span id="line-69">          out.beginObject();</span>
+<span class="source-line-no">070</span><span id="line-70">          out.name("mean").value(snapshot.getMean());</span>
+<span class="source-line-no">071</span><span id="line-71">          out.name("min").value(snapshot.getMin());</span>
+<span class="source-line-no">072</span><span id="line-72">          out.name("max").value(snapshot.getMax());</span>
+<span class="source-line-no">073</span><span id="line-73">          out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
+<span class="source-line-no">074</span><span id="line-74">          out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
+<span class="source-line-no">075</span><span id="line-75">          out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
+<span class="source-line-no">076</span><span id="line-76">          out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
+<span class="source-line-no">077</span><span id="line-77">          out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
+<span class="source-line-no">078</span><span id="line-78">          out.endObject();</span>
+<span class="source-line-no">079</span><span id="line-79">        }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81">        @Override</span>
+<span class="source-line-no">082</span><span id="line-82">        public FastLongHistogram read(JsonReader in) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83">          throw new UnsupportedOperationException();</span>
+<span class="source-line-no">084</span><span id="line-84">        }</span>
+<span class="source-line-no">085</span><span id="line-85">      }).setPrettyPrinting().create();</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87">  /** Returns The block content as String. */</span>
+<span class="source-line-no">088</span><span id="line-88">  public static String toString(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">089</span><span id="line-89">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
+<span class="source-line-no">090</span><span id="line-90">  }</span>
+<span class="source-line-no">091</span><span id="line-91"></span>
+<span class="source-line-no">092</span><span id="line-92">  /**</span>
+<span class="source-line-no">093</span><span id="line-93">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
+<span class="source-line-no">094</span><span id="line-94">   */</span>
+<span class="source-line-no">095</span><span id="line-95">  static class CachedBlockCountsPerFile {</span>
+<span class="source-line-no">096</span><span id="line-96">    private int count = 0;</span>
+<span class="source-line-no">097</span><span id="line-97">    private long size = 0;</span>
+<span class="source-line-no">098</span><span id="line-98">    private int countData = 0;</span>
+<span class="source-line-no">099</span><span id="line-99">    private long sizeData = 0;</span>
+<span class="source-line-no">100</span><span id="line-100">    private final String filename;</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102">    CachedBlockCountsPerFile(final String filename) {</span>
+<span class="source-line-no">103</span><span id="line-103">      this.filename = filename;</span>
+<span class="source-line-no">104</span><span id="line-104">    }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106">    public int getCount() {</span>
+<span class="source-line-no">107</span><span id="line-107">      return count;</span>
+<span class="source-line-no">108</span><span id="line-108">    }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">    public long getSize() {</span>
+<span class="source-line-no">111</span><span id="line-111">      return size;</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114">    public int getCountData() {</span>
+<span class="source-line-no">115</span><span id="line-115">      return countData;</span>
+<span class="source-line-no">116</span><span id="line-116">    }</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118">    public long getSizeData() {</span>
+<span class="source-line-no">119</span><span id="line-119">      return sizeData;</span>
+<span class="source-line-no">120</span><span id="line-120">    }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">    public String getFilename() {</span>
+<span class="source-line-no">123</span><span id="line-123">      return filename;</span>
+<span class="source-line-no">124</span><span id="line-124">    }</span>
+<span class="source-line-no">125</span><span id="line-125">  }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
+<span class="source-line-no">128</span><span id="line-128">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
+<span class="source-line-no">129</span><span id="line-129">    throws IOException {</span>
+<span class="source-line-no">130</span><span id="line-130">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
+<span class="source-line-no">131</span><span id="line-131">    for (CachedBlock cb : blocks) {</span>
+<span class="source-line-no">132</span><span id="line-132">      counts.count++;</span>
+<span class="source-line-no">133</span><span id="line-133">      counts.size += cb.getSize();</span>
+<span class="source-line-no">134</span><span id="line-134">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">135</span><span id="line-135">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">136</span><span id="line-136">        counts.countData++;</span>
+<span class="source-line-no">137</span><span id="line-137">        counts.sizeData += cb.getSize();</span>
+<span class="source-line-no">138</span><span id="line-138">      }</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140">    return GSON.toJson(counts);</span>
+<span class="source-line-no">141</span><span id="line-141">  }</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
+<span class="source-line-no">144</span><span id="line-144">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
+<span class="source-line-no">145</span><span id="line-145">    return GSON.toJson(cbsbf);</span>
+<span class="source-line-no">146</span><span id="line-146">  }</span>
+<span class="source-line-no">147</span><span id="line-147"></span>
+<span class="source-line-no">148</span><span id="line-148">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
+<span class="source-line-no">149</span><span id="line-149">  public static String toJSON(BlockCache bc) throws IOException {</span>
+<span class="source-line-no">150</span><span id="line-150">    return GSON.toJson(bc);</span>
+<span class="source-line-no">151</span><span id="line-151">  }</span>
+<span class="source-line-no">152</span><span id="line-152"></span>
+<span class="source-line-no">153</span><span id="line-153">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
+<span class="source-line-no">154</span><span id="line-154">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">155</span><span id="line-155">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
+<span class="source-line-no">156</span><span id="line-156">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
+<span class="source-line-no">157</span><span id="line-157">      + cb.getBlockPriority();</span>
+<span class="source-line-no">158</span><span id="line-158">  }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">  /**</span>
+<span class="source-line-no">161</span><span id="line-161">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
+<span class="source-line-no">162</span><span id="line-162">   * {@link BlockCache}.</span>
+<span class="source-line-no">163</span><span id="line-163">   * @param conf Used to read configurations</span>
+<span class="source-line-no">164</span><span id="line-164">   * @param bc   Block Cache to iterate.</span>
+<span class="source-line-no">165</span><span id="line-165">   * @return Laoded up instance of CachedBlocksByFile</span>
+<span class="source-line-no">166</span><span id="line-166">   */</span>
+<span class="source-line-no">167</span><span id="line-167">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
+<span class="source-line-no">168</span><span id="line-168">    final BlockCache bc) {</span>
+<span class="source-line-no">169</span><span id="line-169">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
+<span class="source-line-no">170</span><span id="line-170">    for (CachedBlock cb : bc) {</span>
+<span class="source-line-no">171</span><span id="line-171">      if (cbsbf.update(cb)) break;</span>
+<span class="source-line-no">172</span><span id="line-172">    }</span>
+<span class="source-line-no">173</span><span id="line-173">    return cbsbf;</span>
+<span class="source-line-no">174</span><span id="line-174">  }</span>
+<span class="source-line-no">175</span><span id="line-175"></span>
+<span class="source-line-no">176</span><span id="line-176">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
+<span class="source-line-no">177</span><span id="line-177">    boolean includeNextBlockMetadata) {</span>
+<span class="source-line-no">178</span><span id="line-178">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
+<span class="source-line-no">179</span><span id="line-179">    left.serialize(l, includeNextBlockMetadata);</span>
+<span class="source-line-no">180</span><span id="line-180">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
+<span class="source-line-no">181</span><span id="line-181">    right.serialize(r, includeNextBlockMetadata);</span>
+<span class="source-line-no">182</span><span id="line-182">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
+<span class="source-line-no">183</span><span id="line-183">      r.limit());</span>
+<span class="source-line-no">184</span><span id="line-184">  }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186">  /**</span>
+<span class="source-line-no">187</span><span id="line-187">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
+<span class="source-line-no">188</span><span id="line-188">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
+<span class="source-line-no">189</span><span id="line-189">   * comparison.</span>
+<span class="source-line-no">190</span><span id="line-190">   * @param existing block that is existing in the cache.</span>
+<span class="source-line-no">191</span><span id="line-191">   * @param newBlock block that is trying to be cached.</span>
+<span class="source-line-no">192</span><span id="line-192">   * @param cacheKey the cache key of the blocks.</span>
+<span class="source-line-no">193</span><span id="line-193">   * @return comparison of the existing block to the newBlock.</span>
+<span class="source-line-no">194</span><span id="line-194">   */</span>
+<span class="source-line-no">195</span><span id="line-195">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
+<span class="source-line-no">196</span><span id="line-196">    BlockCacheKey cacheKey) {</span>
+<span class="source-line-no">197</span><span id="line-197">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
+<span class="source-line-no">198</span><span id="line-198">    if (comparison != 0) {</span>
+<span class="source-line-no">199</span><span id="line-199">      throw new RuntimeException(</span>
+<span class="source-line-no">200</span><span id="line-200">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
+<span class="source-line-no">201</span><span id="line-201">    }</span>
+<span class="source-line-no">202</span><span id="line-202">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
+<span class="source-line-no">203</span><span id="line-203">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
+<span class="source-line-no">204</span><span id="line-204">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
+<span class="source-line-no">205</span><span id="line-205">    }</span>
+<span class="source-line-no">206</span><span id="line-206">    return comparison;</span>
+<span class="source-line-no">207</span><span id="line-207">  }</span>
+<span class="source-line-no">208</span><span id="line-208"></span>
+<span class="source-line-no">209</span><span id="line-209">  /**</span>
+<span class="source-line-no">210</span><span id="line-210">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
+<span class="source-line-no">211</span><span id="line-211">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
+<span class="source-line-no">212</span><span id="line-212">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
+<span class="source-line-no">213</span><span id="line-213">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
+<span class="source-line-no">214</span><span id="line-214">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
+<span class="source-line-no">215</span><span id="line-215">   * new block to cache has, then we can replace the existing block with the new block for better</span>
+<span class="source-line-no">216</span><span id="line-216">   * performance.(HBASE-20447)</span>
+<span class="source-line-no">217</span><span id="line-217">   * @param blockCache BlockCache to check</span>
+<span class="source-line-no">218</span><span id="line-218">   * @param cacheKey   the block cache key</span>
+<span class="source-line-no">219</span><span id="line-219">   * @param newBlock   the new block which try to put into the block cache.</span>
+<span class="source-line-no">220</span><span id="line-220">   * @return true means need to replace existing block with new block for the same block cache key.</span>
+<span class="source-line-no">221</span><span id="line-221">   *         false means just keep the existing block.</span>
+<span class="source-line-no">222</span><span id="line-222">   */</span>
+<span class="source-line-no">223</span><span id="line-223">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
+<span class="source-line-no">224</span><span id="line-224">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
+<span class="source-line-no">225</span><span id="line-225">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
+<span class="source-line-no">226</span><span id="line-226">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
+<span class="source-line-no">227</span><span id="line-227">    if (existingBlock == null) {</span>
+<span class="source-line-no">228</span><span id="line-228">      return true;</span>
+<span class="source-line-no">229</span><span id="line-229">    }</span>
+<span class="source-line-no">230</span><span id="line-230">    try {</span>
+<span class="source-line-no">231</span><span id="line-231">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
+<span class="source-line-no">232</span><span id="line-232">      if (comparison &lt; 0) {</span>
+<span class="source-line-no">233</span><span id="line-233">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
+<span class="source-line-no">234</span><span id="line-234">          + "nextBlockOnDiskSize set. Caching new block.");</span>
+<span class="source-line-no">235</span><span id="line-235">        return true;</span>
+<span class="source-line-no">236</span><span id="line-236">      } else if (comparison &gt; 0) {</span>
+<span class="source-line-no">237</span><span id="line-237">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
+<span class="source-line-no">238</span><span id="line-238">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
+<span class="source-line-no">239</span><span id="line-239">        return false;</span>
+<span class="source-line-no">240</span><span id="line-240">      } else {</span>
+<span class="source-line-no">241</span><span id="line-241">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
+<span class="source-line-no">242</span><span id="line-242">          + "cases (see HBASE-8547)", cacheKey);</span>
+<span class="source-line-no">243</span><span id="line-243">        return false;</span>
+<span class="source-line-no">244</span><span id="line-244">      }</span>
+<span class="source-line-no">245</span><span id="line-245">    } finally {</span>
+<span class="source-line-no">246</span><span id="line-246">      // Release this block to decrement the reference count.</span>
+<span class="source-line-no">247</span><span id="line-247">      existingBlock.release();</span>
+<span class="source-line-no">248</span><span id="line-248">    }</span>
+<span class="source-line-no">249</span><span id="line-249">  }</span>
+<span class="source-line-no">250</span><span id="line-250"></span>
+<span class="source-line-no">251</span><span id="line-251">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
+<span class="source-line-no">252</span><span id="line-252">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
+<span class="source-line-no">253</span><span id="line-253">    onlineRegions.values().forEach(r -&gt; {</span>
+<span class="source-line-no">254</span><span id="line-254">      r.getStores().forEach(s -&gt; {</span>
+<span class="source-line-no">255</span><span id="line-255">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
+<span class="source-line-no">256</span><span id="line-256">      });</span>
+<span class="source-line-no">257</span><span id="line-257">    });</span>
+<span class="source-line-no">258</span><span id="line-258">    return files;</span>
+<span class="source-line-no">259</span><span id="line-259">  }</span>
 <span class="source-line-no">260</span><span id="line-260"></span>
-<span class="source-line-no">261</span><span id="line-261">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
-<span class="source-line-no">262</span><span id="line-262">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
-<span class="source-line-no">263</span><span id="line-263">  }</span>
-<span class="source-line-no">264</span><span id="line-264"></span>
-<span class="source-line-no">265</span><span id="line-265">  /**</span>
-<span class="source-line-no">266</span><span id="line-266">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
-<span class="source-line-no">267</span><span id="line-267">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
-<span class="source-line-no">268</span><span id="line-268">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
-<span class="source-line-no">269</span><span id="line-269">   * may already have been cached at write time.</span>
-<span class="source-line-no">270</span><span id="line-270">   * @param cacheConf the related CacheConfig object.</span>
-<span class="source-line-no">271</span><span id="line-271">   * @param block     the HFileBlock instance to be converted.</span>
-<span class="source-line-no">272</span><span id="line-272">   * @return the resulting HFileBlock instance without checksum.</span>
-<span class="source-line-no">273</span><span id="line-273">   */</span>
-<span class="source-line-no">274</span><span id="line-274">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
-<span class="source-line-no">275</span><span id="line-275">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
-<span class="source-line-no">276</span><span id="line-276">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
-<span class="source-line-no">277</span><span id="line-277">      ? 0</span>
-<span class="source-line-no">278</span><span id="line-278">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
-<span class="source-line-no">279</span><span id="line-279">        block.getHFileContext().getBytesPerChecksum());</span>
-<span class="source-line-no">280</span><span id="line-280">    ByteBuff buff = block.getBufferReadOnly();</span>
-<span class="source-line-no">281</span><span id="line-281">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
-<span class="source-line-no">282</span><span id="line-282">    return builder.withBlockType(block.getBlockType())</span>
-<span class="source-line-no">283</span><span id="line-283">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
-<span class="source-line-no">284</span><span id="line-284">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
-<span class="source-line-no">285</span><span id="line-285">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
-<span class="source-line-no">286</span><span id="line-286">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
-<span class="source-line-no">287</span><span id="line-287">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
-<span class="source-line-no">288</span><span id="line-288">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
-<span class="source-line-no">289</span><span id="line-289">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
-<span class="source-line-no">290</span><span id="line-290">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
-<span class="source-line-no">291</span><span id="line-291">  }</span>
-<span class="source-line-no">292</span><span id="line-292"></span>
-<span class="source-line-no">293</span><span id="line-293">  public static HFileContext cloneContext(HFileContext context) {</span>
-<span class="source-line-no">294</span><span id="line-294">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
-<span class="source-line-no">295</span><span id="line-295">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
-<span class="source-line-no">296</span><span id="line-296">      .withCompression(context.getCompression())</span>
-<span class="source-line-no">297</span><span id="line-297">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
-<span class="source-line-no">298</span><span id="line-298">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
-<span class="source-line-no">299</span><span id="line-299">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
-<span class="source-line-no">300</span><span id="line-300">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
-<span class="source-line-no">301</span><span id="line-301">    return newContext;</span>
-<span class="source-line-no">302</span><span id="line-302">  }</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304">  /**</span>
-<span class="source-line-no">305</span><span id="line-305">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
-<span class="source-line-no">306</span><span id="line-306">   * This is different than metrics in that it is stats on current state of a cache. See</span>
-<span class="source-line-no">307</span><span id="line-307">   * getLoadedCachedBlocksByFile</span>
-<span class="source-line-no">308</span><span id="line-308">   */</span>
-<span class="source-line-no">309</span><span id="line-309">  public static class CachedBlocksByFile {</span>
-<span class="source-line-no">310</span><span id="line-310">    private int count;</span>
-<span class="source-line-no">311</span><span id="line-311">    private int dataBlockCount;</span>
-<span class="source-line-no">312</span><span id="line-312">    private long size;</span>
-<span class="source-line-no">313</span><span id="line-313">    private long dataSize;</span>
-<span class="source-line-no">314</span><span id="line-314">    private final long now = System.nanoTime();</span>
-<span class="source-line-no">315</span><span id="line-315">    /**</span>
-<span class="source-line-no">316</span><span id="line-316">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
-<span class="source-line-no">317</span><span id="line-317">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
-<span class="source-line-no">318</span><span id="line-318">     * displays warning in red when stats are incomplete.</span>
-<span class="source-line-no">319</span><span id="line-319">     */</span>
-<span class="source-line-no">320</span><span id="line-320">    private final int max;</span>
-<span class="source-line-no">321</span><span id="line-321"></span>
-<span class="source-line-no">322</span><span id="line-322">    CachedBlocksByFile() {</span>
-<span class="source-line-no">323</span><span id="line-323">      this(null);</span>
-<span class="source-line-no">324</span><span id="line-324">    }</span>
-<span class="source-line-no">325</span><span id="line-325"></span>
-<span class="source-line-no">326</span><span id="line-326">    CachedBlocksByFile(final Configuration c) {</span>
-<span class="source-line-no">327</span><span id="line-327">      this.max = getMaxCachedBlocksByFile(c);</span>
-<span class="source-line-no">328</span><span id="line-328">    }</span>
-<span class="source-line-no">329</span><span id="line-329"></span>
-<span class="source-line-no">330</span><span id="line-330">    /**</span>
-<span class="source-line-no">331</span><span id="line-331">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
-<span class="source-line-no">332</span><span id="line-332">     */</span>
-<span class="source-line-no">333</span><span id="line-333">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
-<span class="source-line-no">334</span><span id="line-334">      new ConcurrentSkipListMap&lt;&gt;();</span>
-<span class="source-line-no">335</span><span id="line-335">    FastLongHistogram hist = new FastLongHistogram();</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337">    /** Returns True if full.... if we won't be adding any more. */</span>
-<span class="source-line-no">338</span><span id="line-338">    public boolean update(final CachedBlock cb) {</span>
-<span class="source-line-no">339</span><span id="line-339">      if (isFull()) return true;</span>
-<span class="source-line-no">340</span><span id="line-340">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
-<span class="source-line-no">341</span><span id="line-341">      if (set == null) {</span>
-<span class="source-line-no">342</span><span id="line-342">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
-<span class="source-line-no">343</span><span id="line-343">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
-<span class="source-line-no">344</span><span id="line-344">      }</span>
-<span class="source-line-no">345</span><span id="line-345">      set.add(cb);</span>
-<span class="source-line-no">346</span><span id="line-346">      this.size += cb.getSize();</span>
-<span class="source-line-no">347</span><span id="line-347">      this.count++;</span>
-<span class="source-line-no">348</span><span id="line-348">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">349</span><span id="line-349">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">350</span><span id="line-350">        this.dataBlockCount++;</span>
-<span class="source-line-no">351</span><span id="line-351">        this.dataSize += cb.getSize();</span>
-<span class="source-line-no">352</span><span id="line-352">      }</span>
-<span class="source-line-no">353</span><span id="line-353">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
-<span class="source-line-no">354</span><span id="line-354">      this.hist.add(age, 1);</span>
-<span class="source-line-no">355</span><span id="line-355">      return false;</span>
-<span class="source-line-no">356</span><span id="line-356">    }</span>
-<span class="source-line-no">357</span><span id="line-357"></span>
-<span class="source-line-no">358</span><span id="line-358">    /**</span>
-<span class="source-line-no">359</span><span id="line-359">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
-<span class="source-line-no">360</span><span id="line-360">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
-<span class="source-line-no">361</span><span id="line-361">     *         DEFAULT_MAX).</span>
-<span class="source-line-no">362</span><span id="line-362">     */</span>
-<span class="source-line-no">363</span><span id="line-363">    public boolean isFull() {</span>
-<span class="source-line-no">364</span><span id="line-364">      return this.count &gt;= this.max;</span>
-<span class="source-line-no">365</span><span id="line-365">    }</span>
-<span class="source-line-no">366</span><span id="line-366"></span>
-<span class="source-line-no">367</span><span id="line-367">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
-<span class="source-line-no">368</span><span id="line-368">      return this.cachedBlockByFile;</span>
-<span class="source-line-no">369</span><span id="line-369">    }</span>
-<span class="source-line-no">370</span><span id="line-370"></span>
-<span class="source-line-no">371</span><span id="line-371">    /** Returns count of blocks in the cache */</span>
-<span class="source-line-no">372</span><span id="line-372">    public int getCount() {</span>
-<span class="source-line-no">373</span><span id="line-373">      return count;</span>
-<span class="source-line-no">374</span><span id="line-374">    }</span>
-<span class="source-line-no">375</span><span id="line-375"></span>
-<span class="source-line-no">376</span><span id="line-376">    public int getDataCount() {</span>
-<span class="source-line-no">377</span><span id="line-377">      return dataBlockCount;</span>
-<span class="source-line-no">378</span><span id="line-378">    }</span>
-<span class="source-line-no">379</span><span id="line-379"></span>
-<span class="source-line-no">380</span><span id="line-380">    /** Returns size of blocks in the cache */</span>
-<span class="source-line-no">381</span><span id="line-381">    public long getSize() {</span>
-<span class="source-line-no">382</span><span id="line-382">      return size;</span>
-<span class="source-line-no">383</span><span id="line-383">    }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">    /** Returns Size of data. */</span>
-<span class="source-line-no">386</span><span id="line-386">    public long getDataSize() {</span>
-<span class="source-line-no">387</span><span id="line-387">      return dataSize;</span>
-<span class="source-line-no">388</span><span id="line-388">    }</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
-<span class="source-line-no">391</span><span id="line-391">      return new AgeSnapshot(this.hist);</span>
-<span class="source-line-no">392</span><span id="line-392">    }</span>
-<span class="source-line-no">393</span><span id="line-393"></span>
-<span class="source-line-no">394</span><span id="line-394">    @Override</span>
-<span class="source-line-no">395</span><span id="line-395">    public String toString() {</span>
-<span class="source-line-no">396</span><span id="line-396">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
-<span class="source-line-no">397</span><span id="line-397">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
-<span class="source-line-no">398</span><span id="line-398">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
-<span class="source-line-no">399</span><span id="line-399">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
-<span class="source-line-no">400</span><span id="line-400">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
-<span class="source-line-no">401</span><span id="line-401">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
-<span class="source-line-no">402</span><span id="line-402">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
-<span class="source-line-no">403</span><span id="line-403">    }</span>
-<span class="source-line-no">404</span><span id="line-404">  }</span>
-<span class="source-line-no">405</span><span id="line-405">}</span>
+<span class="source-line-no">261</span><span id="line-261">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">262</span><span id="line-262"></span>
+<span class="source-line-no">263</span><span id="line-263">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
+<span class="source-line-no">264</span><span id="line-264">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
+<span class="source-line-no">265</span><span id="line-265">  }</span>
+<span class="source-line-no">266</span><span id="line-266"></span>
+<span class="source-line-no">267</span><span id="line-267">  /**</span>
+<span class="source-line-no">268</span><span id="line-268">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
+<span class="source-line-no">269</span><span id="line-269">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
+<span class="source-line-no">270</span><span id="line-270">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
+<span class="source-line-no">271</span><span id="line-271">   * may already have been cached at write time.</span>
+<span class="source-line-no">272</span><span id="line-272">   * @param cacheConf the related CacheConfig object.</span>
+<span class="source-line-no">273</span><span id="line-273">   * @param block     the HFileBlock instance to be converted.</span>
+<span class="source-line-no">274</span><span id="line-274">   * @return the resulting HFileBlock instance without checksum.</span>
+<span class="source-line-no">275</span><span id="line-275">   */</span>
+<span class="source-line-no">276</span><span id="line-276">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
+<span class="source-line-no">277</span><span id="line-277">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
+<span class="source-line-no">278</span><span id="line-278">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
+<span class="source-line-no">279</span><span id="line-279">      ? 0</span>
+<span class="source-line-no">280</span><span id="line-280">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
+<span class="source-line-no">281</span><span id="line-281">        block.getHFileContext().getBytesPerChecksum());</span>
+<span class="source-line-no">282</span><span id="line-282">    ByteBuff buff = block.getBufferReadOnly();</span>
+<span class="source-line-no">283</span><span id="line-283">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
+<span class="source-line-no">284</span><span id="line-284">    return builder.withBlockType(block.getBlockType())</span>
+<span class="source-line-no">285</span><span id="line-285">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
+<span class="source-line-no">286</span><span id="line-286">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
+<span class="source-line-no">287</span><span id="line-287">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
+<span class="source-line-no">288</span><span id="line-288">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
+<span class="source-line-no">289</span><span id="line-289">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
+<span class="source-line-no">290</span><span id="line-290">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
+<span class="source-line-no">291</span><span id="line-291">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
+<span class="source-line-no">292</span><span id="line-292">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
+<span class="source-line-no">293</span><span id="line-293">  }</span>
+<span class="source-line-no">294</span><span id="line-294"></span>
+<span class="source-line-no">295</span><span id="line-295">  public static HFileContext cloneContext(HFileContext context) {</span>
+<span class="source-line-no">296</span><span id="line-296">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
+<span class="source-line-no">297</span><span id="line-297">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
+<span class="source-line-no">298</span><span id="line-298">      .withCompression(context.getCompression())</span>
+<span class="source-line-no">299</span><span id="line-299">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
+<span class="source-line-no">300</span><span id="line-300">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
+<span class="source-line-no">301</span><span id="line-301">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
+<span class="source-line-no">302</span><span id="line-302">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
+<span class="source-line-no">303</span><span id="line-303">    return newContext;</span>
+<span class="source-line-no">304</span><span id="line-304">  }</span>
+<span class="source-line-no">305</span><span id="line-305"></span>
+<span class="source-line-no">306</span><span id="line-306">  /**</span>
+<span class="source-line-no">307</span><span id="line-307">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
+<span class="source-line-no">308</span><span id="line-308">   * This is different than metrics in that it is stats on current state of a cache. See</span>
+<span class="source-line-no">309</span><span id="line-309">   * getLoadedCachedBlocksByFile</span>
+<span class="source-line-no">310</span><span id="line-310">   */</span>
+<span class="source-line-no">311</span><span id="line-311">  public static class CachedBlocksByFile {</span>
+<span class="source-line-no">312</span><span id="line-312">    private int count;</span>
+<span class="source-line-no">313</span><span id="line-313">    private int dataBlockCount;</span>
+<span class="source-line-no">314</span><span id="line-314">    private long size;</span>
+<span class="source-line-no">315</span><span id="line-315">    private long dataSize;</span>
+<span class="source-line-no">316</span><span id="line-316">    private final long now = System.nanoTime();</span>
+<span class="source-line-no">317</span><span id="line-317">    /**</span>
+<span class="source-line-no">318</span><span id="line-318">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
+<span class="source-line-no">319</span><span id="line-319">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
+<span class="source-line-no">320</span><span id="line-320">     * displays warning in red when stats are incomplete.</span>
+<span class="source-line-no">321</span><span id="line-321">     */</span>
+<span class="source-line-no">322</span><span id="line-322">    private final int max;</span>
+<span class="source-line-no">323</span><span id="line-323"></span>
+<span class="source-line-no">324</span><span id="line-324">    CachedBlocksByFile() {</span>
+<span class="source-line-no">325</span><span id="line-325">      this(null);</span>
+<span class="source-line-no">326</span><span id="line-326">    }</span>
+<span class="source-line-no">327</span><span id="line-327"></span>
+<span class="source-line-no">328</span><span id="line-328">    CachedBlocksByFile(final Configuration c) {</span>
+<span class="source-line-no">329</span><span id="line-329">      this.max = getMaxCachedBlocksByFile(c);</span>
+<span class="source-line-no">330</span><span id="line-330">    }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332">    /**</span>
+<span class="source-line-no">333</span><span id="line-333">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
+<span class="source-line-no">334</span><span id="line-334">     */</span>
+<span class="source-line-no">335</span><span id="line-335">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
+<span class="source-line-no">336</span><span id="line-336">      new ConcurrentSkipListMap&lt;&gt;();</span>
+<span class="source-line-no">337</span><span id="line-337">    FastLongHistogram hist = new FastLongHistogram();</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339">    /** Returns True if full.... if we won't be adding any more. */</span>
+<span class="source-line-no">340</span><span id="line-340">    public boolean update(final CachedBlock cb) {</span>
+<span class="source-line-no">341</span><span id="line-341">      if (isFull()) return true;</span>
+<span class="source-line-no">342</span><span id="line-342">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
+<span class="source-line-no">343</span><span id="line-343">      if (set == null) {</span>
+<span class="source-line-no">344</span><span id="line-344">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
+<span class="source-line-no">345</span><span id="line-345">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
+<span class="source-line-no">346</span><span id="line-346">      }</span>
+<span class="source-line-no">347</span><span id="line-347">      set.add(cb);</span>
+<span class="source-line-no">348</span><span id="line-348">      this.size += cb.getSize();</span>
+<span class="source-line-no">349</span><span id="line-349">      this.count++;</span>
+<span class="source-line-no">350</span><span id="line-350">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">351</span><span id="line-351">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">352</span><span id="line-352">        this.dataBlockCount++;</span>
+<span class="source-line-no">353</span><span id="line-353">        this.dataSize += cb.getSize();</span>
+<span class="source-line-no">354</span><span id="line-354">      }</span>
+<span class="source-line-no">355</span><span id="line-355">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
+<span class="source-line-no">356</span><span id="line-356">      this.hist.add(age, 1);</span>
+<span class="source-line-no">357</span><span id="line-357">      return false;</span>
+<span class="source-line-no">358</span><span id="line-358">    }</span>
+<span class="source-line-no">359</span><span id="line-359"></span>
+<span class="source-line-no">360</span><span id="line-360">    /**</span>
+<span class="source-line-no">361</span><span id="line-361">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
+<span class="source-line-no">362</span><span id="line-362">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
+<span class="source-line-no">363</span><span id="line-363">     *         DEFAULT_MAX).</span>
+<span class="source-line-no">364</span><span id="line-364">     */</span>
+<span class="source-line-no">365</span><span id="line-365">    public boolean isFull() {</span>
+<span class="source-line-no">366</span><span id="line-366">      return this.count &gt;= this.max;</span>
+<span class="source-line-no">367</span><span id="line-367">    }</span>
+<span class="source-line-no">368</span><span id="line-368"></span>
+<span class="source-line-no">369</span><span id="line-369">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
+<span class="source-line-no">370</span><span id="line-370">      return this.cachedBlockByFile;</span>
+<span class="source-line-no">371</span><span id="line-371">    }</span>
+<span class="source-line-no">372</span><span id="line-372"></span>
+<span class="source-line-no">373</span><span id="line-373">    /** Returns count of blocks in the cache */</span>
+<span class="source-line-no">374</span><span id="line-374">    public int getCount() {</span>
+<span class="source-line-no">375</span><span id="line-375">      return count;</span>
+<span class="source-line-no">376</span><span id="line-376">    }</span>
+<span class="source-line-no">377</span><span id="line-377"></span>
+<span class="source-line-no">378</span><span id="line-378">    public int getDataCount() {</span>
+<span class="source-line-no">379</span><span id="line-379">      return dataBlockCount;</span>
+<span class="source-line-no">380</span><span id="line-380">    }</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382">    /** Returns size of blocks in the cache */</span>
+<span class="source-line-no">383</span><span id="line-383">    public long getSize() {</span>
+<span class="source-line-no">384</span><span id="line-384">      return size;</span>
+<span class="source-line-no">385</span><span id="line-385">    }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">    /** Returns Size of data. */</span>
+<span class="source-line-no">388</span><span id="line-388">    public long getDataSize() {</span>
+<span class="source-line-no">389</span><span id="line-389">      return dataSize;</span>
+<span class="source-line-no">390</span><span id="line-390">    }</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
+<span class="source-line-no">393</span><span id="line-393">      return new AgeSnapshot(this.hist);</span>
+<span class="source-line-no">394</span><span id="line-394">    }</span>
+<span class="source-line-no">395</span><span id="line-395"></span>
+<span class="source-line-no">396</span><span id="line-396">    @Override</span>
+<span class="source-line-no">397</span><span id="line-397">    public String toString() {</span>
+<span class="source-line-no">398</span><span id="line-398">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
+<span class="source-line-no">399</span><span id="line-399">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
+<span class="source-line-no">400</span><span id="line-400">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
+<span class="source-line-no">401</span><span id="line-401">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
+<span class="source-line-no">402</span><span id="line-402">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
+<span class="source-line-no">403</span><span id="line-403">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
+<span class="source-line-no">404</span><span id="line-404">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
+<span class="source-line-no">405</span><span id="line-405">    }</span>
+<span class="source-line-no">406</span><span id="line-406">  }</span>
+<span class="source-line-no">407</span><span id="line-407">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html b/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
index bf500f2ad39..fefd721c064 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
@@ -33,389 +33,391 @@
 <span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.io.hfile.HFileBlock.FILL_HEADER;</span>
 <span class="source-line-no">021</span><span id="line-21"></span>
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
-<span class="source-line-no">023</span><span id="line-23">import java.nio.ByteBuffer;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.util.HashSet;</span>
-<span class="source-line-no">025</span><span id="line-25">import java.util.Map;</span>
-<span class="source-line-no">026</span><span id="line-26">import java.util.NavigableMap;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableSet;</span>
-<span class="source-line-no">028</span><span id="line-28">import java.util.Set;</span>
-<span class="source-line-no">029</span><span id="line-29">import java.util.concurrent.ConcurrentSkipListMap;</span>
-<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListSet;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.ChecksumType;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.GsonUtil;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.slf4j.Logger;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47">/**</span>
-<span class="source-line-no">048</span><span id="line-48"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
-<span class="source-line-no">049</span><span id="line-49"> * No attempt has been made at making this thread safe.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51">@InterfaceAudience.Private</span>
-<span class="source-line-no">052</span><span id="line-52">public class BlockCacheUtil {</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">  public static final long NANOS_PER_SECOND = 1000000000;</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58">  /**</span>
-<span class="source-line-no">059</span><span id="line-59">   * Needed generating JSON.</span>
-<span class="source-line-no">060</span><span id="line-60">   */</span>
-<span class="source-line-no">061</span><span id="line-61">  private static final Gson GSON = GsonUtil.createGson()</span>
-<span class="source-line-no">062</span><span id="line-62">    .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64">      @Override</span>
-<span class="source-line-no">065</span><span id="line-65">      public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
-<span class="source-line-no">066</span><span id="line-66">        AgeSnapshot snapshot = new AgeSnapshot(value);</span>
-<span class="source-line-no">067</span><span id="line-67">        out.beginObject();</span>
-<span class="source-line-no">068</span><span id="line-68">        out.name("mean").value(snapshot.getMean());</span>
-<span class="source-line-no">069</span><span id="line-69">        out.name("min").value(snapshot.getMin());</span>
-<span class="source-line-no">070</span><span id="line-70">        out.name("max").value(snapshot.getMax());</span>
-<span class="source-line-no">071</span><span id="line-71">        out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
-<span class="source-line-no">072</span><span id="line-72">        out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
-<span class="source-line-no">073</span><span id="line-73">        out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
-<span class="source-line-no">074</span><span id="line-74">        out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
-<span class="source-line-no">075</span><span id="line-75">        out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
-<span class="source-line-no">076</span><span id="line-76">        out.endObject();</span>
-<span class="source-line-no">077</span><span id="line-77">      }</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79">      @Override</span>
-<span class="source-line-no">080</span><span id="line-80">      public FastLongHistogram read(JsonReader in) throws IOException {</span>
-<span class="source-line-no">081</span><span id="line-81">        throw new UnsupportedOperationException();</span>
-<span class="source-line-no">082</span><span id="line-82">      }</span>
-<span class="source-line-no">083</span><span id="line-83">    }).setPrettyPrinting().create();</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85">  /** Returns The block content as String. */</span>
-<span class="source-line-no">086</span><span id="line-86">  public static String toString(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">087</span><span id="line-87">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
-<span class="source-line-no">088</span><span id="line-88">  }</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90">  /**</span>
-<span class="source-line-no">091</span><span id="line-91">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
-<span class="source-line-no">092</span><span id="line-92">   */</span>
-<span class="source-line-no">093</span><span id="line-93">  static class CachedBlockCountsPerFile {</span>
-<span class="source-line-no">094</span><span id="line-94">    private int count = 0;</span>
-<span class="source-line-no">095</span><span id="line-95">    private long size = 0;</span>
-<span class="source-line-no">096</span><span id="line-96">    private int countData = 0;</span>
-<span class="source-line-no">097</span><span id="line-97">    private long sizeData = 0;</span>
-<span class="source-line-no">098</span><span id="line-98">    private final String filename;</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100">    CachedBlockCountsPerFile(final String filename) {</span>
-<span class="source-line-no">101</span><span id="line-101">      this.filename = filename;</span>
-<span class="source-line-no">102</span><span id="line-102">    }</span>
-<span class="source-line-no">103</span><span id="line-103"></span>
-<span class="source-line-no">104</span><span id="line-104">    public int getCount() {</span>
-<span class="source-line-no">105</span><span id="line-105">      return count;</span>
-<span class="source-line-no">106</span><span id="line-106">    }</span>
-<span class="source-line-no">107</span><span id="line-107"></span>
-<span class="source-line-no">108</span><span id="line-108">    public long getSize() {</span>
-<span class="source-line-no">109</span><span id="line-109">      return size;</span>
-<span class="source-line-no">110</span><span id="line-110">    }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112">    public int getCountData() {</span>
-<span class="source-line-no">113</span><span id="line-113">      return countData;</span>
-<span class="source-line-no">114</span><span id="line-114">    }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">    public long getSizeData() {</span>
-<span class="source-line-no">117</span><span id="line-117">      return sizeData;</span>
-<span class="source-line-no">118</span><span id="line-118">    }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">    public String getFilename() {</span>
-<span class="source-line-no">121</span><span id="line-121">      return filename;</span>
-<span class="source-line-no">122</span><span id="line-122">    }</span>
-<span class="source-line-no">123</span><span id="line-123">  }</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
-<span class="source-line-no">126</span><span id="line-126">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
-<span class="source-line-no">127</span><span id="line-127">    throws IOException {</span>
-<span class="source-line-no">128</span><span id="line-128">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
-<span class="source-line-no">129</span><span id="line-129">    for (CachedBlock cb : blocks) {</span>
-<span class="source-line-no">130</span><span id="line-130">      counts.count++;</span>
-<span class="source-line-no">131</span><span id="line-131">      counts.size += cb.getSize();</span>
-<span class="source-line-no">132</span><span id="line-132">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">133</span><span id="line-133">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">134</span><span id="line-134">        counts.countData++;</span>
-<span class="source-line-no">135</span><span id="line-135">        counts.sizeData += cb.getSize();</span>
-<span class="source-line-no">136</span><span id="line-136">      }</span>
-<span class="source-line-no">137</span><span id="line-137">    }</span>
-<span class="source-line-no">138</span><span id="line-138">    return GSON.toJson(counts);</span>
-<span class="source-line-no">139</span><span id="line-139">  }</span>
-<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
-<span class="source-line-no">142</span><span id="line-142">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
-<span class="source-line-no">143</span><span id="line-143">    return GSON.toJson(cbsbf);</span>
-<span class="source-line-no">144</span><span id="line-144">  }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
-<span class="source-line-no">147</span><span id="line-147">  public static String toJSON(BlockCache bc) throws IOException {</span>
-<span class="source-line-no">148</span><span id="line-148">    return GSON.toJson(bc);</span>
-<span class="source-line-no">149</span><span id="line-149">  }</span>
-<span class="source-line-no">150</span><span id="line-150"></span>
-<span class="source-line-no">151</span><span id="line-151">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
-<span class="source-line-no">152</span><span id="line-152">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">153</span><span id="line-153">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
-<span class="source-line-no">154</span><span id="line-154">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
-<span class="source-line-no">155</span><span id="line-155">      + cb.getBlockPriority();</span>
-<span class="source-line-no">156</span><span id="line-156">  }</span>
-<span class="source-line-no">157</span><span id="line-157"></span>
-<span class="source-line-no">158</span><span id="line-158">  /**</span>
-<span class="source-line-no">159</span><span id="line-159">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
-<span class="source-line-no">160</span><span id="line-160">   * {@link BlockCache}.</span>
-<span class="source-line-no">161</span><span id="line-161">   * @param conf Used to read configurations</span>
-<span class="source-line-no">162</span><span id="line-162">   * @param bc   Block Cache to iterate.</span>
-<span class="source-line-no">163</span><span id="line-163">   * @return Laoded up instance of CachedBlocksByFile</span>
-<span class="source-line-no">164</span><span id="line-164">   */</span>
-<span class="source-line-no">165</span><span id="line-165">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
-<span class="source-line-no">166</span><span id="line-166">    final BlockCache bc) {</span>
-<span class="source-line-no">167</span><span id="line-167">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
-<span class="source-line-no">168</span><span id="line-168">    for (CachedBlock cb : bc) {</span>
-<span class="source-line-no">169</span><span id="line-169">      if (cbsbf.update(cb)) break;</span>
-<span class="source-line-no">170</span><span id="line-170">    }</span>
-<span class="source-line-no">171</span><span id="line-171">    return cbsbf;</span>
-<span class="source-line-no">172</span><span id="line-172">  }</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
-<span class="source-line-no">175</span><span id="line-175">    boolean includeNextBlockMetadata) {</span>
-<span class="source-line-no">176</span><span id="line-176">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
-<span class="source-line-no">177</span><span id="line-177">    left.serialize(l, includeNextBlockMetadata);</span>
-<span class="source-line-no">178</span><span id="line-178">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
-<span class="source-line-no">179</span><span id="line-179">    right.serialize(r, includeNextBlockMetadata);</span>
-<span class="source-line-no">180</span><span id="line-180">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
-<span class="source-line-no">181</span><span id="line-181">      r.limit());</span>
-<span class="source-line-no">182</span><span id="line-182">  }</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">  /**</span>
-<span class="source-line-no">185</span><span id="line-185">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
-<span class="source-line-no">186</span><span id="line-186">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
-<span class="source-line-no">187</span><span id="line-187">   * comparison.</span>
-<span class="source-line-no">188</span><span id="line-188">   * @param existing block that is existing in the cache.</span>
-<span class="source-line-no">189</span><span id="line-189">   * @param newBlock block that is trying to be cached.</span>
-<span class="source-line-no">190</span><span id="line-190">   * @param cacheKey the cache key of the blocks.</span>
-<span class="source-line-no">191</span><span id="line-191">   * @return comparison of the existing block to the newBlock.</span>
-<span class="source-line-no">192</span><span id="line-192">   */</span>
-<span class="source-line-no">193</span><span id="line-193">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
-<span class="source-line-no">194</span><span id="line-194">    BlockCacheKey cacheKey) {</span>
-<span class="source-line-no">195</span><span id="line-195">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
-<span class="source-line-no">196</span><span id="line-196">    if (comparison != 0) {</span>
-<span class="source-line-no">197</span><span id="line-197">      throw new RuntimeException(</span>
-<span class="source-line-no">198</span><span id="line-198">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
-<span class="source-line-no">199</span><span id="line-199">    }</span>
-<span class="source-line-no">200</span><span id="line-200">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
-<span class="source-line-no">201</span><span id="line-201">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
-<span class="source-line-no">202</span><span id="line-202">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
-<span class="source-line-no">203</span><span id="line-203">    }</span>
-<span class="source-line-no">204</span><span id="line-204">    return comparison;</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206"></span>
-<span class="source-line-no">207</span><span id="line-207">  /**</span>
-<span class="source-line-no">208</span><span id="line-208">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
-<span class="source-line-no">209</span><span id="line-209">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
-<span class="source-line-no">210</span><span id="line-210">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
-<span class="source-line-no">211</span><span id="line-211">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
-<span class="source-line-no">212</span><span id="line-212">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
-<span class="source-line-no">213</span><span id="line-213">   * new block to cache has, then we can replace the existing block with the new block for better</span>
-<span class="source-line-no">214</span><span id="line-214">   * performance.(HBASE-20447)</span>
-<span class="source-line-no">215</span><span id="line-215">   * @param blockCache BlockCache to check</span>
-<span class="source-line-no">216</span><span id="line-216">   * @param cacheKey   the block cache key</span>
-<span class="source-line-no">217</span><span id="line-217">   * @param newBlock   the new block which try to put into the block cache.</span>
-<span class="source-line-no">218</span><span id="line-218">   * @return true means need to replace existing block with new block for the same block cache key.</span>
-<span class="source-line-no">219</span><span id="line-219">   *         false means just keep the existing block.</span>
-<span class="source-line-no">220</span><span id="line-220">   */</span>
-<span class="source-line-no">221</span><span id="line-221">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
-<span class="source-line-no">222</span><span id="line-222">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
-<span class="source-line-no">223</span><span id="line-223">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
-<span class="source-line-no">224</span><span id="line-224">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
-<span class="source-line-no">225</span><span id="line-225">    if (existingBlock == null) {</span>
-<span class="source-line-no">226</span><span id="line-226">      return true;</span>
-<span class="source-line-no">227</span><span id="line-227">    }</span>
-<span class="source-line-no">228</span><span id="line-228">    try {</span>
-<span class="source-line-no">229</span><span id="line-229">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
-<span class="source-line-no">230</span><span id="line-230">      if (comparison &lt; 0) {</span>
-<span class="source-line-no">231</span><span id="line-231">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
-<span class="source-line-no">232</span><span id="line-232">          + "nextBlockOnDiskSize set. Caching new block.");</span>
-<span class="source-line-no">233</span><span id="line-233">        return true;</span>
-<span class="source-line-no">234</span><span id="line-234">      } else if (comparison &gt; 0) {</span>
-<span class="source-line-no">235</span><span id="line-235">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
-<span class="source-line-no">236</span><span id="line-236">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
-<span class="source-line-no">237</span><span id="line-237">        return false;</span>
-<span class="source-line-no">238</span><span id="line-238">      } else {</span>
-<span class="source-line-no">239</span><span id="line-239">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
-<span class="source-line-no">240</span><span id="line-240">          + "cases (see HBASE-8547)", cacheKey);</span>
-<span class="source-line-no">241</span><span id="line-241">        return false;</span>
-<span class="source-line-no">242</span><span id="line-242">      }</span>
-<span class="source-line-no">243</span><span id="line-243">    } finally {</span>
-<span class="source-line-no">244</span><span id="line-244">      // Release this block to decrement the reference count.</span>
-<span class="source-line-no">245</span><span id="line-245">      existingBlock.release();</span>
-<span class="source-line-no">246</span><span id="line-246">    }</span>
-<span class="source-line-no">247</span><span id="line-247">  }</span>
-<span class="source-line-no">248</span><span id="line-248"></span>
-<span class="source-line-no">249</span><span id="line-249">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
-<span class="source-line-no">250</span><span id="line-250">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
-<span class="source-line-no">251</span><span id="line-251">    onlineRegions.values().forEach(r -&gt; {</span>
-<span class="source-line-no">252</span><span id="line-252">      r.getStores().forEach(s -&gt; {</span>
-<span class="source-line-no">253</span><span id="line-253">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
-<span class="source-line-no">254</span><span id="line-254">      });</span>
-<span class="source-line-no">255</span><span id="line-255">    });</span>
-<span class="source-line-no">256</span><span id="line-256">    return files;</span>
-<span class="source-line-no">257</span><span id="line-257">  }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.lang.reflect.Modifier;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.nio.ByteBuffer;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.util.HashSet;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.util.Map;</span>
+<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableMap;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.NavigableSet;</span>
+<span class="source-line-no">029</span><span id="line-29">import java.util.Set;</span>
+<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListMap;</span>
+<span class="source-line-no">031</span><span id="line-31">import java.util.concurrent.ConcurrentSkipListSet;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.ChecksumType;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.util.GsonUtil;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.slf4j.Logger;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
+<span class="source-line-no">050</span><span id="line-50"> * No attempt has been made at making this thread safe.</span>
+<span class="source-line-no">051</span><span id="line-51"> */</span>
+<span class="source-line-no">052</span><span id="line-52">@InterfaceAudience.Private</span>
+<span class="source-line-no">053</span><span id="line-53">public class BlockCacheUtil {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">  public static final long NANOS_PER_SECOND = 1000000000;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59">  /**</span>
+<span class="source-line-no">060</span><span id="line-60">   * Needed generating JSON.</span>
+<span class="source-line-no">061</span><span id="line-61">   */</span>
+<span class="source-line-no">062</span><span id="line-62">  private static final Gson GSON =</span>
+<span class="source-line-no">063</span><span id="line-63">    GsonUtil.createGson().excludeFieldsWithModifiers(Modifier.PRIVATE)</span>
+<span class="source-line-no">064</span><span id="line-64">      .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66">        @Override</span>
+<span class="source-line-no">067</span><span id="line-67">        public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
+<span class="source-line-no">068</span><span id="line-68">          AgeSnapshot snapshot = new AgeSnapshot(value);</span>
+<span class="source-line-no">069</span><span id="line-69">          out.beginObject();</span>
+<span class="source-line-no">070</span><span id="line-70">          out.name("mean").value(snapshot.getMean());</span>
+<span class="source-line-no">071</span><span id="line-71">          out.name("min").value(snapshot.getMin());</span>
+<span class="source-line-no">072</span><span id="line-72">          out.name("max").value(snapshot.getMax());</span>
+<span class="source-line-no">073</span><span id="line-73">          out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
+<span class="source-line-no">074</span><span id="line-74">          out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
+<span class="source-line-no">075</span><span id="line-75">          out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
+<span class="source-line-no">076</span><span id="line-76">          out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
+<span class="source-line-no">077</span><span id="line-77">          out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
+<span class="source-line-no">078</span><span id="line-78">          out.endObject();</span>
+<span class="source-line-no">079</span><span id="line-79">        }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81">        @Override</span>
+<span class="source-line-no">082</span><span id="line-82">        public FastLongHistogram read(JsonReader in) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83">          throw new UnsupportedOperationException();</span>
+<span class="source-line-no">084</span><span id="line-84">        }</span>
+<span class="source-line-no">085</span><span id="line-85">      }).setPrettyPrinting().create();</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87">  /** Returns The block content as String. */</span>
+<span class="source-line-no">088</span><span id="line-88">  public static String toString(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">089</span><span id="line-89">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
+<span class="source-line-no">090</span><span id="line-90">  }</span>
+<span class="source-line-no">091</span><span id="line-91"></span>
+<span class="source-line-no">092</span><span id="line-92">  /**</span>
+<span class="source-line-no">093</span><span id="line-93">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
+<span class="source-line-no">094</span><span id="line-94">   */</span>
+<span class="source-line-no">095</span><span id="line-95">  static class CachedBlockCountsPerFile {</span>
+<span class="source-line-no">096</span><span id="line-96">    private int count = 0;</span>
+<span class="source-line-no">097</span><span id="line-97">    private long size = 0;</span>
+<span class="source-line-no">098</span><span id="line-98">    private int countData = 0;</span>
+<span class="source-line-no">099</span><span id="line-99">    private long sizeData = 0;</span>
+<span class="source-line-no">100</span><span id="line-100">    private final String filename;</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102">    CachedBlockCountsPerFile(final String filename) {</span>
+<span class="source-line-no">103</span><span id="line-103">      this.filename = filename;</span>
+<span class="source-line-no">104</span><span id="line-104">    }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106">    public int getCount() {</span>
+<span class="source-line-no">107</span><span id="line-107">      return count;</span>
+<span class="source-line-no">108</span><span id="line-108">    }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">    public long getSize() {</span>
+<span class="source-line-no">111</span><span id="line-111">      return size;</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114">    public int getCountData() {</span>
+<span class="source-line-no">115</span><span id="line-115">      return countData;</span>
+<span class="source-line-no">116</span><span id="line-116">    }</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118">    public long getSizeData() {</span>
+<span class="source-line-no">119</span><span id="line-119">      return sizeData;</span>
+<span class="source-line-no">120</span><span id="line-120">    }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">    public String getFilename() {</span>
+<span class="source-line-no">123</span><span id="line-123">      return filename;</span>
+<span class="source-line-no">124</span><span id="line-124">    }</span>
+<span class="source-line-no">125</span><span id="line-125">  }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
+<span class="source-line-no">128</span><span id="line-128">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
+<span class="source-line-no">129</span><span id="line-129">    throws IOException {</span>
+<span class="source-line-no">130</span><span id="line-130">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
+<span class="source-line-no">131</span><span id="line-131">    for (CachedBlock cb : blocks) {</span>
+<span class="source-line-no">132</span><span id="line-132">      counts.count++;</span>
+<span class="source-line-no">133</span><span id="line-133">      counts.size += cb.getSize();</span>
+<span class="source-line-no">134</span><span id="line-134">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">135</span><span id="line-135">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">136</span><span id="line-136">        counts.countData++;</span>
+<span class="source-line-no">137</span><span id="line-137">        counts.sizeData += cb.getSize();</span>
+<span class="source-line-no">138</span><span id="line-138">      }</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140">    return GSON.toJson(counts);</span>
+<span class="source-line-no">141</span><span id="line-141">  }</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
+<span class="source-line-no">144</span><span id="line-144">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
+<span class="source-line-no">145</span><span id="line-145">    return GSON.toJson(cbsbf);</span>
+<span class="source-line-no">146</span><span id="line-146">  }</span>
+<span class="source-line-no">147</span><span id="line-147"></span>
+<span class="source-line-no">148</span><span id="line-148">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
+<span class="source-line-no">149</span><span id="line-149">  public static String toJSON(BlockCache bc) throws IOException {</span>
+<span class="source-line-no">150</span><span id="line-150">    return GSON.toJson(bc);</span>
+<span class="source-line-no">151</span><span id="line-151">  }</span>
+<span class="source-line-no">152</span><span id="line-152"></span>
+<span class="source-line-no">153</span><span id="line-153">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
+<span class="source-line-no">154</span><span id="line-154">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">155</span><span id="line-155">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
+<span class="source-line-no">156</span><span id="line-156">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
+<span class="source-line-no">157</span><span id="line-157">      + cb.getBlockPriority();</span>
+<span class="source-line-no">158</span><span id="line-158">  }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">  /**</span>
+<span class="source-line-no">161</span><span id="line-161">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
+<span class="source-line-no">162</span><span id="line-162">   * {@link BlockCache}.</span>
+<span class="source-line-no">163</span><span id="line-163">   * @param conf Used to read configurations</span>
+<span class="source-line-no">164</span><span id="line-164">   * @param bc   Block Cache to iterate.</span>
+<span class="source-line-no">165</span><span id="line-165">   * @return Laoded up instance of CachedBlocksByFile</span>
+<span class="source-line-no">166</span><span id="line-166">   */</span>
+<span class="source-line-no">167</span><span id="line-167">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
+<span class="source-line-no">168</span><span id="line-168">    final BlockCache bc) {</span>
+<span class="source-line-no">169</span><span id="line-169">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
+<span class="source-line-no">170</span><span id="line-170">    for (CachedBlock cb : bc) {</span>
+<span class="source-line-no">171</span><span id="line-171">      if (cbsbf.update(cb)) break;</span>
+<span class="source-line-no">172</span><span id="line-172">    }</span>
+<span class="source-line-no">173</span><span id="line-173">    return cbsbf;</span>
+<span class="source-line-no">174</span><span id="line-174">  }</span>
+<span class="source-line-no">175</span><span id="line-175"></span>
+<span class="source-line-no">176</span><span id="line-176">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
+<span class="source-line-no">177</span><span id="line-177">    boolean includeNextBlockMetadata) {</span>
+<span class="source-line-no">178</span><span id="line-178">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
+<span class="source-line-no">179</span><span id="line-179">    left.serialize(l, includeNextBlockMetadata);</span>
+<span class="source-line-no">180</span><span id="line-180">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
+<span class="source-line-no">181</span><span id="line-181">    right.serialize(r, includeNextBlockMetadata);</span>
+<span class="source-line-no">182</span><span id="line-182">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
+<span class="source-line-no">183</span><span id="line-183">      r.limit());</span>
+<span class="source-line-no">184</span><span id="line-184">  }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186">  /**</span>
+<span class="source-line-no">187</span><span id="line-187">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
+<span class="source-line-no">188</span><span id="line-188">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
+<span class="source-line-no">189</span><span id="line-189">   * comparison.</span>
+<span class="source-line-no">190</span><span id="line-190">   * @param existing block that is existing in the cache.</span>
+<span class="source-line-no">191</span><span id="line-191">   * @param newBlock block that is trying to be cached.</span>
+<span class="source-line-no">192</span><span id="line-192">   * @param cacheKey the cache key of the blocks.</span>
+<span class="source-line-no">193</span><span id="line-193">   * @return comparison of the existing block to the newBlock.</span>
+<span class="source-line-no">194</span><span id="line-194">   */</span>
+<span class="source-line-no">195</span><span id="line-195">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
+<span class="source-line-no">196</span><span id="line-196">    BlockCacheKey cacheKey) {</span>
+<span class="source-line-no">197</span><span id="line-197">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
+<span class="source-line-no">198</span><span id="line-198">    if (comparison != 0) {</span>
+<span class="source-line-no">199</span><span id="line-199">      throw new RuntimeException(</span>
+<span class="source-line-no">200</span><span id="line-200">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
+<span class="source-line-no">201</span><span id="line-201">    }</span>
+<span class="source-line-no">202</span><span id="line-202">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
+<span class="source-line-no">203</span><span id="line-203">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
+<span class="source-line-no">204</span><span id="line-204">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
+<span class="source-line-no">205</span><span id="line-205">    }</span>
+<span class="source-line-no">206</span><span id="line-206">    return comparison;</span>
+<span class="source-line-no">207</span><span id="line-207">  }</span>
+<span class="source-line-no">208</span><span id="line-208"></span>
+<span class="source-line-no">209</span><span id="line-209">  /**</span>
+<span class="source-line-no">210</span><span id="line-210">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
+<span class="source-line-no">211</span><span id="line-211">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
+<span class="source-line-no">212</span><span id="line-212">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
+<span class="source-line-no">213</span><span id="line-213">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
+<span class="source-line-no">214</span><span id="line-214">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
+<span class="source-line-no">215</span><span id="line-215">   * new block to cache has, then we can replace the existing block with the new block for better</span>
+<span class="source-line-no">216</span><span id="line-216">   * performance.(HBASE-20447)</span>
+<span class="source-line-no">217</span><span id="line-217">   * @param blockCache BlockCache to check</span>
+<span class="source-line-no">218</span><span id="line-218">   * @param cacheKey   the block cache key</span>
+<span class="source-line-no">219</span><span id="line-219">   * @param newBlock   the new block which try to put into the block cache.</span>
+<span class="source-line-no">220</span><span id="line-220">   * @return true means need to replace existing block with new block for the same block cache key.</span>
+<span class="source-line-no">221</span><span id="line-221">   *         false means just keep the existing block.</span>
+<span class="source-line-no">222</span><span id="line-222">   */</span>
+<span class="source-line-no">223</span><span id="line-223">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
+<span class="source-line-no">224</span><span id="line-224">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
+<span class="source-line-no">225</span><span id="line-225">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
+<span class="source-line-no">226</span><span id="line-226">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
+<span class="source-line-no">227</span><span id="line-227">    if (existingBlock == null) {</span>
+<span class="source-line-no">228</span><span id="line-228">      return true;</span>
+<span class="source-line-no">229</span><span id="line-229">    }</span>
+<span class="source-line-no">230</span><span id="line-230">    try {</span>
+<span class="source-line-no">231</span><span id="line-231">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
+<span class="source-line-no">232</span><span id="line-232">      if (comparison &lt; 0) {</span>
+<span class="source-line-no">233</span><span id="line-233">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
+<span class="source-line-no">234</span><span id="line-234">          + "nextBlockOnDiskSize set. Caching new block.");</span>
+<span class="source-line-no">235</span><span id="line-235">        return true;</span>
+<span class="source-line-no">236</span><span id="line-236">      } else if (comparison &gt; 0) {</span>
+<span class="source-line-no">237</span><span id="line-237">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
+<span class="source-line-no">238</span><span id="line-238">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
+<span class="source-line-no">239</span><span id="line-239">        return false;</span>
+<span class="source-line-no">240</span><span id="line-240">      } else {</span>
+<span class="source-line-no">241</span><span id="line-241">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
+<span class="source-line-no">242</span><span id="line-242">          + "cases (see HBASE-8547)", cacheKey);</span>
+<span class="source-line-no">243</span><span id="line-243">        return false;</span>
+<span class="source-line-no">244</span><span id="line-244">      }</span>
+<span class="source-line-no">245</span><span id="line-245">    } finally {</span>
+<span class="source-line-no">246</span><span id="line-246">      // Release this block to decrement the reference count.</span>
+<span class="source-line-no">247</span><span id="line-247">      existingBlock.release();</span>
+<span class="source-line-no">248</span><span id="line-248">    }</span>
+<span class="source-line-no">249</span><span id="line-249">  }</span>
+<span class="source-line-no">250</span><span id="line-250"></span>
+<span class="source-line-no">251</span><span id="line-251">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
+<span class="source-line-no">252</span><span id="line-252">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
+<span class="source-line-no">253</span><span id="line-253">    onlineRegions.values().forEach(r -&gt; {</span>
+<span class="source-line-no">254</span><span id="line-254">      r.getStores().forEach(s -&gt; {</span>
+<span class="source-line-no">255</span><span id="line-255">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
+<span class="source-line-no">256</span><span id="line-256">      });</span>
+<span class="source-line-no">257</span><span id="line-257">    });</span>
+<span class="source-line-no">258</span><span id="line-258">    return files;</span>
+<span class="source-line-no">259</span><span id="line-259">  }</span>
 <span class="source-line-no">260</span><span id="line-260"></span>
-<span class="source-line-no">261</span><span id="line-261">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
-<span class="source-line-no">262</span><span id="line-262">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
-<span class="source-line-no">263</span><span id="line-263">  }</span>
-<span class="source-line-no">264</span><span id="line-264"></span>
-<span class="source-line-no">265</span><span id="line-265">  /**</span>
-<span class="source-line-no">266</span><span id="line-266">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
-<span class="source-line-no">267</span><span id="line-267">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
-<span class="source-line-no">268</span><span id="line-268">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
-<span class="source-line-no">269</span><span id="line-269">   * may already have been cached at write time.</span>
-<span class="source-line-no">270</span><span id="line-270">   * @param cacheConf the related CacheConfig object.</span>
-<span class="source-line-no">271</span><span id="line-271">   * @param block     the HFileBlock instance to be converted.</span>
-<span class="source-line-no">272</span><span id="line-272">   * @return the resulting HFileBlock instance without checksum.</span>
-<span class="source-line-no">273</span><span id="line-273">   */</span>
-<span class="source-line-no">274</span><span id="line-274">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
-<span class="source-line-no">275</span><span id="line-275">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
-<span class="source-line-no">276</span><span id="line-276">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
-<span class="source-line-no">277</span><span id="line-277">      ? 0</span>
-<span class="source-line-no">278</span><span id="line-278">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
-<span class="source-line-no">279</span><span id="line-279">        block.getHFileContext().getBytesPerChecksum());</span>
-<span class="source-line-no">280</span><span id="line-280">    ByteBuff buff = block.getBufferReadOnly();</span>
-<span class="source-line-no">281</span><span id="line-281">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
-<span class="source-line-no">282</span><span id="line-282">    return builder.withBlockType(block.getBlockType())</span>
-<span class="source-line-no">283</span><span id="line-283">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
-<span class="source-line-no">284</span><span id="line-284">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
-<span class="source-line-no">285</span><span id="line-285">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
-<span class="source-line-no">286</span><span id="line-286">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
-<span class="source-line-no">287</span><span id="line-287">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
-<span class="source-line-no">288</span><span id="line-288">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
-<span class="source-line-no">289</span><span id="line-289">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
-<span class="source-line-no">290</span><span id="line-290">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
-<span class="source-line-no">291</span><span id="line-291">  }</span>
-<span class="source-line-no">292</span><span id="line-292"></span>
-<span class="source-line-no">293</span><span id="line-293">  public static HFileContext cloneContext(HFileContext context) {</span>
-<span class="source-line-no">294</span><span id="line-294">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
-<span class="source-line-no">295</span><span id="line-295">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
-<span class="source-line-no">296</span><span id="line-296">      .withCompression(context.getCompression())</span>
-<span class="source-line-no">297</span><span id="line-297">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
-<span class="source-line-no">298</span><span id="line-298">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
-<span class="source-line-no">299</span><span id="line-299">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
-<span class="source-line-no">300</span><span id="line-300">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
-<span class="source-line-no">301</span><span id="line-301">    return newContext;</span>
-<span class="source-line-no">302</span><span id="line-302">  }</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304">  /**</span>
-<span class="source-line-no">305</span><span id="line-305">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
-<span class="source-line-no">306</span><span id="line-306">   * This is different than metrics in that it is stats on current state of a cache. See</span>
-<span class="source-line-no">307</span><span id="line-307">   * getLoadedCachedBlocksByFile</span>
-<span class="source-line-no">308</span><span id="line-308">   */</span>
-<span class="source-line-no">309</span><span id="line-309">  public static class CachedBlocksByFile {</span>
-<span class="source-line-no">310</span><span id="line-310">    private int count;</span>
-<span class="source-line-no">311</span><span id="line-311">    private int dataBlockCount;</span>
-<span class="source-line-no">312</span><span id="line-312">    private long size;</span>
-<span class="source-line-no">313</span><span id="line-313">    private long dataSize;</span>
-<span class="source-line-no">314</span><span id="line-314">    private final long now = System.nanoTime();</span>
-<span class="source-line-no">315</span><span id="line-315">    /**</span>
-<span class="source-line-no">316</span><span id="line-316">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
-<span class="source-line-no">317</span><span id="line-317">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
-<span class="source-line-no">318</span><span id="line-318">     * displays warning in red when stats are incomplete.</span>
-<span class="source-line-no">319</span><span id="line-319">     */</span>
-<span class="source-line-no">320</span><span id="line-320">    private final int max;</span>
-<span class="source-line-no">321</span><span id="line-321"></span>
-<span class="source-line-no">322</span><span id="line-322">    CachedBlocksByFile() {</span>
-<span class="source-line-no">323</span><span id="line-323">      this(null);</span>
-<span class="source-line-no">324</span><span id="line-324">    }</span>
-<span class="source-line-no">325</span><span id="line-325"></span>
-<span class="source-line-no">326</span><span id="line-326">    CachedBlocksByFile(final Configuration c) {</span>
-<span class="source-line-no">327</span><span id="line-327">      this.max = getMaxCachedBlocksByFile(c);</span>
-<span class="source-line-no">328</span><span id="line-328">    }</span>
-<span class="source-line-no">329</span><span id="line-329"></span>
-<span class="source-line-no">330</span><span id="line-330">    /**</span>
-<span class="source-line-no">331</span><span id="line-331">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
-<span class="source-line-no">332</span><span id="line-332">     */</span>
-<span class="source-line-no">333</span><span id="line-333">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
-<span class="source-line-no">334</span><span id="line-334">      new ConcurrentSkipListMap&lt;&gt;();</span>
-<span class="source-line-no">335</span><span id="line-335">    FastLongHistogram hist = new FastLongHistogram();</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337">    /** Returns True if full.... if we won't be adding any more. */</span>
-<span class="source-line-no">338</span><span id="line-338">    public boolean update(final CachedBlock cb) {</span>
-<span class="source-line-no">339</span><span id="line-339">      if (isFull()) return true;</span>
-<span class="source-line-no">340</span><span id="line-340">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
-<span class="source-line-no">341</span><span id="line-341">      if (set == null) {</span>
-<span class="source-line-no">342</span><span id="line-342">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
-<span class="source-line-no">343</span><span id="line-343">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
-<span class="source-line-no">344</span><span id="line-344">      }</span>
-<span class="source-line-no">345</span><span id="line-345">      set.add(cb);</span>
-<span class="source-line-no">346</span><span id="line-346">      this.size += cb.getSize();</span>
-<span class="source-line-no">347</span><span id="line-347">      this.count++;</span>
-<span class="source-line-no">348</span><span id="line-348">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">349</span><span id="line-349">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">350</span><span id="line-350">        this.dataBlockCount++;</span>
-<span class="source-line-no">351</span><span id="line-351">        this.dataSize += cb.getSize();</span>
-<span class="source-line-no">352</span><span id="line-352">      }</span>
-<span class="source-line-no">353</span><span id="line-353">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
-<span class="source-line-no">354</span><span id="line-354">      this.hist.add(age, 1);</span>
-<span class="source-line-no">355</span><span id="line-355">      return false;</span>
-<span class="source-line-no">356</span><span id="line-356">    }</span>
-<span class="source-line-no">357</span><span id="line-357"></span>
-<span class="source-line-no">358</span><span id="line-358">    /**</span>
-<span class="source-line-no">359</span><span id="line-359">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
-<span class="source-line-no">360</span><span id="line-360">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
-<span class="source-line-no">361</span><span id="line-361">     *         DEFAULT_MAX).</span>
-<span class="source-line-no">362</span><span id="line-362">     */</span>
-<span class="source-line-no">363</span><span id="line-363">    public boolean isFull() {</span>
-<span class="source-line-no">364</span><span id="line-364">      return this.count &gt;= this.max;</span>
-<span class="source-line-no">365</span><span id="line-365">    }</span>
-<span class="source-line-no">366</span><span id="line-366"></span>
-<span class="source-line-no">367</span><span id="line-367">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
-<span class="source-line-no">368</span><span id="line-368">      return this.cachedBlockByFile;</span>
-<span class="source-line-no">369</span><span id="line-369">    }</span>
-<span class="source-line-no">370</span><span id="line-370"></span>
-<span class="source-line-no">371</span><span id="line-371">    /** Returns count of blocks in the cache */</span>
-<span class="source-line-no">372</span><span id="line-372">    public int getCount() {</span>
-<span class="source-line-no">373</span><span id="line-373">      return count;</span>
-<span class="source-line-no">374</span><span id="line-374">    }</span>
-<span class="source-line-no">375</span><span id="line-375"></span>
-<span class="source-line-no">376</span><span id="line-376">    public int getDataCount() {</span>
-<span class="source-line-no">377</span><span id="line-377">      return dataBlockCount;</span>
-<span class="source-line-no">378</span><span id="line-378">    }</span>
-<span class="source-line-no">379</span><span id="line-379"></span>
-<span class="source-line-no">380</span><span id="line-380">    /** Returns size of blocks in the cache */</span>
-<span class="source-line-no">381</span><span id="line-381">    public long getSize() {</span>
-<span class="source-line-no">382</span><span id="line-382">      return size;</span>
-<span class="source-line-no">383</span><span id="line-383">    }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">    /** Returns Size of data. */</span>
-<span class="source-line-no">386</span><span id="line-386">    public long getDataSize() {</span>
-<span class="source-line-no">387</span><span id="line-387">      return dataSize;</span>
-<span class="source-line-no">388</span><span id="line-388">    }</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
-<span class="source-line-no">391</span><span id="line-391">      return new AgeSnapshot(this.hist);</span>
-<span class="source-line-no">392</span><span id="line-392">    }</span>
-<span class="source-line-no">393</span><span id="line-393"></span>
-<span class="source-line-no">394</span><span id="line-394">    @Override</span>
-<span class="source-line-no">395</span><span id="line-395">    public String toString() {</span>
-<span class="source-line-no">396</span><span id="line-396">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
-<span class="source-line-no">397</span><span id="line-397">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
-<span class="source-line-no">398</span><span id="line-398">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
-<span class="source-line-no">399</span><span id="line-399">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
-<span class="source-line-no">400</span><span id="line-400">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
-<span class="source-line-no">401</span><span id="line-401">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
-<span class="source-line-no">402</span><span id="line-402">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
-<span class="source-line-no">403</span><span id="line-403">    }</span>
-<span class="source-line-no">404</span><span id="line-404">  }</span>
-<span class="source-line-no">405</span><span id="line-405">}</span>
+<span class="source-line-no">261</span><span id="line-261">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">262</span><span id="line-262"></span>
+<span class="source-line-no">263</span><span id="line-263">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
+<span class="source-line-no">264</span><span id="line-264">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
+<span class="source-line-no">265</span><span id="line-265">  }</span>
+<span class="source-line-no">266</span><span id="line-266"></span>
+<span class="source-line-no">267</span><span id="line-267">  /**</span>
+<span class="source-line-no">268</span><span id="line-268">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
+<span class="source-line-no">269</span><span id="line-269">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
+<span class="source-line-no">270</span><span id="line-270">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
+<span class="source-line-no">271</span><span id="line-271">   * may already have been cached at write time.</span>
+<span class="source-line-no">272</span><span id="line-272">   * @param cacheConf the related CacheConfig object.</span>
+<span class="source-line-no">273</span><span id="line-273">   * @param block     the HFileBlock instance to be converted.</span>
+<span class="source-line-no">274</span><span id="line-274">   * @return the resulting HFileBlock instance without checksum.</span>
+<span class="source-line-no">275</span><span id="line-275">   */</span>
+<span class="source-line-no">276</span><span id="line-276">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
+<span class="source-line-no">277</span><span id="line-277">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
+<span class="source-line-no">278</span><span id="line-278">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
+<span class="source-line-no">279</span><span id="line-279">      ? 0</span>
+<span class="source-line-no">280</span><span id="line-280">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
+<span class="source-line-no">281</span><span id="line-281">        block.getHFileContext().getBytesPerChecksum());</span>
+<span class="source-line-no">282</span><span id="line-282">    ByteBuff buff = block.getBufferReadOnly();</span>
+<span class="source-line-no">283</span><span id="line-283">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
+<span class="source-line-no">284</span><span id="line-284">    return builder.withBlockType(block.getBlockType())</span>
+<span class="source-line-no">285</span><span id="line-285">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
+<span class="source-line-no">286</span><span id="line-286">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
+<span class="source-line-no">287</span><span id="line-287">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
+<span class="source-line-no">288</span><span id="line-288">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
+<span class="source-line-no">289</span><span id="line-289">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
+<span class="source-line-no">290</span><span id="line-290">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
+<span class="source-line-no">291</span><span id="line-291">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
+<span class="source-line-no">292</span><span id="line-292">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
+<span class="source-line-no">293</span><span id="line-293">  }</span>
+<span class="source-line-no">294</span><span id="line-294"></span>
+<span class="source-line-no">295</span><span id="line-295">  public static HFileContext cloneContext(HFileContext context) {</span>
+<span class="source-line-no">296</span><span id="line-296">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
+<span class="source-line-no">297</span><span id="line-297">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
+<span class="source-line-no">298</span><span id="line-298">      .withCompression(context.getCompression())</span>
+<span class="source-line-no">299</span><span id="line-299">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
+<span class="source-line-no">300</span><span id="line-300">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
+<span class="source-line-no">301</span><span id="line-301">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
+<span class="source-line-no">302</span><span id="line-302">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
+<span class="source-line-no">303</span><span id="line-303">    return newContext;</span>
+<span class="source-line-no">304</span><span id="line-304">  }</span>
+<span class="source-line-no">305</span><span id="line-305"></span>
+<span class="source-line-no">306</span><span id="line-306">  /**</span>
+<span class="source-line-no">307</span><span id="line-307">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
+<span class="source-line-no">308</span><span id="line-308">   * This is different than metrics in that it is stats on current state of a cache. See</span>
+<span class="source-line-no">309</span><span id="line-309">   * getLoadedCachedBlocksByFile</span>
+<span class="source-line-no">310</span><span id="line-310">   */</span>
+<span class="source-line-no">311</span><span id="line-311">  public static class CachedBlocksByFile {</span>
+<span class="source-line-no">312</span><span id="line-312">    private int count;</span>
+<span class="source-line-no">313</span><span id="line-313">    private int dataBlockCount;</span>
+<span class="source-line-no">314</span><span id="line-314">    private long size;</span>
+<span class="source-line-no">315</span><span id="line-315">    private long dataSize;</span>
+<span class="source-line-no">316</span><span id="line-316">    private final long now = System.nanoTime();</span>
+<span class="source-line-no">317</span><span id="line-317">    /**</span>
+<span class="source-line-no">318</span><span id="line-318">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
+<span class="source-line-no">319</span><span id="line-319">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
+<span class="source-line-no">320</span><span id="line-320">     * displays warning in red when stats are incomplete.</span>
+<span class="source-line-no">321</span><span id="line-321">     */</span>
+<span class="source-line-no">322</span><span id="line-322">    private final int max;</span>
+<span class="source-line-no">323</span><span id="line-323"></span>
+<span class="source-line-no">324</span><span id="line-324">    CachedBlocksByFile() {</span>
+<span class="source-line-no">325</span><span id="line-325">      this(null);</span>
+<span class="source-line-no">326</span><span id="line-326">    }</span>
+<span class="source-line-no">327</span><span id="line-327"></span>
+<span class="source-line-no">328</span><span id="line-328">    CachedBlocksByFile(final Configuration c) {</span>
+<span class="source-line-no">329</span><span id="line-329">      this.max = getMaxCachedBlocksByFile(c);</span>
+<span class="source-line-no">330</span><span id="line-330">    }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332">    /**</span>
+<span class="source-line-no">333</span><span id="line-333">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
+<span class="source-line-no">334</span><span id="line-334">     */</span>
+<span class="source-line-no">335</span><span id="line-335">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
+<span class="source-line-no">336</span><span id="line-336">      new ConcurrentSkipListMap&lt;&gt;();</span>
+<span class="source-line-no">337</span><span id="line-337">    FastLongHistogram hist = new FastLongHistogram();</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339">    /** Returns True if full.... if we won't be adding any more. */</span>
+<span class="source-line-no">340</span><span id="line-340">    public boolean update(final CachedBlock cb) {</span>
+<span class="source-line-no">341</span><span id="line-341">      if (isFull()) return true;</span>
+<span class="source-line-no">342</span><span id="line-342">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
+<span class="source-line-no">343</span><span id="line-343">      if (set == null) {</span>
+<span class="source-line-no">344</span><span id="line-344">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
+<span class="source-line-no">345</span><span id="line-345">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
+<span class="source-line-no">346</span><span id="line-346">      }</span>
+<span class="source-line-no">347</span><span id="line-347">      set.add(cb);</span>
+<span class="source-line-no">348</span><span id="line-348">      this.size += cb.getSize();</span>
+<span class="source-line-no">349</span><span id="line-349">      this.count++;</span>
+<span class="source-line-no">350</span><span id="line-350">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">351</span><span id="line-351">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">352</span><span id="line-352">        this.dataBlockCount++;</span>
+<span class="source-line-no">353</span><span id="line-353">        this.dataSize += cb.getSize();</span>
+<span class="source-line-no">354</span><span id="line-354">      }</span>
+<span class="source-line-no">355</span><span id="line-355">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
+<span class="source-line-no">356</span><span id="line-356">      this.hist.add(age, 1);</span>
+<span class="source-line-no">357</span><span id="line-357">      return false;</span>
+<span class="source-line-no">358</span><span id="line-358">    }</span>
+<span class="source-line-no">359</span><span id="line-359"></span>
+<span class="source-line-no">360</span><span id="line-360">    /**</span>
+<span class="source-line-no">361</span><span id="line-361">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
+<span class="source-line-no">362</span><span id="line-362">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
+<span class="source-line-no">363</span><span id="line-363">     *         DEFAULT_MAX).</span>
+<span class="source-line-no">364</span><span id="line-364">     */</span>
+<span class="source-line-no">365</span><span id="line-365">    public boolean isFull() {</span>
+<span class="source-line-no">366</span><span id="line-366">      return this.count &gt;= this.max;</span>
+<span class="source-line-no">367</span><span id="line-367">    }</span>
+<span class="source-line-no">368</span><span id="line-368"></span>
+<span class="source-line-no">369</span><span id="line-369">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
+<span class="source-line-no">370</span><span id="line-370">      return this.cachedBlockByFile;</span>
+<span class="source-line-no">371</span><span id="line-371">    }</span>
+<span class="source-line-no">372</span><span id="line-372"></span>
+<span class="source-line-no">373</span><span id="line-373">    /** Returns count of blocks in the cache */</span>
+<span class="source-line-no">374</span><span id="line-374">    public int getCount() {</span>
+<span class="source-line-no">375</span><span id="line-375">      return count;</span>
+<span class="source-line-no">376</span><span id="line-376">    }</span>
+<span class="source-line-no">377</span><span id="line-377"></span>
+<span class="source-line-no">378</span><span id="line-378">    public int getDataCount() {</span>
+<span class="source-line-no">379</span><span id="line-379">      return dataBlockCount;</span>
+<span class="source-line-no">380</span><span id="line-380">    }</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382">    /** Returns size of blocks in the cache */</span>
+<span class="source-line-no">383</span><span id="line-383">    public long getSize() {</span>
+<span class="source-line-no">384</span><span id="line-384">      return size;</span>
+<span class="source-line-no">385</span><span id="line-385">    }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">    /** Returns Size of data. */</span>
+<span class="source-line-no">388</span><span id="line-388">    public long getDataSize() {</span>
+<span class="source-line-no">389</span><span id="line-389">      return dataSize;</span>
+<span class="source-line-no">390</span><span id="line-390">    }</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
+<span class="source-line-no">393</span><span id="line-393">      return new AgeSnapshot(this.hist);</span>
+<span class="source-line-no">394</span><span id="line-394">    }</span>
+<span class="source-line-no">395</span><span id="line-395"></span>
+<span class="source-line-no">396</span><span id="line-396">    @Override</span>
+<span class="source-line-no">397</span><span id="line-397">    public String toString() {</span>
+<span class="source-line-no">398</span><span id="line-398">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
+<span class="source-line-no">399</span><span id="line-399">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
+<span class="source-line-no">400</span><span id="line-400">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
+<span class="source-line-no">401</span><span id="line-401">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
+<span class="source-line-no">402</span><span id="line-402">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
+<span class="source-line-no">403</span><span id="line-403">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
+<span class="source-line-no">404</span><span id="line-404">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
+<span class="source-line-no">405</span><span id="line-405">    }</span>
+<span class="source-line-no">406</span><span id="line-406">  }</span>
+<span class="source-line-no">407</span><span id="line-407">}</span>
 
 
 
diff --git a/book.html b/book.html
index dca7d87fd10..b20b0149ff8 100644
--- a/book.html
+++ b/book.html
@@ -49877,7 +49877,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 4.0.0-alpha-1-SNAPSHOT<br>
-Last updated 2025-07-02 14:31:28 UTC
+Last updated 2025-07-07 14:30:02 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index c7142016873..b5f71621d88 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -185,7 +185,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index dbd5361052f..f182a935892 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7802,19 +7802,19 @@
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
-<td>51</td></tr>
+<td>52</td></tr>
 <tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>169</td></tr>
+<td>171</td></tr>
 <tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>339</td></tr></table></section><section>
+<td>341</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.io.hfile.BlockCachesIterator.java">org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.java</h3>
 <table border="0" class="table table-striped">
 <tr class="b">
@@ -18547,7 +18547,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle.rss b/checkstyle.rss
index fbd0dbc668f..8593049525b 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -1376,7 +1376,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.QueueBalancer.java">org/apache/hadoop/hbase/ipc/QueueBalancer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TableSnapshotScanner.java">org/apache/hadoop/hbase/client/TableSnapshotScanner.java</a>
                 </td>
                 <td>
                   0
@@ -1390,7 +1390,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.FSHLogProvider.java">org/apache/hadoop/hbase/wal/FSHLogProvider.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.QueueBalancer.java">org/apache/hadoop/hbase/ipc/QueueBalancer.java</a>
                 </td>
                 <td>
                   0
@@ -1404,7 +1404,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TableSnapshotScanner.java">org/apache/hadoop/hbase/client/TableSnapshotScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.FSHLogProvider.java">org/apache/hadoop/hbase/wal/FSHLogProvider.java</a>
                 </td>
                 <td>
                   0
@@ -2454,7 +2454,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestResult.java">org/apache/hadoop/hbase/client/TestResult.java</a>
                 </td>
                 <td>
                   0
@@ -2468,7 +2468,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestResult.java">org/apache/hadoop/hbase/client/TestResult.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java</a>
                 </td>
                 <td>
                   0
@@ -3182,7 +3182,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.SinusoidalFileListGenerator.java">org/apache/hadoop/hbase/regionserver/compactions/SinusoidalFileListGenerator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestPreadReversedScanner.java">org/apache/hadoop/hbase/client/TestPreadReversedScanner.java</a>
                 </td>
                 <td>
                   0
@@ -3196,7 +3196,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestPreadReversedScanner.java">org/apache/hadoop/hbase/client/TestPreadReversedScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.SinusoidalFileListGenerator.java">org/apache/hadoop/hbase/regionserver/compactions/SinusoidalFileListGenerator.java</a>
                 </td>
                 <td>
                   0
@@ -3294,7 +3294,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorMetrics.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestForceCacheImportantBlocks.java">org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.java</a>
                 </td>
                 <td>
                   0
@@ -3303,12 +3303,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestForceCacheImportantBlocks.java">org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorMetrics.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -3317,7 +3317,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -3574,7 +3574,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestAtomicOperation.java">org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestRpcConnectionRegistry.java">org/apache/hadoop/hbase/client/TestRpcConnectionRegistry.java</a>
                 </td>
                 <td>
                   0
@@ -3583,12 +3583,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestRpcConnectionRegistry.java">org/apache/hadoop/hbase/client/TestRpcConnectionRegistry.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestAtomicOperation.java">org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java</a>
                 </td>
                 <td>
                   0
@@ -3597,7 +3597,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
@@ -3868,7 +3868,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRegionBypass.java">org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java</a>
                 </td>
                 <td>
                   0
@@ -3877,12 +3877,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  8
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRegionBypass.java">org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</a>
                 </td>
                 <td>
                   0
@@ -3891,7 +3891,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  8
                 </td>
               </tr>
                           <tr>
@@ -4708,7 +4708,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.TestRpcLogDetails.java">org/apache/hadoop/hbase/namequeues/TestRpcLogDetails.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</a>
                 </td>
                 <td>
                   0
@@ -4717,12 +4717,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.TestRpcLogDetails.java">org/apache/hadoop/hbase/namequeues/TestRpcLogDetails.java</a>
                 </td>
                 <td>
                   0
@@ -4731,7 +4731,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -4750,7 +4750,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationActiveAsyncFSWAL.java">org/apache/hadoop/hbase/replication/TestSyncReplicationActiveAsyncFSWAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.master.TestReplicationLogCleaner.java">org/apache/hadoop/hbase/replication/master/TestReplicationLogCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -4764,7 +4764,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.master.TestReplicationLogCleaner.java">org/apache/hadoop/hbase/replication/master/TestReplicationLogCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationActiveAsyncFSWAL.java">org/apache/hadoop/hbase/replication/TestSyncReplicationActiveAsyncFSWAL.java</a>
                 </td>
                 <td>
                   0
@@ -5366,7 +5366,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALStreamReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALStreamReader.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.RegionRemoteProcedureBase.java">org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.java</a>
                 </td>
                 <td>
                   0
@@ -5380,7 +5380,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.RegionRemoteProcedureBase.java">org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALStreamReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALStreamReader.java</a>
                 </td>
                 <td>
                   0
@@ -5590,7 +5590,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterChoreScheduled.java">org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java</a>
                 </td>
                 <td>
                   0
@@ -5604,7 +5604,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterChoreScheduled.java">org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChore.java</a>
                 </td>
                 <td>
                   0
@@ -5688,7 +5688,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestCustomWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a>
                 </td>
                 <td>
                   0
@@ -5697,12 +5697,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestCustomWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.java</a>
                 </td>
                 <td>
                   0
@@ -5711,7 +5711,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -6150,7 +6150,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.ExceedOperationQuota.java">org/apache/hadoop/hbase/quotas/ExceedOperationQuota.java</a>
                 </td>
                 <td>
                   0
@@ -6164,7 +6164,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.ExceedOperationQuota.java">org/apache/hadoop/hbase/quotas/ExceedOperationQuota.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a>
                 </td>
                 <td>
                   0
@@ -6346,7 +6346,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreRegionReports.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreRegionReports.java</a>
                 </td>
                 <td>
                   0
@@ -6355,12 +6355,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreRegionReports.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreRegionReports.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java</a>
                 </td>
                 <td>
                   0
@@ -6369,7 +6369,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -6850,7 +6850,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.encoding.TestChangingEncoding.java">org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestCloseAnOpeningRegion.java">org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.java</a>
                 </td>
                 <td>
                   0
@@ -6864,7 +6864,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestCloseAnOpeningRegion.java">org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.encoding.TestChangingEncoding.java">org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java</a>
                 </td>
                 <td>
                   0
@@ -7214,7 +7214,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALTailingReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALTailingReader.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.ServerCrashException.java">org/apache/hadoop/hbase/master/procedure/ServerCrashException.java</a>
                 </td>
                 <td>
                   0
@@ -7228,7 +7228,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.ServerCrashException.java">org/apache/hadoop/hbase/master/procedure/ServerCrashException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALTailingReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALTailingReader.java</a>
                 </td>
                 <td>
                   0
@@ -7718,7 +7718,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreCompactorSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.NoSuchProcedureException.java">org/apache/hadoop/hbase/master/NoSuchProcedureException.java</a>
                 </td>
                 <td>
                   0
@@ -7732,7 +7732,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.NoSuchProcedureException.java">org/apache/hadoop/hbase/master/NoSuchProcedureException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreCompactorSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.java</a>
                 </td>
                 <td>
                   0
@@ -7760,7 +7760,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.TestRegionSnapshotTask.java">org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.TestRestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java</a>
                 </td>
                 <td>
                   0
@@ -7774,7 +7774,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.TestRestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.TestRegionSnapshotTask.java">org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.java</a>
                 </td>
                 <td>
                   0
@@ -7816,7 +7816,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.log.HBaseMarkers.java">org/apache/hadoop/hbase/log/HBaseMarkers.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RawCellBuilder.java">org/apache/hadoop/hbase/RawCellBuilder.java</a>
                 </td>
                 <td>
                   0
@@ -7825,12 +7825,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RawCellBuilder.java">org/apache/hadoop/hbase/RawCellBuilder.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.log.HBaseMarkers.java">org/apache/hadoop/hbase/log/HBaseMarkers.java</a>
                 </td>
                 <td>
                   0
@@ -7839,7 +7839,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -8236,7 +8236,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.AbstractTestMutualTls.java">org/apache/hadoop/hbase/security/AbstractTestMutualTls.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncAdminMasterSwitch.java">org/apache/hadoop/hbase/client/TestAsyncAdminMasterSwitch.java</a>
                 </td>
                 <td>
                   0
@@ -8250,7 +8250,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncAdminMasterSwitch.java">org/apache/hadoop/hbase/client/TestAsyncAdminMasterSwitch.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.AbstractTestMutualTls.java">org/apache/hadoop/hbase/security/AbstractTestMutualTls.java</a>
                 </td>
                 <td>
                   0
@@ -9034,7 +9034,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.TestCleanerClearHFiles.java">org/apache/hadoop/hbase/master/cleaner/TestCleanerClearHFiles.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.replication.TestSyncReplicationReplayWALManager.java">org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.java</a>
                 </td>
                 <td>
                   0
@@ -9048,7 +9048,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.replication.TestSyncReplicationReplayWALManager.java">org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.TestCleanerClearHFiles.java">org/apache/hadoop/hbase/master/cleaner/TestCleanerClearHFiles.java</a>
                 </td>
                 <td>
                   0
@@ -9650,7 +9650,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MetricsMasterFileSystem.java">org/apache/hadoop/hbase/master/MetricsMasterFileSystem.java</a>
                 </td>
                 <td>
                   0
@@ -9659,12 +9659,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MetricsMasterFileSystem.java">org/apache/hadoop/hbase/master/MetricsMasterFileSystem.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a>
                 </td>
                 <td>
                   0
@@ -9673,7 +9673,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -9874,7 +9874,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.PeerProcedureHandler.java">org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandler.java</a>
                 </td>
                 <td>
                   0
@@ -9888,7 +9888,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.PeerProcedureHandler.java">org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandler.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a>
                 </td>
                 <td>
                   0
@@ -12436,7 +12436,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestTableSpaceQuotaViolationNotifier.java">org/apache/hadoop/hbase/quotas/TestTableSpaceQuotaViolationNotifier.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.java">org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.java</a>
                 </td>
                 <td>
                   0
@@ -12450,7 +12450,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.java">org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestTableSpaceQuotaViolationNotifier.java">org/apache/hadoop/hbase/quotas/TestTableSpaceQuotaViolationNotifier.java</a>
                 </td>
                 <td>
                   0
@@ -13094,7 +13094,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.java">org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.locking.LockProcedure.java">org/apache/hadoop/hbase/master/locking/LockProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -13103,12 +13103,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.locking.LockProcedure.java">org/apache/hadoop/hbase/master/locking/LockProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.java">org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.java</a>
                 </td>
                 <td>
                   0
@@ -13117,7 +13117,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
@@ -13416,7 +13416,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.TestStoreFileListFilePrinter.java">org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFilePrinter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMaster.java">org/apache/hadoop/hbase/master/TestMaster.java</a>
                 </td>
                 <td>
                   0
@@ -13430,7 +13430,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMaster.java">org/apache/hadoop/hbase/master/TestMaster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.TestStoreFileListFilePrinter.java">org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFilePrinter.java</a>
                 </td>
                 <td>
                   0
@@ -13850,7 +13850,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestSuperUserQuotaPermissions.java">org/apache/hadoop/hbase/quotas/TestSuperUserQuotaPermissions.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestReplicasClient.java">org/apache/hadoop/hbase/client/TestReplicasClient.java</a>
                 </td>
                 <td>
                   0
@@ -13859,12 +13859,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestReplicasClient.java">org/apache/hadoop/hbase/client/TestReplicasClient.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestSuperUserQuotaPermissions.java">org/apache/hadoop/hbase/quotas/TestSuperUserQuotaPermissions.java</a>
                 </td>
                 <td>
                   0
@@ -13873,7 +13873,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -14228,7 +14228,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDefaultVisLabelService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationStandbyKillMaster.java">org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.java</a>
                 </td>
                 <td>
                   0
@@ -14237,12 +14237,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationStandbyKillMaster.java">org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDefaultVisLabelService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java</a>
                 </td>
                 <td>
                   0
@@ -14251,7 +14251,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -14718,7 +14718,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -14732,7 +14732,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.java</a>
                 </td>
                 <td>
                   0
@@ -15166,7 +15166,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.store.region.HFileProcedurePrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/region/HFileProcedurePrettyPrinter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.SplitNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java</a>
                 </td>
                 <td>
                   0
@@ -15180,7 +15180,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.SplitNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.store.region.HFileProcedurePrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/region/HFileProcedurePrettyPrinter.java</a>
                 </td>
                 <td>
                   0
@@ -15656,7 +15656,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.WrongRegionException.java">org/apache/hadoop/hbase/regionserver/WrongRegionException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.AsyncMasterRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncMasterRequestRpcRetryingCaller.java</a>
                 </td>
                 <td>
                   0
@@ -15670,7 +15670,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.AsyncMasterRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncMasterRequestRpcRetryingCaller.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.WrongRegionException.java">org/apache/hadoop/hbase/regionserver/WrongRegionException.java</a>
                 </td>
                 <td>
                   0
@@ -16384,7 +16384,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMetaTableMetrics.java">org/apache/hadoop/hbase/coprocessor/TestMetaTableMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncWALReplayValueCompression.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplayValueCompression.java</a>
                 </td>
                 <td>
                   0
@@ -16398,7 +16398,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncWALReplayValueCompression.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplayValueCompression.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMetaTableMetrics.java">org/apache/hadoop/hbase/coprocessor/TestMetaTableMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -17252,7 +17252,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaUserOverride.java">org/apache/hadoop/hbase/quotas/TestQuotaUserOverride.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestFlushTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestFlushTableProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -17266,7 +17266,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestFlushTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestFlushTableProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaUserOverride.java">org/apache/hadoop/hbase/quotas/TestQuotaUserOverride.java</a>
                 </td>
                 <td>
                   0
@@ -17896,7 +17896,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilter.java">org/apache/hadoop/hbase/filter/TestFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestEditsDroppedWithDroppedTableNS.java">org/apache/hadoop/hbase/replication/TestEditsDroppedWithDroppedTableNS.java</a>
                 </td>
                 <td>
                   0
@@ -17905,12 +17905,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  5
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestEditsDroppedWithDroppedTableNS.java">org/apache/hadoop/hbase/replication/TestEditsDroppedWithDroppedTableNS.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilter.java">org/apache/hadoop/hbase/filter/TestFilter.java</a>
                 </td>
                 <td>
                   0
@@ -17919,7 +17919,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  5
                 </td>
               </tr>
                           <tr>
@@ -17966,7 +17966,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestBitComparator.java">org/apache/hadoop/hbase/filter/TestBitComparator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterNoCluster.java">org/apache/hadoop/hbase/master/TestMasterNoCluster.java</a>
                 </td>
                 <td>
                   0
@@ -17980,7 +17980,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterNoCluster.java">org/apache/hadoop/hbase/master/TestMasterNoCluster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestBitComparator.java">org/apache/hadoop/hbase/filter/TestBitComparator.java</a>
                 </td>
                 <td>
                   0
@@ -18050,7 +18050,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.AllFailConstraint.java">org/apache/hadoop/hbase/constraint/AllFailConstraint.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.AbstractTestFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java</a>
                 </td>
                 <td>
                   0
@@ -18064,7 +18064,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.AbstractTestFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.AllFailConstraint.java">org/apache/hadoop/hbase/constraint/AllFailConstraint.java</a>
                 </td>
                 <td>
                   0
@@ -19548,7 +19548,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestFSHLog.java">org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestBufferedMutator.java">org/apache/hadoop/hbase/client/TestBufferedMutator.java</a>
                 </td>
                 <td>
                   0
@@ -19562,7 +19562,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestBufferedMutator.java">org/apache/hadoop/hbase/client/TestBufferedMutator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestFSHLog.java">org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java</a>
                 </td>
                 <td>
                   0
@@ -19996,7 +19996,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.CanaryStatusServlet.java">org/apache/hadoop/hbase/tool/CanaryStatusServlet.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.slowlog.SlowLogMasterService.java">org/apache/hadoop/hbase/master/slowlog/SlowLogMasterService.java</a>
                 </td>
                 <td>
                   0
@@ -20010,7 +20010,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.slowlog.SlowLogMasterService.java">org/apache/hadoop/hbase/master/slowlog/SlowLogMasterService.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.CanaryStatusServlet.java">org/apache/hadoop/hbase/tool/CanaryStatusServlet.java</a>
                 </td>
                 <td>
                   0
@@ -20094,7 +20094,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestReadAndWriteRegionInfoFile.java">org/apache/hadoop/hbase/regionserver/TestReadAndWriteRegionInfoFile.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.AbstractTestCITimeout.java">org/apache/hadoop/hbase/client/AbstractTestCITimeout.java</a>
                 </td>
                 <td>
                   0
@@ -20108,7 +20108,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.AbstractTestCITimeout.java">org/apache/hadoop/hbase/client/AbstractTestCITimeout.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestReadAndWriteRegionInfoFile.java">org/apache/hadoop/hbase/regionserver/TestReadAndWriteRegionInfoFile.java</a>
                 </td>
                 <td>
                   0
@@ -20612,7 +20612,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionIncrement.java">org/apache/hadoop/hbase/regionserver/TestRegionIncrement.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestSourceFSConfigurationProvider.java">org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.java</a>
                 </td>
                 <td>
                   0
@@ -20621,12 +20621,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  5
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestSourceFSConfigurationProvider.java">org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionIncrement.java">org/apache/hadoop/hbase/regionserver/TestRegionIncrement.java</a>
                 </td>
                 <td>
                   0
@@ -20635,7 +20635,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  5
                 </td>
               </tr>
                           <tr>
@@ -21550,7 +21550,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestEncryptionKeyRotation.java">org/apache/hadoop/hbase/regionserver/TestEncryptionKeyRotation.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a>
                 </td>
                 <td>
                   0
@@ -21559,12 +21559,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestEncryptionKeyRotation.java">org/apache/hadoop/hbase/regionserver/TestEncryptionKeyRotation.java</a>
                 </td>
                 <td>
                   0
@@ -21573,7 +21573,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -22082,7 +22082,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TableNotEnabledException.java">org/apache/hadoop/hbase/TableNotEnabledException.java</a>
                 </td>
                 <td>
                   0
@@ -22096,7 +22096,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TableNotEnabledException.java">org/apache/hadoop/hbase/TableNotEnabledException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a>
                 </td>
                 <td>
                   0
@@ -22222,7 +22222,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.HFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -22236,7 +22236,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.HFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.java</a>
                 </td>
                 <td>
                   0
@@ -23356,7 +23356,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestNodeHealthCheckChore.java">org/apache/hadoop/hbase/TestNodeHealthCheckChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestEnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -23365,12 +23365,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestEnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestNodeHealthCheckChore.java">org/apache/hadoop/hbase/TestNodeHealthCheckChore.java</a>
                 </td>
                 <td>
                   0
@@ -23379,7 +23379,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -24126,7 +24126,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a>
                 </td>
                 <td>
                   0
@@ -24140,7 +24140,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.CompactionContext.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a>
                 </td>
                 <td>
                   0
@@ -24149,12 +24149,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  3
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a>
                 </td>
                 <td>
                   0
@@ -24163,12 +24163,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.CompactionContext.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.java</a>
                 </td>
                 <td>
                   0
@@ -24546,7 +24546,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionsRecoveryChore.java">org/apache/hadoop/hbase/master/RegionsRecoveryChore.java</a>
                 </td>
                 <td>
                   0
@@ -24560,7 +24560,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionsRecoveryChore.java">org/apache/hadoop/hbase/master/RegionsRecoveryChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a>
                 </td>
                 <td>
                   0
@@ -25400,7 +25400,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.CompressedWALTestBase.java">org/apache/hadoop/hbase/wal/CompressedWALTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim.java">org/apache/hadoop/hbase/mapreduce/MapreduceTestingShim.java</a>
                 </td>
                 <td>
                   0
@@ -25409,12 +25409,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim.java">org/apache/hadoop/hbase/mapreduce/MapreduceTestingShim.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.CompressedWALTestBase.java">org/apache/hadoop/hbase/wal/CompressedWALTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -25423,7 +25423,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -25960,7 +25960,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.WALEventTrackerPayload.java">org/apache/hadoop/hbase/namequeues/WALEventTrackerPayload.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.FileArchiverNotifierFactoryImpl.java">org/apache/hadoop/hbase/quotas/FileArchiverNotifierFactoryImpl.java</a>
                 </td>
                 <td>
                   0
@@ -25974,7 +25974,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.FileArchiverNotifierFactoryImpl.java">org/apache/hadoop/hbase/quotas/FileArchiverNotifierFactoryImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.WALEventTrackerPayload.java">org/apache/hadoop/hbase/namequeues/WALEventTrackerPayload.java</a>
                 </td>
                 <td>
                   0
@@ -26016,7 +26016,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionCoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestReplicationWithWALExtendedAttributes.java">org/apache/hadoop/hbase/replication/TestReplicationWithWALExtendedAttributes.java</a>
                 </td>
                 <td>
                   0
@@ -26030,7 +26030,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestReplicationWithWALExtendedAttributes.java">org/apache/hadoop/hbase/replication/TestReplicationWithWALExtendedAttributes.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionCoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java</a>
                 </td>
                 <td>
                   0
@@ -26786,7 +26786,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestHMasterCommandLine.java">org/apache/hadoop/hbase/master/TestHMasterCommandLine.java</a>
                 </td>
                 <td>
                   0
@@ -26800,7 +26800,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestHMasterCommandLine.java">org/apache/hadoop/hbase/master/TestHMasterCommandLine.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.java</a>
                 </td>
                 <td>
                   0
@@ -27388,7 +27388,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionMove.java">org/apache/hadoop/hbase/regionserver/TestRegionMove.java</a>
                 </td>
                 <td>
                   0
@@ -27402,7 +27402,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionMove.java">org/apache/hadoop/hbase/regionserver/TestRegionMove.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</a>
                 </td>
                 <td>
                   0
@@ -28004,7 +28004,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.DrainingServerTracker.java">org/apache/hadoop/hbase/master/DrainingServerTracker.java</a>
                 </td>
                 <td>
                   0
@@ -28013,12 +28013,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.DrainingServerTracker.java">org/apache/hadoop/hbase/master/DrainingServerTracker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a>
                 </td>
                 <td>
                   0
@@ -28027,7 +28027,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  3
                 </td>
               </tr>
                           <tr>
@@ -28116,7 +28116,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.ReaderContext.java">org/apache/hadoop/hbase/io/hfile/ReaderContext.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</a>
                 </td>
                 <td>
                   0
@@ -28130,7 +28130,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.ReaderContext.java">org/apache/hadoop/hbase/io/hfile/ReaderContext.java</a>
                 </td>
                 <td>
                   0
@@ -28564,7 +28564,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMasterCoprocessorExceptionWithRemove.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.multiwal.TestReplicationKillMasterRSCompressedWithMultipleWAL.java">org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.java</a>
                 </td>
                 <td>
                   0
@@ -28578,7 +28578,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.multiwal.TestReplicationKillMasterRSCompressedWithMultipleWAL.java">org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMasterCoprocessorExceptionWithRemove.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.java</a>
                 </td>
                 <td>
                   0
@@ -30524,7 +30524,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.RejectRequestsFromClientStateChecker.java">org/apache/hadoop/hbase/replication/regionserver/RejectRequestsFromClientStateChecker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CloseExcessRegionReplicasProcedure.java">org/apache/hadoop/hbase/master/procedure/CloseExcessRegionReplicasProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -30538,7 +30538,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CloseExcessRegionReplicasProcedure.java">org/apache/hadoop/hbase/master/procedure/CloseExcessRegionReplicasProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.RejectRequestsFromClientStateChecker.java">org/apache/hadoop/hbase/replication/regionserver/RejectRequestsFromClientStateChecker.java</a>
                 </td>
                 <td>
                   0
@@ -30650,7 +30650,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.TestHeapSize.java">org/apache/hadoop/hbase/io/TestHeapSize.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.snapshot.TestSnapshotCleanupStateStore.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotCleanupStateStore.java</a>
                 </td>
                 <td>
                   0
@@ -30659,12 +30659,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.snapshot.TestSnapshotCleanupStateStore.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotCleanupStateStore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.TestHeapSize.java">org/apache/hadoop/hbase/io/TestHeapSize.java</a>
                 </td>
                 <td>
                   0
@@ -30673,7 +30673,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
@@ -30874,7 +30874,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncFSWALDurability.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWALDurability.java</a>
                 </td>
                 <td>
                   0
@@ -30883,12 +30883,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncFSWALDurability.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWALDurability.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</a>
                 </td>
                 <td>
                   0
@@ -30897,7 +30897,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  6
                 </td>
               </tr>
                           <tr>
@@ -32414,7 +32414,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestSingleColumnValueExcludeFilter.java">org/apache/hadoop/hbase/filter/TestSingleColumnValueExcludeFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestFixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java</a>
                 </td>
                 <td>
                   0
@@ -32423,12 +32423,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestFixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestSingleColumnValueExcludeFilter.java">org/apache/hadoop/hbase/filter/TestSingleColumnValueExcludeFilter.java</a>
                 </td>
                 <td>
                   0
@@ -32437,12 +32437,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.TestSecureBulkLoadHFiles.java">org/apache/hadoop/hbase/tool/TestSecureBulkLoadHFiles.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.DummyAsyncClusterConnection.java">org/apache/hadoop/hbase/client/DummyAsyncClusterConnection.java</a>
                 </td>
                 <td>
                   0
@@ -32456,7 +32456,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.DummyAsyncClusterConnection.java">org/apache/hadoop/hbase/client/DummyAsyncClusterConnection.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTableProcedureWaitingQueueCleanup.java">org/apache/hadoop/hbase/master/procedure/TestTableProcedureWaitingQueueCleanup.java</a>
                 </td>
                 <td>
                   0
@@ -32470,7 +32470,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTableProcedureWaitingQueueCleanup.java">org/apache/hadoop/hbase/master/procedure/TestTableProcedureWaitingQueueCleanup.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.TestSecureBulkLoadHFiles.java">org/apache/hadoop/hbase/tool/TestSecureBulkLoadHFiles.java</a>
                 </td>
                 <td>
                   0
@@ -32568,7 +32568,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.InvalidMutationDurabilityException.java">org/apache/hadoop/hbase/regionserver/InvalidMutationDurabilityException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.RowMutations.java">org/apache/hadoop/hbase/client/RowMutations.java</a>
                 </td>
                 <td>
                   0
@@ -32582,7 +32582,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.RowMutations.java">org/apache/hadoop/hbase/client/RowMutations.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.InvalidMutationDurabilityException.java">org/apache/hadoop/hbase/regionserver/InvalidMutationDurabilityException.java</a>
                 </td>
                 <td>
                   0
@@ -33856,7 +33856,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestNettyIPCCloseConnection.java">org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRestartWithEmptyWALDirectory.java">org/apache/hadoop/hbase/master/TestRestartWithEmptyWALDirectory.java</a>
                 </td>
                 <td>
                   0
@@ -33870,7 +33870,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRestartWithEmptyWALDirectory.java">org/apache/hadoop/hbase/master/TestRestartWithEmptyWALDirectory.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestNettyIPCCloseConnection.java">org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.java</a>
                 </td>
                 <td>
                   0
@@ -33884,7 +33884,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionInfo.java">org/apache/hadoop/hbase/regionserver/TestRegionInfo.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.snapshot.TestSnapshotStats.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotStats.java</a>
                 </td>
                 <td>
                   0
@@ -33898,7 +33898,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.snapshot.TestSnapshotStats.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotStats.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionInfo.java">org/apache/hadoop/hbase/regionserver/TestRegionInfo.java</a>
                 </td>
                 <td>
                   0
@@ -33996,7 +33996,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.java</a>
                 </td>
                 <td>
                   0
@@ -34005,12 +34005,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</a>
                 </td>
                 <td>
                   0
@@ -34019,7 +34019,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  2
                 </td>
               </tr>
                           <tr>
@@ -34318,7 +34318,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.rsgroup.TestMigrateRSGroupInfo.java">org/apache/hadoop/hbase/rsgroup/TestMigrateRSGroupInfo.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestClockSkewDetection.java">org/apache/hadoop/hbase/master/TestClockSkewDetection.java</a>
                 </td>
                 <td>
                   0
@@ -34332,7 +34332,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestClockSkewDetection.java">org/apache/hadoop/hbase/master/TestClockSkewDetection.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.rsgroup.TestMigrateRSGroupInfo.java">org/apache/hadoop/hbase/rsgroup/TestMigrateRSGroupInfo.java</a>
                 </td>
                 <td>
                   0
@@ -34360,7 +34360,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestClientMetaServiceRPCs.java">org/apache/hadoop/hbase/master/TestClientMetaServiceRPCs.java</a>
                 </td>
                 <td>
                   0
@@ -34369,12 +34369,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestClientMetaServiceRPCs.java">org/apache/hadoop/hbase/master/TestClientMetaServiceRPCs.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.java</a>
                 </td>
                 <td>
                   0
@@ -34383,7 +34383,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
@@ -35620,7 +35620,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.BalancedQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -35634,7 +35634,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.BalancedQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java</a>
                 </td>
                 <td>
                   0
@@ -36166,7 +36166,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.bucket.TestFileIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestFromClientSideWithCoprocessor.java">org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.java</a>
                 </td>
                 <td>
                   0
@@ -36180,7 +36180,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestFromClientSideWithCoprocessor.java">org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.bucket.TestFileIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.java</a>
                 </td>
                 <td>
                   0
@@ -36880,7 +36880,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestPerColumnFamilyFlush.java">org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestNamespaceReplication.java">org/apache/hadoop/hbase/replication/TestNamespaceReplication.java</a>
                 </td>
                 <td>
                   0
@@ -36894,7 +36894,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestNamespaceReplication.java">org/apache/hadoop/hbase/replication/TestNamespaceReplication.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestPerColumnFamilyFlush.java">org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.java</a>
                 </td>
                 <td>
                   0
@@ -36950,7 +36950,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestMetricsUserAggregate.java">org/apache/hadoop/hbase/regionserver/TestMetricsUserAggregate.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.RSGroupableBalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -36964,7 +36964,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.RSGroupableBalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestMetricsUserAggregate.java">org/apache/hadoop/hbase/regionserver/TestMetricsUserAggregate.java</a>
                 </td>
                 <td>
                   0
@@ -36978,7 +36978,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionObserverBypass.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSeparateClientZKCluster.java">org/apache/hadoop/hbase/client/TestSeparateClientZKCluster.java</a>
                 </td>
                 <td>
                   0
@@ -36992,7 +36992,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSeparateClientZKCluster.java">org/apache/hadoop/hbase/client/TestSeparateClientZKCluster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionObserverBypass.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.java</a>
                 </td>
                 <td>
                   0
@@ -38070,7 +38070,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSizing.java">org/apache/hadoop/hbase/regionserver/MemStoreSizing.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a>
                 </td>
                 <td>
                   0
@@ -38084,7 +38084,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSizing.java">org/apache/hadoop/hbase/regionserver/MemStoreSizing.java</a>
                 </td>
                 <td>
                   0
@@ -38630,7 +38630,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/TestMultipleColumnPrefixFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.TestHBaseFsckEncryption.java">org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.java</a>
                 </td>
                 <td>
                   0
@@ -38639,12 +38639,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  8
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.TestHBaseFsckEncryption.java">org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/TestMultipleColumnPrefixFilter.java</a>
                 </td>
                 <td>
                   0
@@ -38653,7 +38653,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  8
                 </td>
               </tr>
                           <tr>
@@ -38714,7 +38714,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestLogRollPeriod.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRollPeriod.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSnapshotMetadata.java">org/apache/hadoop/hbase/client/TestSnapshotMetadata.java</a>
                 </td>
                 <td>
                   0
@@ -38728,7 +38728,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSnapshotMetadata.java">org/apache/hadoop/hbase/client/TestSnapshotMetadata.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestLogRollPeriod.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRollPeriod.java</a>
                 </td>
                 <td>
                   0
@@ -38798,7 +38798,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncClientPauseForRpcThrottling.java">org/apache/hadoop/hbase/client/TestAsyncClientPauseForRpcThrottling.java</a>
                 </td>
                 <td>
                   0
@@ -38812,7 +38812,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncClientPauseForRpcThrottling.java">org/apache/hadoop/hbase/client/TestAsyncClientPauseForRpcThrottling.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java</a>
                 </td>
                 <td>
                   0
@@ -39274,7 +39274,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestReplicationWALEdits.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationWALEdits.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.TestSimpleRegionNormalizerOnCluster.java">org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java</a>
                 </td>
                 <td>
                   0
@@ -39288,7 +39288,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.TestSimpleRegionNormalizerOnCluster.java">org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestReplicationWALEdits.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationWALEdits.java</a>
                 </td>
                 <td>
                   0
@@ -39302,7 +39302,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALEditInternalHelper.java">org/apache/hadoop/hbase/wal/WALEditInternalHelper.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a>
                 </td>
                 <td>
                   0
@@ -39316,7 +39316,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALEditInternalHelper.java">org/apache/hadoop/hbase/wal/WALEditInternalHelper.java</a>
                 </td>
                 <td>
                   0
@@ -39988,7 +39988,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.TestMetricsIO.java">org/apache/hadoop/hbase/io/TestMetricsIO.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.FromClientSideBase.java">org/apache/hadoop/hbase/client/FromClientSideBase.java</a>
                 </td>
                 <td>
                   0
@@ -40002,7 +40002,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.FromClientSideBase.java">org/apache/hadoop/hbase/client/FromClientSideBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.TestMetricsIO.java">org/apache/hadoop/hbase/io/TestMetricsIO.java</a>
                 </td>
                 <td>
                   0
@@ -40282,7 +40282,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StoreFile.java">org/apache/hadoop/hbase/regionserver/StoreFile.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.region.UpdateMasterRegion.java">org/apache/hadoop/hbase/master/region/UpdateMasterRegion.java</a>
                 </td>
                 <td>
                   0
@@ -40296,7 +40296,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.region.UpdateMasterRegion.java">org/apache/hadoop/hbase/master/region/UpdateMasterRegion.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StoreFile.java">org/apache/hadoop/hbase/regionserver/StoreFile.java</a>
                 </td>
                 <td>
                   0
@@ -40968,7 +40968,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALCorruptionDueToDanglingByteBufferTestBase.java">org/apache/hadoop/hbase/wal/WALCorruptionDueToDanglingByteBufferTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestMasterQuotasObserverWithMocks.java">org/apache/hadoop/hbase/quotas/TestMasterQuotasObserverWithMocks.java</a>
                 </td>
                 <td>
                   0
@@ -40982,7 +40982,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestMasterQuotasObserverWithMocks.java">org/apache/hadoop/hbase/quotas/TestMasterQuotasObserverWithMocks.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALCorruptionDueToDanglingByteBufferTestBase.java">org/apache/hadoop/hbase/wal/WALCorruptionDueToDanglingByteBufferTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -41416,7 +41416,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestScanRowPrefix.java">org/apache/hadoop/hbase/filter/TestScanRowPrefix.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestProcedureWaitAndWake.java">org/apache/hadoop/hbase/master/procedure/TestProcedureWaitAndWake.java</a>
                 </td>
                 <td>
                   0
@@ -41430,7 +41430,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestProcedureWaitAndWake.java">org/apache/hadoop/hbase/master/procedure/TestProcedureWaitAndWake.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestScanRowPrefix.java">org/apache/hadoop/hbase/filter/TestScanRowPrefix.java</a>
                 </td>
                 <td>
                   0
@@ -41584,7 +41584,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDefaultCompactSelection.java">org/apache/hadoop/hbase/regionserver/TestDefaultCompactSelection.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestAtomicReadQuota.java">org/apache/hadoop/hbase/quotas/TestAtomicReadQuota.java</a>
                 </td>
                 <td>
                   0
@@ -41598,7 +41598,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestAtomicReadQuota.java">org/apache/hadoop/hbase/quotas/TestAtomicReadQuota.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDefaultCompactSelection.java">org/apache/hadoop/hbase/regionserver/TestDefaultCompactSelection.java</a>
                 </td>
                 <td>
                   0
@@ -42018,7 +42018,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionServerCoprocessorExceptionWithAbort.java">org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithAbort.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</a>
                 </td>
                 <td>
                   0
@@ -42027,12 +42027,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionServerCoprocessorExceptionWithAbort.java">org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithAbort.java</a>
                 </td>
                 <td>
                   0
@@ -42041,7 +42041,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -42158,7 +42158,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a>
                 </td>
                 <td>
                   0
@@ -42172,7 +42172,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a>
                 </td>
                 <td>
                   0
@@ -42578,7 +42578,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RegionReplicationLagEvaluation.java">org/apache/hadoop/hbase/RegionReplicationLagEvaluation.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestRaceWhenCreatingReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.java</a>
                 </td>
                 <td>
                   0
@@ -42592,7 +42592,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestRaceWhenCreatingReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/TestRaceWhenCreatingReplicationSource.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RegionReplicationLagEvaluation.java">org/apache/hadoop/hbase/RegionReplicationLagEvaluation.java</a>
                 </td>
                 <td>
                   0
@@ -43040,7 +43040,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a>
                 </td>
                 <td>
                   0
@@ -43054,7 +43054,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a>
                 </td>
                 <td>
                   0
@@ -44090,7 +44090,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.WriterOverAsyncWriter.java">org/apache/hadoop/hbase/regionserver/wal/WriterOverAsyncWriter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a>
                 </td>
                 <td>
                   0
@@ -44104,7 +44104,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.WriterOverAsyncWriter.java">org/apache/hadoop/hbase/regionserver/wal/WriterOverAsyncWriter.java</a>
                 </td>
                 <td>
                   0
@@ -44370,7 +44370,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.TestUsersOperationsWithSecureHadoop.java">org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTruncateRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/TestTruncateRegionProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -44384,7 +44384,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTruncateRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/TestTruncateRegionProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.TestUsersOperationsWithSecureHadoop.java">org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.java</a>
                 </td>
                 <td>
                   0
@@ -44552,7 +44552,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.HasMasterServices.java">org/apache/hadoop/hbase/coprocessor/HasMasterServices.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.ReplicationBarrierFamilyFormat.java">org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.java</a>
                 </td>
                 <td>
                   0
@@ -44566,7 +44566,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.ReplicationBarrierFamilyFormat.java">org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.HasMasterServices.java">org/apache/hadoop/hbase/coprocessor/HasMasterServices.java</a>
                 </td>
                 <td>
                   0
@@ -45014,7 +45014,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestCoprocessorWhitelistMasterObserver.java">org/apache/hadoop/hbase/security/access/TestCoprocessorWhitelistMasterObserver.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestScanWithoutFetchingData.java">org/apache/hadoop/hbase/client/TestScanWithoutFetchingData.java</a>
                 </td>
                 <td>
                   0
@@ -45028,7 +45028,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestScanWithoutFetchingData.java">org/apache/hadoop/hbase/client/TestScanWithoutFetchingData.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestCoprocessorWhitelistMasterObserver.java">org/apache/hadoop/hbase/security/access/TestCoprocessorWhitelistMasterObserver.java</a>
                 </td>
                 <td>
                   0
@@ -45126,7 +45126,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TableProcedureWaitingQueue.java">org/apache/hadoop/hbase/master/procedure/TableProcedureWaitingQueue.java</a>
                 </td>
                 <td>
                   0
@@ -45140,7 +45140,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TableProcedureWaitingQueue.java">org/apache/hadoop/hbase/master/procedure/TableProcedureWaitingQueue.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a>
                 </td>
                 <td>
                   0
@@ -45378,7 +45378,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.ServerStateNode.java">org/apache/hadoop/hbase/master/assignment/ServerStateNode.java</a>
                 </td>
                 <td>
                   0
@@ -45392,7 +45392,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.ServerStateNode.java">org/apache/hadoop/hbase/master/assignment/ServerStateNode.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a>
                 </td>
                 <td>
                   0
@@ -45630,7 +45630,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestHFileWriterV3.java">org/apache/hadoop/hbase/io/hfile/TestHFileWriterV3.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.RestoreSnapshotFromClientGetCompactionStateTestBase.java">org/apache/hadoop/hbase/client/RestoreSnapshotFromClientGetCompactionStateTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -45639,12 +45639,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.RestoreSnapshotFromClientGetCompactionStateTestBase.java">org/apache/hadoop/hbase/client/RestoreSnapshotFromClientGetCompactionStateTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestHFileWriterV3.java">org/apache/hadoop/hbase/io/hfile/TestHFileWriterV3.java</a>
                 </td>
                 <td>
                   0
@@ -45653,7 +45653,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -46638,7 +46638,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestCacheOnWrite.java">org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMobRestoreSnapshotFromClientGetCompactionState.java">org/apache/hadoop/hbase/client/TestMobRestoreSnapshotFromClientGetCompactionState.java</a>
                 </td>
                 <td>
                   0
@@ -46652,7 +46652,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMobRestoreSnapshotFromClientGetCompactionState.java">org/apache/hadoop/hbase/client/TestMobRestoreSnapshotFromClientGetCompactionState.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestCacheOnWrite.java">org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.java</a>
                 </td>
                 <td>
                   0
@@ -47352,7 +47352,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.CompressionContext.java">org/apache/hadoop/hbase/regionserver/wal/CompressionContext.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.RegionServerProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.java</a>
                 </td>
                 <td>
                   0
@@ -47361,12 +47361,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.RegionServerProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.CompressionContext.java">org/apache/hadoop/hbase/regionserver/wal/CompressionContext.java</a>
                 </td>
                 <td>
                   0
@@ -47375,7 +47375,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -48514,7 +48514,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</a>
                 </td>
                 <td>
                   0
@@ -48528,7 +48528,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</a>
                 </td>
                 <td>
                   0
@@ -48682,7 +48682,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestOffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/TestOffPeakHours.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMetaAssignmentWithStopMaster.java">org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.java</a>
                 </td>
                 <td>
                   0
@@ -48696,7 +48696,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMetaAssignmentWithStopMaster.java">org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestOffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/TestOffPeakHours.java</a>
                 </td>
                 <td>
                   0
@@ -50754,7 +50754,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.Compressor.java">org/apache/hadoop/hbase/regionserver/wal/Compressor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.RejectReplicationRequestStateChecker.java">org/apache/hadoop/hbase/replication/regionserver/RejectReplicationRequestStateChecker.java</a>
                 </td>
                 <td>
                   0
@@ -50763,12 +50763,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.RejectReplicationRequestStateChecker.java">org/apache/hadoop/hbase/replication/regionserver/RejectReplicationRequestStateChecker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.Compressor.java">org/apache/hadoop/hbase/regionserver/wal/Compressor.java</a>
                 </td>
                 <td>
                   0
@@ -50777,7 +50777,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
@@ -51132,7 +51132,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.TestConstraint.java">org/apache/hadoop/hbase/constraint/TestConstraint.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MockHStoreFile.java">org/apache/hadoop/hbase/regionserver/MockHStoreFile.java</a>
                 </td>
                 <td>
                   0
@@ -51146,7 +51146,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MockHStoreFile.java">org/apache/hadoop/hbase/regionserver/MockHStoreFile.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.TestConstraint.java">org/apache/hadoop/hbase/constraint/TestConstraint.java</a>
                 </td>
                 <td>
                   0
@@ -51440,7 +51440,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestSeekTo.java">org/apache/hadoop/hbase/io/hfile/TestSeekTo.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncAccessControlAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncAccessControlAdminApi.java</a>
                 </td>
                 <td>
                   0
@@ -51454,7 +51454,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestFSWALEntry.java">org/apache/hadoop/hbase/regionserver/wal/TestFSWALEntry.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestSeekTo.java">org/apache/hadoop/hbase/io/hfile/TestSeekTo.java</a>
                 </td>
                 <td>
                   0
@@ -51468,7 +51468,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncAccessControlAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncAccessControlAdminApi.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestFSWALEntry.java">org/apache/hadoop/hbase/regionserver/wal/TestFSWALEntry.java</a>
                 </td>
                 <td>
                   0
@@ -52616,7 +52616,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRegionPlacement.java">org/apache/hadoop/hbase/master/TestRegionPlacement.java</a>
                 </td>
                 <td>
                   0
@@ -52625,12 +52625,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRegionPlacement.java">org/apache/hadoop/hbase/master/TestRegionPlacement.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</a>
                 </td>
                 <td>
                   0
@@ -52639,7 +52639,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -53974,7 +53974,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCompactionWithByteBuff.java">org/apache/hadoop/hbase/regionserver/TestCompactionWithByteBuff.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.RestoreSnapshotFromClientSchemaChangeTestBase.java">org/apache/hadoop/hbase/client/RestoreSnapshotFromClientSchemaChangeTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -53988,7 +53988,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.RestoreSnapshotFromClientSchemaChangeTestBase.java">org/apache/hadoop/hbase/client/RestoreSnapshotFromClientSchemaChangeTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCompactionWithByteBuff.java">org/apache/hadoop/hbase/regionserver/TestCompactionWithByteBuff.java</a>
                 </td>
                 <td>
                   0
@@ -54128,7 +54128,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ClusterSchemaService.java">org/apache/hadoop/hbase/master/ClusterSchemaService.java</a>
                 </td>
                 <td>
                   0
@@ -54137,12 +54137,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ClusterSchemaService.java">org/apache/hadoop/hbase/master/ClusterSchemaService.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</a>
                 </td>
                 <td>
                   0
@@ -54151,7 +54151,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
@@ -55304,7 +55304,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestCallRunner.java">org/apache/hadoop/hbase/ipc/TestCallRunner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.CloneSnapshotFromClientNormalTestBase.java">org/apache/hadoop/hbase/client/CloneSnapshotFromClientNormalTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -55318,7 +55318,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.CloneSnapshotFromClientNormalTestBase.java">org/apache/hadoop/hbase/client/CloneSnapshotFromClientNormalTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestCallRunner.java">org/apache/hadoop/hbase/ipc/TestCallRunner.java</a>
                 </td>
                 <td>
                   0
@@ -55374,7 +55374,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</a>
                 </td>
                 <td>
                   0
@@ -55383,12 +55383,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  6
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a>
                 </td>
                 <td>
                   0
@@ -55397,12 +55397,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestGetProcedureResult.java">org/apache/hadoop/hbase/client/TestGetProcedureResult.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestBootstrapNodeUpdate.java">org/apache/hadoop/hbase/client/TestBootstrapNodeUpdate.java</a>
                 </td>
                 <td>
                   0
@@ -55416,7 +55416,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestBootstrapNodeUpdate.java">org/apache/hadoop/hbase/client/TestBootstrapNodeUpdate.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestGetProcedureResult.java">org/apache/hadoop/hbase/client/TestGetProcedureResult.java</a>
                 </td>
                 <td>
                   0
@@ -56116,7 +56116,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.rsgroup.TestEnableRSGroupsCompatibility.java">org/apache/hadoop/hbase/rsgroup/TestEnableRSGroupsCompatibility.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestLruCachedBlock.java">org/apache/hadoop/hbase/io/hfile/TestLruCachedBlock.java</a>
                 </td>
                 <td>
                   0
@@ -56130,7 +56130,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestLruCachedBlock.java">org/apache/hadoop/hbase/io/hfile/TestLruCachedBlock.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.rsgroup.TestEnableRSGroupsCompatibility.java">org/apache/hadoop/hbase/rsgroup/TestEnableRSGroupsCompatibility.java</a>
                 </td>
                 <td>
                   0
@@ -57180,7 +57180,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionReplicas.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicas.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScanner.java">org/apache/hadoop/hbase/regionserver/TestScanner.java</a>
                 </td>
                 <td>
                   0
@@ -57194,7 +57194,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScanner.java">org/apache/hadoop/hbase/regionserver/TestScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionReplicas.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicas.java</a>
                 </td>
                 <td>
                   0
@@ -57306,7 +57306,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestColumnRangeFilter.java">org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationStandbyFSHLog.java">org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyFSHLog.java</a>
                 </td>
                 <td>
                   0
@@ -57315,12 +57315,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationStandbyFSHLog.java">org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyFSHLog.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestColumnRangeFilter.java">org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java</a>
                 </td>
                 <td>
                   0
@@ -57329,7 +57329,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -57404,7 +57404,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestSecurityRpcSentBytesMetrics.java">org/apache/hadoop/hbase/ipc/TestSecurityRpcSentBytesMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StatefulStoreMockMaker.java">org/apache/hadoop/hbase/regionserver/StatefulStoreMockMaker.java</a>
                 </td>
                 <td>
                   0
@@ -57418,7 +57418,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StatefulStoreMockMaker.java">org/apache/hadoop/hbase/regionserver/StatefulStoreMockMaker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestSecurityRpcSentBytesMetrics.java">org/apache/hadoop/hbase/ipc/TestSecurityRpcSentBytesMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -58286,7 +58286,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -58300,7 +58300,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -58328,7 +58328,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestSyncFuture.java">org/apache/hadoop/hbase/regionserver/wal/TestSyncFuture.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.DummyAsyncTable.java">org/apache/hadoop/hbase/client/DummyAsyncTable.java</a>
                 </td>
                 <td>
                   0
@@ -58342,7 +58342,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.DummyAsyncTable.java">org/apache/hadoop/hbase/client/DummyAsyncTable.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestSyncFuture.java">org/apache/hadoop/hbase/regionserver/wal/TestSyncFuture.java</a>
                 </td>
                 <td>
                   0
@@ -58748,7 +58748,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.rsgroup.RSGroupInfoManagerImpl.java">org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.gson.GsonFactory.java">org/apache/hadoop/hbase/master/http/gson/GsonFactory.java</a>
                 </td>
                 <td>
                   0
@@ -58762,7 +58762,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.gson.GsonFactory.java">org/apache/hadoop/hbase/master/http/gson/GsonFactory.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.rsgroup.RSGroupInfoManagerImpl.java">org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java</a>
                 </td>
                 <td>
                   0
@@ -58846,7 +58846,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.PerfTestCompactionPolicies.java">org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestWarmupRegion.java">org/apache/hadoop/hbase/master/TestWarmupRegion.java</a>
                 </td>
                 <td>
                   0
@@ -58855,12 +58855,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestWarmupRegion.java">org/apache/hadoop/hbase/master/TestWarmupRegion.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.PerfTestCompactionPolicies.java">org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java</a>
                 </td>
                 <td>
                   0
@@ -58869,7 +58869,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
@@ -60036,7 +60036,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.querymatcher.TestExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestExplicitColumnTracker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestTableScanMetrics.java">org/apache/hadoop/hbase/client/TestTableScanMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -60050,7 +60050,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestTableScanMetrics.java">org/apache/hadoop/hbase/client/TestTableScanMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.querymatcher.TestExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestExplicitColumnTracker.java</a>
                 </td>
                 <td>
                   0
@@ -60834,7 +60834,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.SplitWALCallable.java">org/apache/hadoop/hbase/regionserver/SplitWALCallable.java</a>
                 </td>
                 <td>
                   0
@@ -60848,7 +60848,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.SplitWALCallable.java">org/apache/hadoop/hbase/regionserver/SplitWALCallable.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a>
                 </td>
                 <td>
                   0
@@ -60932,7 +60932,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.SaslChallengeDecoder.java">org/apache/hadoop/hbase/security/SaslChallengeDecoder.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.SnapshotCreationException.java">org/apache/hadoop/hbase/snapshot/SnapshotCreationException.java</a>
                 </td>
                 <td>
                   0
@@ -60946,7 +60946,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.SnapshotCreationException.java">org/apache/hadoop/hbase/snapshot/SnapshotCreationException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.SaslChallengeDecoder.java">org/apache/hadoop/hbase/security/SaslChallengeDecoder.java</a>
                 </td>
                 <td>
                   0
@@ -61744,7 +61744,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSplitWithBlockingFiles.java">org/apache/hadoop/hbase/regionserver/TestSplitWithBlockingFiles.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestSplitOrMergeStateStore.java">org/apache/hadoop/hbase/master/TestSplitOrMergeStateStore.java</a>
                 </td>
                 <td>
                   0
@@ -61758,7 +61758,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestSplitOrMergeStateStore.java">org/apache/hadoop/hbase/master/TestSplitOrMergeStateStore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSplitWithBlockingFiles.java">org/apache/hadoop/hbase/regionserver/TestSplitWithBlockingFiles.java</a>
                 </td>
                 <td>
                   0
@@ -61940,7 +61940,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.region.TestMasterRegionWALRecovery.java">org/apache/hadoop/hbase/master/region/TestMasterRegionWALRecovery.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestAssignmentManagerLoadMetaRegionState.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerLoadMetaRegionState.java</a>
                 </td>
                 <td>
                   0
@@ -61954,7 +61954,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestAssignmentManagerLoadMetaRegionState.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerLoadMetaRegionState.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.region.TestMasterRegionWALRecovery.java">org/apache/hadoop/hbase/master/region/TestMasterRegionWALRecovery.java</a>
                 </td>
                 <td>
                   0
@@ -62066,7 +62066,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestRegexComparator.java">org/apache/hadoop/hbase/filter/TestRegexComparator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMetaReplicasAddressChange.java">org/apache/hadoop/hbase/client/TestMetaReplicasAddressChange.java</a>
                 </td>
                 <td>
                   0
@@ -62075,12 +62075,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMetaReplicasAddressChange.java">org/apache/hadoop/hbase/client/TestMetaReplicasAddressChange.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestRegexComparator.java">org/apache/hadoop/hbase/filter/TestRegexComparator.java</a>
                 </td>
                 <td>
                   0
@@ -62089,7 +62089,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
@@ -62766,7 +62766,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.HFileWriterImpl.java">org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.PeerQueue.java">org/apache/hadoop/hbase/master/procedure/PeerQueue.java</a>
                 </td>
                 <td>
                   0
@@ -62780,7 +62780,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.PeerQueue.java">org/apache/hadoop/hbase/master/procedure/PeerQueue.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.HFileWriterImpl.java">org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.java</a>
                 </td>
                 <td>
                   0
@@ -63494,7 +63494,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestSeekHints.java">org/apache/hadoop/hbase/filter/TestSeekHints.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.TestWALEventTracker.java">org/apache/hadoop/hbase/namequeues/TestWALEventTracker.java</a>
                 </td>
                 <td>
                   0
@@ -63508,7 +63508,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.TestWALEventTracker.java">org/apache/hadoop/hbase/namequeues/TestWALEventTracker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestSeekHints.java">org/apache/hadoop/hbase/filter/TestSeekHints.java</a>
                 </td>
                 <td>
                   0
@@ -63690,7 +63690,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.OutputSink.java">org/apache/hadoop/hbase/wal/OutputSink.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</a>
                 </td>
                 <td>
                   0
@@ -63704,7 +63704,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.OutputSink.java">org/apache/hadoop/hbase/wal/OutputSink.java</a>
                 </td>
                 <td>
                   0
@@ -63942,7 +63942,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestScannerSelectionUsingTTL.java">org/apache/hadoop/hbase/io/hfile/TestScannerSelectionUsingTTL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncNamespaceAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncNamespaceAdminApi.java</a>
                 </td>
                 <td>
                   0
@@ -63956,7 +63956,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncNamespaceAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncNamespaceAdminApi.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestScannerSelectionUsingTTL.java">org/apache/hadoop/hbase/io/hfile/TestScannerSelectionUsingTTL.java</a>
                 </td>
                 <td>
                   0
@@ -65398,7 +65398,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.FastPathRWQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/FastPathRWQueueRpcExecutor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a>
                 </td>
                 <td>
                   0
@@ -65407,12 +65407,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.FastPathRWQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/FastPathRWQueueRpcExecutor.java</a>
                 </td>
                 <td>
                   0
@@ -65421,7 +65421,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -65678,7 +65678,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTracker.java">org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.TimeToLiveProcedureWALCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveProcedureWALCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -65692,7 +65692,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.TimeToLiveProcedureWALCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveProcedureWALCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTracker.java">org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java</a>
                 </td>
                 <td>
                   0
@@ -65720,7 +65720,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDeleteMobTable.java">org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncMetaRegionLocator.java">org/apache/hadoop/hbase/client/TestAsyncMetaRegionLocator.java</a>
                 </td>
                 <td>
                   0
@@ -65734,7 +65734,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncMetaRegionLocator.java">org/apache/hadoop/hbase/client/TestAsyncMetaRegionLocator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDeleteMobTable.java">org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java</a>
                 </td>
                 <td>
                   0
@@ -66966,7 +66966,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestStripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestSnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestSnapshotQuotaObserverChore.java</a>
                 </td>
                 <td>
                   0
@@ -66980,7 +66980,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestSnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestSnapshotQuotaObserverChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestStripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactor.java</a>
                 </td>
                 <td>
                   0
@@ -67414,7 +67414,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RegionMetrics.java">org/apache/hadoop/hbase/RegionMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TableExistsException.java">org/apache/hadoop/hbase/TableExistsException.java</a>
                 </td>
                 <td>
                   0
@@ -67428,7 +67428,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TableExistsException.java">org/apache/hadoop/hbase/TableExistsException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RegionMetrics.java">org/apache/hadoop/hbase/RegionMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -67638,7 +67638,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction.java">org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestEditsStuckBehindDroppedTable.java">org/apache/hadoop/hbase/replication/TestEditsStuckBehindDroppedTable.java</a>
                 </td>
                 <td>
                   0
@@ -67652,7 +67652,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestEditsStuckBehindDroppedTable.java">org/apache/hadoop/hbase/replication/TestEditsStuckBehindDroppedTable.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction.java">org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java</a>
                 </td>
                 <td>
                   0
@@ -68184,7 +68184,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestWideScanner.java">org/apache/hadoop/hbase/regionserver/TestWideScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.LimitedScanResultConsumer.java">org/apache/hadoop/hbase/client/LimitedScanResultConsumer.java</a>
                 </td>
                 <td>
                   0
@@ -68198,7 +68198,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.LimitedScanResultConsumer.java">org/apache/hadoop/hbase/client/LimitedScanResultConsumer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestWideScanner.java">org/apache/hadoop/hbase/regionserver/TestWideScanner.java</a>
                 </td>
                 <td>
                   0
@@ -68478,7 +68478,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ActiveMasterManager.java">org/apache/hadoop/hbase/master/ActiveMasterManager.java</a>
                 </td>
                 <td>
                   0
@@ -68492,7 +68492,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ActiveMasterManager.java">org/apache/hadoop/hbase/master/ActiveMasterManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</a>
                 </td>
                 <td>
                   0
@@ -68520,7 +68520,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestPrefixFilter.java">org/apache/hadoop/hbase/filter/TestPrefixFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java</a>
                 </td>
                 <td>
                   0
@@ -68534,7 +68534,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestPrefixFilter.java">org/apache/hadoop/hbase/filter/TestPrefixFilter.java</a>
                 </td>
                 <td>
                   0
@@ -69206,7 +69206,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogTestHelper.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogTestHelper.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSnapshotProcedureRSCrashes.java">org/apache/hadoop/hbase/master/procedure/TestSnapshotProcedureRSCrashes.java</a>
                 </td>
                 <td>
                   0
@@ -69220,7 +69220,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSnapshotProcedureRSCrashes.java">org/apache/hadoop/hbase/master/procedure/TestSnapshotProcedureRSCrashes.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogTestHelper.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogTestHelper.java</a>
                 </td>
                 <td>
                   0
@@ -69318,7 +69318,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSimpleTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSimpleTimeRangeTracker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRogueRSAssignment.java">org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.java</a>
                 </td>
                 <td>
                   0
@@ -69332,7 +69332,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRogueRSAssignment.java">org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSimpleTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSimpleTimeRangeTracker.java</a>
                 </td>
                 <td>
                   0
@@ -69430,7 +69430,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.java">org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.DirScanPool.java">org/apache/hadoop/hbase/master/cleaner/DirScanPool.java</a>
                 </td>
                 <td>
                   0
@@ -69439,12 +69439,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.DirScanPool.java">org/apache/hadoop/hbase/master/cleaner/DirScanPool.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.java">org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java</a>
                 </td>
                 <td>
                   0
@@ -69453,7 +69453,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -70452,7 +70452,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestHBaseMetaEdit.java">org/apache/hadoop/hbase/TestHBaseMetaEdit.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationActiveFSHLog.java">org/apache/hadoop/hbase/replication/TestSyncReplicationActiveFSHLog.java</a>
                 </td>
                 <td>
                   0
@@ -70466,7 +70466,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationActiveFSHLog.java">org/apache/hadoop/hbase/replication/TestSyncReplicationActiveFSHLog.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestHBaseMetaEdit.java">org/apache/hadoop/hbase/TestHBaseMetaEdit.java</a>
                 </td>
                 <td>
                   0
@@ -70550,7 +70550,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestDefaultAtomicQuota.java">org/apache/hadoop/hbase/quotas/TestDefaultAtomicQuota.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestBasicReadWriteWithDifferentConnectionRegistries.java">org/apache/hadoop/hbase/client/TestBasicReadWriteWithDifferentConnectionRegistries.java</a>
                 </td>
                 <td>
                   0
@@ -70564,7 +70564,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestBasicReadWriteWithDifferentConnectionRegistries.java">org/apache/hadoop/hbase/client/TestBasicReadWriteWithDifferentConnectionRegistries.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestDefaultAtomicQuota.java">org/apache/hadoop/hbase/quotas/TestDefaultAtomicQuota.java</a>
                 </td>
                 <td>
                   0
@@ -70606,7 +70606,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCleanupCompactedFileOnRegionClose.java">org/apache/hadoop/hbase/regionserver/TestCleanupCompactedFileOnRegionClose.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -70620,7 +70620,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCleanupCompactedFileOnRegionClose.java">org/apache/hadoop/hbase/regionserver/TestCleanupCompactedFileOnRegionClose.java</a>
                 </td>
                 <td>
                   0
@@ -71628,7 +71628,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.Call.java">org/apache/hadoop/hbase/ipc/Call.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ZooKeeperConnectionException.java">org/apache/hadoop/hbase/ZooKeeperConnectionException.java</a>
                 </td>
                 <td>
                   0
@@ -71642,7 +71642,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ZooKeeperConnectionException.java">org/apache/hadoop/hbase/ZooKeeperConnectionException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.Call.java">org/apache/hadoop/hbase/ipc/Call.java</a>
                 </td>
                 <td>
                   0
diff --git a/coc.html b/coc.html
index 13c93586db5..c6c943cfbaf 100644
--- a/coc.html
+++ b/coc.html
@@ -253,7 +253,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index f0f29f01a01..edb29f2a06e 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -318,7 +318,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 6f18ca7f808..142f9d75d7a 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -1103,7 +1103,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index 4db1f0ac6fc..31d138f5c4b 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -200,7 +200,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index 697c04695d5..c62b79d2f09 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1762,7 +1762,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html
index 9cf74dab212..6fc08d2b49b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html
@@ -81,7 +81,7 @@ loadScripts(document, 'script');</script>
 <dd><a href="BlockCacheUtil.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheUtil</a></dd>
 </dl>
 <hr>
-<div class="type-signature"><span class="modifiers">static class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-93">BlockCacheUtil.CachedBlockCountsPerFile</a></span>
+<div class="type-signature"><span class="modifiers">static class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-95">BlockCacheUtil.CachedBlockCountsPerFile</a></span>
 <span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
 <div class="block">Little data structure to hold counts for a file. Used doing a toJSON.</div>
 </section>
@@ -173,31 +173,31 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="count">
 <h3>count</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-94">count</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-96">count</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="size">
 <h3>size</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-95">size</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-97">size</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="countData">
 <h3>countData</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-96">countData</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-98">countData</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="sizeData">
 <h3>sizeData</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-97">sizeData</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-99">sizeData</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="filename">
 <h3>filename</h3>
-<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-98">filename</a></span></div>
+<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-100">filename</a></span></div>
 </section>
 </li>
 </ul>
@@ -211,7 +211,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(java.lang.String)">
 <h3>CachedBlockCountsPerFile</h3>
-<div class="member-signature"><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-100">CachedBlockCountsPerFile</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;filename)</span></div>
+<div class="member-signature"><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-102">CachedBlockCountsPerFile</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;filename)</span></div>
 </section>
 </li>
 </ul>
@@ -225,31 +225,31 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="getCount()">
 <h3>getCount</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-104">getCount</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-106">getCount</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getSize()">
 <h3>getSize</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-108">getSize</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-110">getSize</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getCountData()">
 <h3>getCountData</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-112">getCountData</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-114">getCountData</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getSizeData()">
 <h3>getSizeData</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-116">getSizeData</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-118">getSizeData</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getFilename()">
 <h3>getFilename</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-120">getFilename</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#line-122">getFilename</a></span>()</div>
 </section>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
index 68f0bf19cdc..2e5e8c59932 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
@@ -81,7 +81,7 @@ loadScripts(document, 'script');</script>
 <dd><a href="BlockCacheUtil.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheUtil</a></dd>
 </dl>
 <hr>
-<div class="type-signature"><span class="modifiers">public static class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-309">BlockCacheUtil.CachedBlocksByFile</a></span>
+<div class="type-signature"><span class="modifiers">public static class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-311">BlockCacheUtil.CachedBlocksByFile</a></span>
 <span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
 <div class="block">Use one of these to keep a running account of cached blocks by file. Throw it away when done.
  This is different than metrics in that it is stats on current state of a cache. See
@@ -210,37 +210,37 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="count">
 <h3>count</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-310">count</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-312">count</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="dataBlockCount">
 <h3>dataBlockCount</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-311">dataBlockCount</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-313">dataBlockCount</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="size">
 <h3>size</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-312">size</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-314">size</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="dataSize">
 <h3>dataSize</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-313">dataSize</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-315">dataSize</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="now">
 <h3>now</h3>
-<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-314">now</a></span></div>
+<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-316">now</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="max">
 <h3>max</h3>
-<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-320">max</a></span></div>
+<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-322">max</a></span></div>
 <div class="block">How many blocks to look at before we give up. There could be many millions of blocks. We
  don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI
  displays warning in red when stats are incomplete.</div>
@@ -249,14 +249,14 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="cachedBlockByFile">
 <h3>cachedBlockByFile</h3>
-<div class="member-signature"><span class="modifiers">private transient</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/NavigableMap.html" title="class or interface in java.util" class="external-link">NavigableMap</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.c [...]
+<div class="member-signature"><span class="modifiers">private transient</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/NavigableMap.html" title="class or interface in java.util" class="external-link">NavigableMap</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.c [...]
 <div class="block">Map by filename. use concurent utils because we want our Map and contained blocks sorted.</div>
 </section>
 </li>
 <li>
 <section class="detail" id="hist">
 <h3>hist</h3>
-<div class="member-signature"><span class="return-type"><a href="../../metrics/impl/FastLongHistogram.html" title="class in org.apache.hadoop.hbase.metrics.impl">FastLongHistogram</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-335">hist</a></span></div>
+<div class="member-signature"><span class="return-type"><a href="../../metrics/impl/FastLongHistogram.html" title="class in org.apache.hadoop.hbase.metrics.impl">FastLongHistogram</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-337">hist</a></span></div>
 </section>
 </li>
 </ul>
@@ -270,13 +270,13 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;()">
 <h3>CachedBlocksByFile</h3>
-<div class="member-signature"><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-322">CachedBlocksByFile</a></span>()</div>
+<div class="member-signature"><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-324">CachedBlocksByFile</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="&lt;init&gt;(org.apache.hadoop.conf.Configuration)">
 <h3>CachedBlocksByFile</h3>
-<div class="member-signature"><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-326">CachedBlocksByFile</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;c)</span></div>
+<div class="member-signature"><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-328">CachedBlocksByFile</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;c)</span></div>
 </section>
 </li>
 </ul>
@@ -290,14 +290,14 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="update(org.apache.hadoop.hbase.io.hfile.CachedBlock)">
 <h3>update</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-338">update</a></span><wbr><span class="parameters">(<a href="CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&nbsp;cb)</span></div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-340">update</a></span><wbr><span class="parameters">(<a href="CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&nbsp;cb)</span></div>
 <div class="block">Returns True if full.... if we won't be adding any more.</div>
 </section>
 </li>
 <li>
 <section class="detail" id="isFull()">
 <h3>isFull</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-363">isFull</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-365">isFull</a></span>()</div>
 <dl class="notes">
 <dt>Returns:</dt>
 <dd>True if full; i.e. there are more items in the cache but we only loaded up the
@@ -309,46 +309,46 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="getCachedBlockStatsByFile()">
 <h3>getCachedBlockStatsByFile</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/NavigableMap.html" title="class or interface in java.util" class="external-link">NavigableMap</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.com/en/java/ [...]
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/NavigableMap.html" title="class or interface in java.util" class="external-link">NavigableMap</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>,<wbr><a href="https://docs.oracle.com/en/java/ [...]
 </section>
 </li>
 <li>
 <section class="detail" id="getCount()">
 <h3>getCount</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-372">getCount</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-374">getCount</a></span>()</div>
 <div class="block">Returns count of blocks in the cache</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getDataCount()">
 <h3>getDataCount</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-376">getDataCount</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-378">getDataCount</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getSize()">
 <h3>getSize</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-381">getSize</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-383">getSize</a></span>()</div>
 <div class="block">Returns size of blocks in the cache</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getDataSize()">
 <h3>getDataSize</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-386">getDataSize</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-388">getDataSize</a></span>()</div>
 <div class="block">Returns Size of data.</div>
 </section>
 </li>
 <li>
 <section class="detail" id="getAgeInCacheSnapshot()">
 <h3>getAgeInCacheSnapshot</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="AgeSnapshot.html" title="class in org.apache.hadoop.hbase.io.hfile">AgeSnapshot</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-390">getAgeInCacheSnapshot</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="AgeSnapshot.html" title="class in org.apache.hadoop.hbase.io.hfile">AgeSnapshot</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-392">getAgeInCacheSnapshot</a></span>()</div>
 </section>
 </li>
 <li>
 <section class="detail" id="toString()">
 <h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-394">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html#line-396">toString</a></span>()</div>
 <dl class="notes">
 <dt>Overrides:</dt>
 <dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
index 1ead8753097..7fe6fe08dbd 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
@@ -78,7 +78,7 @@ loadScripts(document, 'script');</script>
 <section class="class-description" id="class-description">
 <hr>
 <div class="type-signature"><span class="annotations">@Private
-</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-51">BlockCacheUtil</a></span>
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-52">BlockCacheUtil</a></span>
 <span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></span></div>
 <div class="block">Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.
  No attempt has been made at making this thread safe.</div>
@@ -249,13 +249,13 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="LOG">
 <h3>LOG</h3>
-<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">org.slf4j.Logger</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-54">LOG</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">org.slf4j.Logger</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-55">LOG</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="NANOS_PER_SECOND">
 <h3>NANOS_PER_SECOND</h3>
-<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-56">NANOS_PER_SECOND</a></span></div>
+<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-57">NANOS_PER_SECOND</a></span></div>
 <dl class="notes">
 <dt>See Also:</dt>
 <dd>
@@ -269,14 +269,14 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="GSON">
 <h3>GSON</h3>
-<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">org.apache.hbase.thirdparty.com.google.gson.Gson</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-61">GSON</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">org.apache.hbase.thirdparty.com.google.gson.Gson</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-62">GSON</a></span></div>
 <div class="block">Needed generating JSON.</div>
 </section>
 </li>
 <li>
 <section class="detail" id="DEFAULT_MAX">
 <h3>DEFAULT_MAX</h3>
-<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-259">DEFAULT_MAX</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-261">DEFAULT_MAX</a></span></div>
 <dl class="notes">
 <dt>See Also:</dt>
 <dd>
@@ -298,7 +298,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;()">
 <h3>BlockCacheUtil</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-52">BlockCacheUtil</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-53">BlockCacheUtil</a></span>()</div>
 </section>
 </li>
 </ul>
@@ -312,7 +312,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="toString(org.apache.hadoop.hbase.io.hfile.CachedBlock,long)">
 <h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-86">toString</a></span><wbr><span class="parameters">(<a href="CachedBlock.html" title= [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-88">toString</a></span><wbr><span class="parameters">(<a href="CachedBlock.html" title= [...]
  long&nbsp;now)</span></div>
 <div class="block">Returns The block content as String.</div>
 </section>
@@ -320,7 +320,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="toJSON(java.lang.String,java.util.NavigableSet)">
 <h3>toJSON</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-126">toJSON</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/e [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-128">toJSON</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/e [...]
  <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/NavigableSet.html" title="class or interface in java.util" class="external-link">NavigableSet</a>&lt;<a href="CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;&nbsp;blocks)</span>
                      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
 <div class="block">Returns A JSON String of <code>filename</code> and counts of <code>blocks</code></div>
@@ -333,7 +333,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="toJSON(org.apache.hadoop.hbase.io.hfile.BlockCacheUtil.CachedBlocksByFile)">
 <h3>toJSON</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-142">toJSON</a></span><wbr><span class="parameters">(<a href="BlockCacheUtil.CachedBloc [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-144">toJSON</a></span><wbr><span class="parameters">(<a href="BlockCacheUtil.CachedBloc [...]
                      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
 <div class="block">Returns JSON string of <code>cbsf</code> aggregated</div>
 <dl class="notes">
@@ -345,7 +345,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="toJSON(org.apache.hadoop.hbase.io.hfile.BlockCache)">
 <h3>toJSON</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-147">toJSON</a></span><wbr><span class="parameters">(<a href="BlockCache.html" title="i [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-149">toJSON</a></span><wbr><span class="parameters">(<a href="BlockCache.html" title="i [...]
                      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
 <div class="block">Returns JSON string of <code>bc</code> content.</div>
 <dl class="notes">
@@ -357,7 +357,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="toStringMinusFileName(org.apache.hadoop.hbase.io.hfile.CachedBlock,long)">
 <h3>toStringMinusFileName</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-152">toStringMinusFileName</a></span><wbr><span class="parameters">(<a href="CachedBloc [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-154">toStringMinusFileName</a></span><wbr><span class="parameters">(<a href="CachedBloc [...]
  long&nbsp;now)</span></div>
 <div class="block">Returns The block content of <code>bc</code> as a String minus the filename.</div>
 </section>
@@ -365,7 +365,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="getLoadedCachedBlocksByFile(org.apache.hadoop.conf.Configuration,org.apache.hadoop.hbase.io.hfile.BlockCache)">
 <h3>getLoadedCachedBlocksByFile</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="BlockCacheUtil.CachedBlocksByFile.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheUtil.CachedBlocksByFile</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-165">getLoadedCachedBlocksByFile</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="BlockCacheUtil.CachedBlocksByFile.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheUtil.CachedBlocksByFile</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-167">getLoadedCachedBlocksByFile</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;conf,
  <a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;bc)</span></div>
 <div class="block">Get a <a href="BlockCacheUtil.CachedBlocksByFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>BlockCacheUtil.CachedBlocksByFile</code></a> instance and load it up by iterating content in
  <a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile"><code>BlockCache</code></a>.</div>
@@ -381,7 +381,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="compareCacheBlock(org.apache.hadoop.hbase.io.hfile.Cacheable,org.apache.hadoop.hbase.io.hfile.Cacheable,boolean)">
 <h3>compareCacheBlock</h3>
-<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-174">compareCacheBlock</a></span><wbr><span class="parameters">(<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;left,
+<div class="member-signature"><span class="modifiers">private static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-176">compareCacheBlock</a></span><wbr><span class="parameters">(<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;left,
  <a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;right,
  boolean&nbsp;includeNextBlockMetadata)</span></div>
 </section>
@@ -389,7 +389,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="validateBlockAddition(org.apache.hadoop.hbase.io.hfile.Cacheable,org.apache.hadoop.hbase.io.hfile.Cacheable,org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">
 <h3>validateBlockAddition</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-193">validateBlockAddition</a></span><wbr><span class="parameters">(<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;existing,
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-195">validateBlockAddition</a></span><wbr><span class="parameters">(<a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;existing,
  <a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;newBlock,
  <a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</span></div>
 <div class="block">Validate that the existing and newBlock are the same without including the nextBlockMetadata,
@@ -408,7 +408,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="shouldReplaceExistingCacheBlock(org.apache.hadoop.hbase.io.hfile.BlockCache,org.apache.hadoop.hbase.io.hfile.BlockCacheKey,org.apache.hadoop.hbase.io.hfile.Cacheable)">
 <h3>shouldReplaceExistingCacheBlock</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-221">shouldReplaceExistingCacheBlock</a></span><wbr><span class="parameters">(<a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;blockCache,
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-223">shouldReplaceExistingCacheBlock</a></span><wbr><span class="parameters">(<a href="BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;blockCache,
  <a href="BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
  <a href="Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;newBlock)</span></div>
 <div class="block">Because of the region splitting, it's possible that the split key locate in the middle of a
@@ -432,19 +432,19 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="listAllFilesNames(java.util.Map)">
 <h3>listAllFilesNames</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</span>&nbsp;<span class="element-name"><a href="../.. [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html" title="class or interface in java.util" class="external-link">Set</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&gt;</span>&nbsp;<span class="element-name"><a href="../.. [...]
 </section>
 </li>
 <li>
 <section class="detail" id="getMaxCachedBlocksByFile(org.apache.hadoop.conf.Configuration)">
 <h3>getMaxCachedBlocksByFile</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-261">getMaxCachedBlocksByFile</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;conf)</span></div>
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-263">getMaxCachedBlocksByFile</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;conf)</span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="getBlockForCaching(org.apache.hadoop.hbase.io.hfile.CacheConfig,org.apache.hadoop.hbase.io.hfile.HFileBlock)">
 <h3>getBlockForCaching</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-274">getBlockForCaching</a></span><wbr><span class="parameters">(<a href="CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-276">getBlockForCaching</a></span><wbr><span class="parameters">(<a href="CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp [...]
  <a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a>&nbsp;block)</span></div>
 <div class="block">Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without
  checksum for caching. This is needed for when we cache blocks via readers (either prefetch or
@@ -462,7 +462,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="cloneContext(org.apache.hadoop.hbase.io.hfile.HFileContext)">
 <h3>cloneContext</h3>
-<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-293">cloneContext</a></span><wbr><span class="parameters">(<a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp [...]
+<div class="member-signature"><span class="modifiers">public static</span>&nbsp;<span class="return-type"><a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html#line-295">cloneContext</a></span><wbr><span class="parameters">(<a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp [...]
 </section>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html
index adf6c372f4c..ae0a369cd7a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html
@@ -33,389 +33,391 @@
 <span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.io.hfile.HFileBlock.FILL_HEADER;</span>
 <span class="source-line-no">021</span><span id="line-21"></span>
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
-<span class="source-line-no">023</span><span id="line-23">import java.nio.ByteBuffer;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.util.HashSet;</span>
-<span class="source-line-no">025</span><span id="line-25">import java.util.Map;</span>
-<span class="source-line-no">026</span><span id="line-26">import java.util.NavigableMap;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableSet;</span>
-<span class="source-line-no">028</span><span id="line-28">import java.util.Set;</span>
-<span class="source-line-no">029</span><span id="line-29">import java.util.concurrent.ConcurrentSkipListMap;</span>
-<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListSet;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.ChecksumType;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.GsonUtil;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.slf4j.Logger;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47">/**</span>
-<span class="source-line-no">048</span><span id="line-48"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
-<span class="source-line-no">049</span><span id="line-49"> * No attempt has been made at making this thread safe.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51">@InterfaceAudience.Private</span>
-<span class="source-line-no">052</span><span id="line-52">public class BlockCacheUtil {</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">  public static final long NANOS_PER_SECOND = 1000000000;</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58">  /**</span>
-<span class="source-line-no">059</span><span id="line-59">   * Needed generating JSON.</span>
-<span class="source-line-no">060</span><span id="line-60">   */</span>
-<span class="source-line-no">061</span><span id="line-61">  private static final Gson GSON = GsonUtil.createGson()</span>
-<span class="source-line-no">062</span><span id="line-62">    .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64">      @Override</span>
-<span class="source-line-no">065</span><span id="line-65">      public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
-<span class="source-line-no">066</span><span id="line-66">        AgeSnapshot snapshot = new AgeSnapshot(value);</span>
-<span class="source-line-no">067</span><span id="line-67">        out.beginObject();</span>
-<span class="source-line-no">068</span><span id="line-68">        out.name("mean").value(snapshot.getMean());</span>
-<span class="source-line-no">069</span><span id="line-69">        out.name("min").value(snapshot.getMin());</span>
-<span class="source-line-no">070</span><span id="line-70">        out.name("max").value(snapshot.getMax());</span>
-<span class="source-line-no">071</span><span id="line-71">        out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
-<span class="source-line-no">072</span><span id="line-72">        out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
-<span class="source-line-no">073</span><span id="line-73">        out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
-<span class="source-line-no">074</span><span id="line-74">        out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
-<span class="source-line-no">075</span><span id="line-75">        out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
-<span class="source-line-no">076</span><span id="line-76">        out.endObject();</span>
-<span class="source-line-no">077</span><span id="line-77">      }</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79">      @Override</span>
-<span class="source-line-no">080</span><span id="line-80">      public FastLongHistogram read(JsonReader in) throws IOException {</span>
-<span class="source-line-no">081</span><span id="line-81">        throw new UnsupportedOperationException();</span>
-<span class="source-line-no">082</span><span id="line-82">      }</span>
-<span class="source-line-no">083</span><span id="line-83">    }).setPrettyPrinting().create();</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85">  /** Returns The block content as String. */</span>
-<span class="source-line-no">086</span><span id="line-86">  public static String toString(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">087</span><span id="line-87">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
-<span class="source-line-no">088</span><span id="line-88">  }</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90">  /**</span>
-<span class="source-line-no">091</span><span id="line-91">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
-<span class="source-line-no">092</span><span id="line-92">   */</span>
-<span class="source-line-no">093</span><span id="line-93">  static class CachedBlockCountsPerFile {</span>
-<span class="source-line-no">094</span><span id="line-94">    private int count = 0;</span>
-<span class="source-line-no">095</span><span id="line-95">    private long size = 0;</span>
-<span class="source-line-no">096</span><span id="line-96">    private int countData = 0;</span>
-<span class="source-line-no">097</span><span id="line-97">    private long sizeData = 0;</span>
-<span class="source-line-no">098</span><span id="line-98">    private final String filename;</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100">    CachedBlockCountsPerFile(final String filename) {</span>
-<span class="source-line-no">101</span><span id="line-101">      this.filename = filename;</span>
-<span class="source-line-no">102</span><span id="line-102">    }</span>
-<span class="source-line-no">103</span><span id="line-103"></span>
-<span class="source-line-no">104</span><span id="line-104">    public int getCount() {</span>
-<span class="source-line-no">105</span><span id="line-105">      return count;</span>
-<span class="source-line-no">106</span><span id="line-106">    }</span>
-<span class="source-line-no">107</span><span id="line-107"></span>
-<span class="source-line-no">108</span><span id="line-108">    public long getSize() {</span>
-<span class="source-line-no">109</span><span id="line-109">      return size;</span>
-<span class="source-line-no">110</span><span id="line-110">    }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112">    public int getCountData() {</span>
-<span class="source-line-no">113</span><span id="line-113">      return countData;</span>
-<span class="source-line-no">114</span><span id="line-114">    }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">    public long getSizeData() {</span>
-<span class="source-line-no">117</span><span id="line-117">      return sizeData;</span>
-<span class="source-line-no">118</span><span id="line-118">    }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">    public String getFilename() {</span>
-<span class="source-line-no">121</span><span id="line-121">      return filename;</span>
-<span class="source-line-no">122</span><span id="line-122">    }</span>
-<span class="source-line-no">123</span><span id="line-123">  }</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
-<span class="source-line-no">126</span><span id="line-126">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
-<span class="source-line-no">127</span><span id="line-127">    throws IOException {</span>
-<span class="source-line-no">128</span><span id="line-128">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
-<span class="source-line-no">129</span><span id="line-129">    for (CachedBlock cb : blocks) {</span>
-<span class="source-line-no">130</span><span id="line-130">      counts.count++;</span>
-<span class="source-line-no">131</span><span id="line-131">      counts.size += cb.getSize();</span>
-<span class="source-line-no">132</span><span id="line-132">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">133</span><span id="line-133">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">134</span><span id="line-134">        counts.countData++;</span>
-<span class="source-line-no">135</span><span id="line-135">        counts.sizeData += cb.getSize();</span>
-<span class="source-line-no">136</span><span id="line-136">      }</span>
-<span class="source-line-no">137</span><span id="line-137">    }</span>
-<span class="source-line-no">138</span><span id="line-138">    return GSON.toJson(counts);</span>
-<span class="source-line-no">139</span><span id="line-139">  }</span>
-<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
-<span class="source-line-no">142</span><span id="line-142">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
-<span class="source-line-no">143</span><span id="line-143">    return GSON.toJson(cbsbf);</span>
-<span class="source-line-no">144</span><span id="line-144">  }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
-<span class="source-line-no">147</span><span id="line-147">  public static String toJSON(BlockCache bc) throws IOException {</span>
-<span class="source-line-no">148</span><span id="line-148">    return GSON.toJson(bc);</span>
-<span class="source-line-no">149</span><span id="line-149">  }</span>
-<span class="source-line-no">150</span><span id="line-150"></span>
-<span class="source-line-no">151</span><span id="line-151">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
-<span class="source-line-no">152</span><span id="line-152">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">153</span><span id="line-153">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
-<span class="source-line-no">154</span><span id="line-154">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
-<span class="source-line-no">155</span><span id="line-155">      + cb.getBlockPriority();</span>
-<span class="source-line-no">156</span><span id="line-156">  }</span>
-<span class="source-line-no">157</span><span id="line-157"></span>
-<span class="source-line-no">158</span><span id="line-158">  /**</span>
-<span class="source-line-no">159</span><span id="line-159">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
-<span class="source-line-no">160</span><span id="line-160">   * {@link BlockCache}.</span>
-<span class="source-line-no">161</span><span id="line-161">   * @param conf Used to read configurations</span>
-<span class="source-line-no">162</span><span id="line-162">   * @param bc   Block Cache to iterate.</span>
-<span class="source-line-no">163</span><span id="line-163">   * @return Laoded up instance of CachedBlocksByFile</span>
-<span class="source-line-no">164</span><span id="line-164">   */</span>
-<span class="source-line-no">165</span><span id="line-165">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
-<span class="source-line-no">166</span><span id="line-166">    final BlockCache bc) {</span>
-<span class="source-line-no">167</span><span id="line-167">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
-<span class="source-line-no">168</span><span id="line-168">    for (CachedBlock cb : bc) {</span>
-<span class="source-line-no">169</span><span id="line-169">      if (cbsbf.update(cb)) break;</span>
-<span class="source-line-no">170</span><span id="line-170">    }</span>
-<span class="source-line-no">171</span><span id="line-171">    return cbsbf;</span>
-<span class="source-line-no">172</span><span id="line-172">  }</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
-<span class="source-line-no">175</span><span id="line-175">    boolean includeNextBlockMetadata) {</span>
-<span class="source-line-no">176</span><span id="line-176">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
-<span class="source-line-no">177</span><span id="line-177">    left.serialize(l, includeNextBlockMetadata);</span>
-<span class="source-line-no">178</span><span id="line-178">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
-<span class="source-line-no">179</span><span id="line-179">    right.serialize(r, includeNextBlockMetadata);</span>
-<span class="source-line-no">180</span><span id="line-180">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
-<span class="source-line-no">181</span><span id="line-181">      r.limit());</span>
-<span class="source-line-no">182</span><span id="line-182">  }</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">  /**</span>
-<span class="source-line-no">185</span><span id="line-185">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
-<span class="source-line-no">186</span><span id="line-186">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
-<span class="source-line-no">187</span><span id="line-187">   * comparison.</span>
-<span class="source-line-no">188</span><span id="line-188">   * @param existing block that is existing in the cache.</span>
-<span class="source-line-no">189</span><span id="line-189">   * @param newBlock block that is trying to be cached.</span>
-<span class="source-line-no">190</span><span id="line-190">   * @param cacheKey the cache key of the blocks.</span>
-<span class="source-line-no">191</span><span id="line-191">   * @return comparison of the existing block to the newBlock.</span>
-<span class="source-line-no">192</span><span id="line-192">   */</span>
-<span class="source-line-no">193</span><span id="line-193">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
-<span class="source-line-no">194</span><span id="line-194">    BlockCacheKey cacheKey) {</span>
-<span class="source-line-no">195</span><span id="line-195">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
-<span class="source-line-no">196</span><span id="line-196">    if (comparison != 0) {</span>
-<span class="source-line-no">197</span><span id="line-197">      throw new RuntimeException(</span>
-<span class="source-line-no">198</span><span id="line-198">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
-<span class="source-line-no">199</span><span id="line-199">    }</span>
-<span class="source-line-no">200</span><span id="line-200">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
-<span class="source-line-no">201</span><span id="line-201">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
-<span class="source-line-no">202</span><span id="line-202">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
-<span class="source-line-no">203</span><span id="line-203">    }</span>
-<span class="source-line-no">204</span><span id="line-204">    return comparison;</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206"></span>
-<span class="source-line-no">207</span><span id="line-207">  /**</span>
-<span class="source-line-no">208</span><span id="line-208">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
-<span class="source-line-no">209</span><span id="line-209">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
-<span class="source-line-no">210</span><span id="line-210">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
-<span class="source-line-no">211</span><span id="line-211">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
-<span class="source-line-no">212</span><span id="line-212">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
-<span class="source-line-no">213</span><span id="line-213">   * new block to cache has, then we can replace the existing block with the new block for better</span>
-<span class="source-line-no">214</span><span id="line-214">   * performance.(HBASE-20447)</span>
-<span class="source-line-no">215</span><span id="line-215">   * @param blockCache BlockCache to check</span>
-<span class="source-line-no">216</span><span id="line-216">   * @param cacheKey   the block cache key</span>
-<span class="source-line-no">217</span><span id="line-217">   * @param newBlock   the new block which try to put into the block cache.</span>
-<span class="source-line-no">218</span><span id="line-218">   * @return true means need to replace existing block with new block for the same block cache key.</span>
-<span class="source-line-no">219</span><span id="line-219">   *         false means just keep the existing block.</span>
-<span class="source-line-no">220</span><span id="line-220">   */</span>
-<span class="source-line-no">221</span><span id="line-221">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
-<span class="source-line-no">222</span><span id="line-222">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
-<span class="source-line-no">223</span><span id="line-223">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
-<span class="source-line-no">224</span><span id="line-224">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
-<span class="source-line-no">225</span><span id="line-225">    if (existingBlock == null) {</span>
-<span class="source-line-no">226</span><span id="line-226">      return true;</span>
-<span class="source-line-no">227</span><span id="line-227">    }</span>
-<span class="source-line-no">228</span><span id="line-228">    try {</span>
-<span class="source-line-no">229</span><span id="line-229">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
-<span class="source-line-no">230</span><span id="line-230">      if (comparison &lt; 0) {</span>
-<span class="source-line-no">231</span><span id="line-231">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
-<span class="source-line-no">232</span><span id="line-232">          + "nextBlockOnDiskSize set. Caching new block.");</span>
-<span class="source-line-no">233</span><span id="line-233">        return true;</span>
-<span class="source-line-no">234</span><span id="line-234">      } else if (comparison &gt; 0) {</span>
-<span class="source-line-no">235</span><span id="line-235">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
-<span class="source-line-no">236</span><span id="line-236">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
-<span class="source-line-no">237</span><span id="line-237">        return false;</span>
-<span class="source-line-no">238</span><span id="line-238">      } else {</span>
-<span class="source-line-no">239</span><span id="line-239">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
-<span class="source-line-no">240</span><span id="line-240">          + "cases (see HBASE-8547)", cacheKey);</span>
-<span class="source-line-no">241</span><span id="line-241">        return false;</span>
-<span class="source-line-no">242</span><span id="line-242">      }</span>
-<span class="source-line-no">243</span><span id="line-243">    } finally {</span>
-<span class="source-line-no">244</span><span id="line-244">      // Release this block to decrement the reference count.</span>
-<span class="source-line-no">245</span><span id="line-245">      existingBlock.release();</span>
-<span class="source-line-no">246</span><span id="line-246">    }</span>
-<span class="source-line-no">247</span><span id="line-247">  }</span>
-<span class="source-line-no">248</span><span id="line-248"></span>
-<span class="source-line-no">249</span><span id="line-249">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
-<span class="source-line-no">250</span><span id="line-250">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
-<span class="source-line-no">251</span><span id="line-251">    onlineRegions.values().forEach(r -&gt; {</span>
-<span class="source-line-no">252</span><span id="line-252">      r.getStores().forEach(s -&gt; {</span>
-<span class="source-line-no">253</span><span id="line-253">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
-<span class="source-line-no">254</span><span id="line-254">      });</span>
-<span class="source-line-no">255</span><span id="line-255">    });</span>
-<span class="source-line-no">256</span><span id="line-256">    return files;</span>
-<span class="source-line-no">257</span><span id="line-257">  }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.lang.reflect.Modifier;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.nio.ByteBuffer;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.util.HashSet;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.util.Map;</span>
+<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableMap;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.NavigableSet;</span>
+<span class="source-line-no">029</span><span id="line-29">import java.util.Set;</span>
+<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListMap;</span>
+<span class="source-line-no">031</span><span id="line-31">import java.util.concurrent.ConcurrentSkipListSet;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.ChecksumType;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.util.GsonUtil;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.slf4j.Logger;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
+<span class="source-line-no">050</span><span id="line-50"> * No attempt has been made at making this thread safe.</span>
+<span class="source-line-no">051</span><span id="line-51"> */</span>
+<span class="source-line-no">052</span><span id="line-52">@InterfaceAudience.Private</span>
+<span class="source-line-no">053</span><span id="line-53">public class BlockCacheUtil {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">  public static final long NANOS_PER_SECOND = 1000000000;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59">  /**</span>
+<span class="source-line-no">060</span><span id="line-60">   * Needed generating JSON.</span>
+<span class="source-line-no">061</span><span id="line-61">   */</span>
+<span class="source-line-no">062</span><span id="line-62">  private static final Gson GSON =</span>
+<span class="source-line-no">063</span><span id="line-63">    GsonUtil.createGson().excludeFieldsWithModifiers(Modifier.PRIVATE)</span>
+<span class="source-line-no">064</span><span id="line-64">      .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66">        @Override</span>
+<span class="source-line-no">067</span><span id="line-67">        public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
+<span class="source-line-no">068</span><span id="line-68">          AgeSnapshot snapshot = new AgeSnapshot(value);</span>
+<span class="source-line-no">069</span><span id="line-69">          out.beginObject();</span>
+<span class="source-line-no">070</span><span id="line-70">          out.name("mean").value(snapshot.getMean());</span>
+<span class="source-line-no">071</span><span id="line-71">          out.name("min").value(snapshot.getMin());</span>
+<span class="source-line-no">072</span><span id="line-72">          out.name("max").value(snapshot.getMax());</span>
+<span class="source-line-no">073</span><span id="line-73">          out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
+<span class="source-line-no">074</span><span id="line-74">          out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
+<span class="source-line-no">075</span><span id="line-75">          out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
+<span class="source-line-no">076</span><span id="line-76">          out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
+<span class="source-line-no">077</span><span id="line-77">          out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
+<span class="source-line-no">078</span><span id="line-78">          out.endObject();</span>
+<span class="source-line-no">079</span><span id="line-79">        }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81">        @Override</span>
+<span class="source-line-no">082</span><span id="line-82">        public FastLongHistogram read(JsonReader in) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83">          throw new UnsupportedOperationException();</span>
+<span class="source-line-no">084</span><span id="line-84">        }</span>
+<span class="source-line-no">085</span><span id="line-85">      }).setPrettyPrinting().create();</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87">  /** Returns The block content as String. */</span>
+<span class="source-line-no">088</span><span id="line-88">  public static String toString(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">089</span><span id="line-89">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
+<span class="source-line-no">090</span><span id="line-90">  }</span>
+<span class="source-line-no">091</span><span id="line-91"></span>
+<span class="source-line-no">092</span><span id="line-92">  /**</span>
+<span class="source-line-no">093</span><span id="line-93">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
+<span class="source-line-no">094</span><span id="line-94">   */</span>
+<span class="source-line-no">095</span><span id="line-95">  static class CachedBlockCountsPerFile {</span>
+<span class="source-line-no">096</span><span id="line-96">    private int count = 0;</span>
+<span class="source-line-no">097</span><span id="line-97">    private long size = 0;</span>
+<span class="source-line-no">098</span><span id="line-98">    private int countData = 0;</span>
+<span class="source-line-no">099</span><span id="line-99">    private long sizeData = 0;</span>
+<span class="source-line-no">100</span><span id="line-100">    private final String filename;</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102">    CachedBlockCountsPerFile(final String filename) {</span>
+<span class="source-line-no">103</span><span id="line-103">      this.filename = filename;</span>
+<span class="source-line-no">104</span><span id="line-104">    }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106">    public int getCount() {</span>
+<span class="source-line-no">107</span><span id="line-107">      return count;</span>
+<span class="source-line-no">108</span><span id="line-108">    }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">    public long getSize() {</span>
+<span class="source-line-no">111</span><span id="line-111">      return size;</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114">    public int getCountData() {</span>
+<span class="source-line-no">115</span><span id="line-115">      return countData;</span>
+<span class="source-line-no">116</span><span id="line-116">    }</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118">    public long getSizeData() {</span>
+<span class="source-line-no">119</span><span id="line-119">      return sizeData;</span>
+<span class="source-line-no">120</span><span id="line-120">    }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">    public String getFilename() {</span>
+<span class="source-line-no">123</span><span id="line-123">      return filename;</span>
+<span class="source-line-no">124</span><span id="line-124">    }</span>
+<span class="source-line-no">125</span><span id="line-125">  }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
+<span class="source-line-no">128</span><span id="line-128">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
+<span class="source-line-no">129</span><span id="line-129">    throws IOException {</span>
+<span class="source-line-no">130</span><span id="line-130">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
+<span class="source-line-no">131</span><span id="line-131">    for (CachedBlock cb : blocks) {</span>
+<span class="source-line-no">132</span><span id="line-132">      counts.count++;</span>
+<span class="source-line-no">133</span><span id="line-133">      counts.size += cb.getSize();</span>
+<span class="source-line-no">134</span><span id="line-134">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">135</span><span id="line-135">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">136</span><span id="line-136">        counts.countData++;</span>
+<span class="source-line-no">137</span><span id="line-137">        counts.sizeData += cb.getSize();</span>
+<span class="source-line-no">138</span><span id="line-138">      }</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140">    return GSON.toJson(counts);</span>
+<span class="source-line-no">141</span><span id="line-141">  }</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
+<span class="source-line-no">144</span><span id="line-144">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
+<span class="source-line-no">145</span><span id="line-145">    return GSON.toJson(cbsbf);</span>
+<span class="source-line-no">146</span><span id="line-146">  }</span>
+<span class="source-line-no">147</span><span id="line-147"></span>
+<span class="source-line-no">148</span><span id="line-148">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
+<span class="source-line-no">149</span><span id="line-149">  public static String toJSON(BlockCache bc) throws IOException {</span>
+<span class="source-line-no">150</span><span id="line-150">    return GSON.toJson(bc);</span>
+<span class="source-line-no">151</span><span id="line-151">  }</span>
+<span class="source-line-no">152</span><span id="line-152"></span>
+<span class="source-line-no">153</span><span id="line-153">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
+<span class="source-line-no">154</span><span id="line-154">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">155</span><span id="line-155">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
+<span class="source-line-no">156</span><span id="line-156">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
+<span class="source-line-no">157</span><span id="line-157">      + cb.getBlockPriority();</span>
+<span class="source-line-no">158</span><span id="line-158">  }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">  /**</span>
+<span class="source-line-no">161</span><span id="line-161">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
+<span class="source-line-no">162</span><span id="line-162">   * {@link BlockCache}.</span>
+<span class="source-line-no">163</span><span id="line-163">   * @param conf Used to read configurations</span>
+<span class="source-line-no">164</span><span id="line-164">   * @param bc   Block Cache to iterate.</span>
+<span class="source-line-no">165</span><span id="line-165">   * @return Laoded up instance of CachedBlocksByFile</span>
+<span class="source-line-no">166</span><span id="line-166">   */</span>
+<span class="source-line-no">167</span><span id="line-167">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
+<span class="source-line-no">168</span><span id="line-168">    final BlockCache bc) {</span>
+<span class="source-line-no">169</span><span id="line-169">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
+<span class="source-line-no">170</span><span id="line-170">    for (CachedBlock cb : bc) {</span>
+<span class="source-line-no">171</span><span id="line-171">      if (cbsbf.update(cb)) break;</span>
+<span class="source-line-no">172</span><span id="line-172">    }</span>
+<span class="source-line-no">173</span><span id="line-173">    return cbsbf;</span>
+<span class="source-line-no">174</span><span id="line-174">  }</span>
+<span class="source-line-no">175</span><span id="line-175"></span>
+<span class="source-line-no">176</span><span id="line-176">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
+<span class="source-line-no">177</span><span id="line-177">    boolean includeNextBlockMetadata) {</span>
+<span class="source-line-no">178</span><span id="line-178">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
+<span class="source-line-no">179</span><span id="line-179">    left.serialize(l, includeNextBlockMetadata);</span>
+<span class="source-line-no">180</span><span id="line-180">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
+<span class="source-line-no">181</span><span id="line-181">    right.serialize(r, includeNextBlockMetadata);</span>
+<span class="source-line-no">182</span><span id="line-182">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
+<span class="source-line-no">183</span><span id="line-183">      r.limit());</span>
+<span class="source-line-no">184</span><span id="line-184">  }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186">  /**</span>
+<span class="source-line-no">187</span><span id="line-187">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
+<span class="source-line-no">188</span><span id="line-188">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
+<span class="source-line-no">189</span><span id="line-189">   * comparison.</span>
+<span class="source-line-no">190</span><span id="line-190">   * @param existing block that is existing in the cache.</span>
+<span class="source-line-no">191</span><span id="line-191">   * @param newBlock block that is trying to be cached.</span>
+<span class="source-line-no">192</span><span id="line-192">   * @param cacheKey the cache key of the blocks.</span>
+<span class="source-line-no">193</span><span id="line-193">   * @return comparison of the existing block to the newBlock.</span>
+<span class="source-line-no">194</span><span id="line-194">   */</span>
+<span class="source-line-no">195</span><span id="line-195">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
+<span class="source-line-no">196</span><span id="line-196">    BlockCacheKey cacheKey) {</span>
+<span class="source-line-no">197</span><span id="line-197">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
+<span class="source-line-no">198</span><span id="line-198">    if (comparison != 0) {</span>
+<span class="source-line-no">199</span><span id="line-199">      throw new RuntimeException(</span>
+<span class="source-line-no">200</span><span id="line-200">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
+<span class="source-line-no">201</span><span id="line-201">    }</span>
+<span class="source-line-no">202</span><span id="line-202">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
+<span class="source-line-no">203</span><span id="line-203">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
+<span class="source-line-no">204</span><span id="line-204">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
+<span class="source-line-no">205</span><span id="line-205">    }</span>
+<span class="source-line-no">206</span><span id="line-206">    return comparison;</span>
+<span class="source-line-no">207</span><span id="line-207">  }</span>
+<span class="source-line-no">208</span><span id="line-208"></span>
+<span class="source-line-no">209</span><span id="line-209">  /**</span>
+<span class="source-line-no">210</span><span id="line-210">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
+<span class="source-line-no">211</span><span id="line-211">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
+<span class="source-line-no">212</span><span id="line-212">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
+<span class="source-line-no">213</span><span id="line-213">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
+<span class="source-line-no">214</span><span id="line-214">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
+<span class="source-line-no">215</span><span id="line-215">   * new block to cache has, then we can replace the existing block with the new block for better</span>
+<span class="source-line-no">216</span><span id="line-216">   * performance.(HBASE-20447)</span>
+<span class="source-line-no">217</span><span id="line-217">   * @param blockCache BlockCache to check</span>
+<span class="source-line-no">218</span><span id="line-218">   * @param cacheKey   the block cache key</span>
+<span class="source-line-no">219</span><span id="line-219">   * @param newBlock   the new block which try to put into the block cache.</span>
+<span class="source-line-no">220</span><span id="line-220">   * @return true means need to replace existing block with new block for the same block cache key.</span>
+<span class="source-line-no">221</span><span id="line-221">   *         false means just keep the existing block.</span>
+<span class="source-line-no">222</span><span id="line-222">   */</span>
+<span class="source-line-no">223</span><span id="line-223">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
+<span class="source-line-no">224</span><span id="line-224">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
+<span class="source-line-no">225</span><span id="line-225">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
+<span class="source-line-no">226</span><span id="line-226">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
+<span class="source-line-no">227</span><span id="line-227">    if (existingBlock == null) {</span>
+<span class="source-line-no">228</span><span id="line-228">      return true;</span>
+<span class="source-line-no">229</span><span id="line-229">    }</span>
+<span class="source-line-no">230</span><span id="line-230">    try {</span>
+<span class="source-line-no">231</span><span id="line-231">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
+<span class="source-line-no">232</span><span id="line-232">      if (comparison &lt; 0) {</span>
+<span class="source-line-no">233</span><span id="line-233">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
+<span class="source-line-no">234</span><span id="line-234">          + "nextBlockOnDiskSize set. Caching new block.");</span>
+<span class="source-line-no">235</span><span id="line-235">        return true;</span>
+<span class="source-line-no">236</span><span id="line-236">      } else if (comparison &gt; 0) {</span>
+<span class="source-line-no">237</span><span id="line-237">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
+<span class="source-line-no">238</span><span id="line-238">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
+<span class="source-line-no">239</span><span id="line-239">        return false;</span>
+<span class="source-line-no">240</span><span id="line-240">      } else {</span>
+<span class="source-line-no">241</span><span id="line-241">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
+<span class="source-line-no">242</span><span id="line-242">          + "cases (see HBASE-8547)", cacheKey);</span>
+<span class="source-line-no">243</span><span id="line-243">        return false;</span>
+<span class="source-line-no">244</span><span id="line-244">      }</span>
+<span class="source-line-no">245</span><span id="line-245">    } finally {</span>
+<span class="source-line-no">246</span><span id="line-246">      // Release this block to decrement the reference count.</span>
+<span class="source-line-no">247</span><span id="line-247">      existingBlock.release();</span>
+<span class="source-line-no">248</span><span id="line-248">    }</span>
+<span class="source-line-no">249</span><span id="line-249">  }</span>
+<span class="source-line-no">250</span><span id="line-250"></span>
+<span class="source-line-no">251</span><span id="line-251">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
+<span class="source-line-no">252</span><span id="line-252">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
+<span class="source-line-no">253</span><span id="line-253">    onlineRegions.values().forEach(r -&gt; {</span>
+<span class="source-line-no">254</span><span id="line-254">      r.getStores().forEach(s -&gt; {</span>
+<span class="source-line-no">255</span><span id="line-255">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
+<span class="source-line-no">256</span><span id="line-256">      });</span>
+<span class="source-line-no">257</span><span id="line-257">    });</span>
+<span class="source-line-no">258</span><span id="line-258">    return files;</span>
+<span class="source-line-no">259</span><span id="line-259">  }</span>
 <span class="source-line-no">260</span><span id="line-260"></span>
-<span class="source-line-no">261</span><span id="line-261">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
-<span class="source-line-no">262</span><span id="line-262">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
-<span class="source-line-no">263</span><span id="line-263">  }</span>
-<span class="source-line-no">264</span><span id="line-264"></span>
-<span class="source-line-no">265</span><span id="line-265">  /**</span>
-<span class="source-line-no">266</span><span id="line-266">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
-<span class="source-line-no">267</span><span id="line-267">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
-<span class="source-line-no">268</span><span id="line-268">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
-<span class="source-line-no">269</span><span id="line-269">   * may already have been cached at write time.</span>
-<span class="source-line-no">270</span><span id="line-270">   * @param cacheConf the related CacheConfig object.</span>
-<span class="source-line-no">271</span><span id="line-271">   * @param block     the HFileBlock instance to be converted.</span>
-<span class="source-line-no">272</span><span id="line-272">   * @return the resulting HFileBlock instance without checksum.</span>
-<span class="source-line-no">273</span><span id="line-273">   */</span>
-<span class="source-line-no">274</span><span id="line-274">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
-<span class="source-line-no">275</span><span id="line-275">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
-<span class="source-line-no">276</span><span id="line-276">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
-<span class="source-line-no">277</span><span id="line-277">      ? 0</span>
-<span class="source-line-no">278</span><span id="line-278">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
-<span class="source-line-no">279</span><span id="line-279">        block.getHFileContext().getBytesPerChecksum());</span>
-<span class="source-line-no">280</span><span id="line-280">    ByteBuff buff = block.getBufferReadOnly();</span>
-<span class="source-line-no">281</span><span id="line-281">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
-<span class="source-line-no">282</span><span id="line-282">    return builder.withBlockType(block.getBlockType())</span>
-<span class="source-line-no">283</span><span id="line-283">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
-<span class="source-line-no">284</span><span id="line-284">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
-<span class="source-line-no">285</span><span id="line-285">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
-<span class="source-line-no">286</span><span id="line-286">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
-<span class="source-line-no">287</span><span id="line-287">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
-<span class="source-line-no">288</span><span id="line-288">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
-<span class="source-line-no">289</span><span id="line-289">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
-<span class="source-line-no">290</span><span id="line-290">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
-<span class="source-line-no">291</span><span id="line-291">  }</span>
-<span class="source-line-no">292</span><span id="line-292"></span>
-<span class="source-line-no">293</span><span id="line-293">  public static HFileContext cloneContext(HFileContext context) {</span>
-<span class="source-line-no">294</span><span id="line-294">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
-<span class="source-line-no">295</span><span id="line-295">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
-<span class="source-line-no">296</span><span id="line-296">      .withCompression(context.getCompression())</span>
-<span class="source-line-no">297</span><span id="line-297">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
-<span class="source-line-no">298</span><span id="line-298">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
-<span class="source-line-no">299</span><span id="line-299">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
-<span class="source-line-no">300</span><span id="line-300">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
-<span class="source-line-no">301</span><span id="line-301">    return newContext;</span>
-<span class="source-line-no">302</span><span id="line-302">  }</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304">  /**</span>
-<span class="source-line-no">305</span><span id="line-305">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
-<span class="source-line-no">306</span><span id="line-306">   * This is different than metrics in that it is stats on current state of a cache. See</span>
-<span class="source-line-no">307</span><span id="line-307">   * getLoadedCachedBlocksByFile</span>
-<span class="source-line-no">308</span><span id="line-308">   */</span>
-<span class="source-line-no">309</span><span id="line-309">  public static class CachedBlocksByFile {</span>
-<span class="source-line-no">310</span><span id="line-310">    private int count;</span>
-<span class="source-line-no">311</span><span id="line-311">    private int dataBlockCount;</span>
-<span class="source-line-no">312</span><span id="line-312">    private long size;</span>
-<span class="source-line-no">313</span><span id="line-313">    private long dataSize;</span>
-<span class="source-line-no">314</span><span id="line-314">    private final long now = System.nanoTime();</span>
-<span class="source-line-no">315</span><span id="line-315">    /**</span>
-<span class="source-line-no">316</span><span id="line-316">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
-<span class="source-line-no">317</span><span id="line-317">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
-<span class="source-line-no">318</span><span id="line-318">     * displays warning in red when stats are incomplete.</span>
-<span class="source-line-no">319</span><span id="line-319">     */</span>
-<span class="source-line-no">320</span><span id="line-320">    private final int max;</span>
-<span class="source-line-no">321</span><span id="line-321"></span>
-<span class="source-line-no">322</span><span id="line-322">    CachedBlocksByFile() {</span>
-<span class="source-line-no">323</span><span id="line-323">      this(null);</span>
-<span class="source-line-no">324</span><span id="line-324">    }</span>
-<span class="source-line-no">325</span><span id="line-325"></span>
-<span class="source-line-no">326</span><span id="line-326">    CachedBlocksByFile(final Configuration c) {</span>
-<span class="source-line-no">327</span><span id="line-327">      this.max = getMaxCachedBlocksByFile(c);</span>
-<span class="source-line-no">328</span><span id="line-328">    }</span>
-<span class="source-line-no">329</span><span id="line-329"></span>
-<span class="source-line-no">330</span><span id="line-330">    /**</span>
-<span class="source-line-no">331</span><span id="line-331">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
-<span class="source-line-no">332</span><span id="line-332">     */</span>
-<span class="source-line-no">333</span><span id="line-333">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
-<span class="source-line-no">334</span><span id="line-334">      new ConcurrentSkipListMap&lt;&gt;();</span>
-<span class="source-line-no">335</span><span id="line-335">    FastLongHistogram hist = new FastLongHistogram();</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337">    /** Returns True if full.... if we won't be adding any more. */</span>
-<span class="source-line-no">338</span><span id="line-338">    public boolean update(final CachedBlock cb) {</span>
-<span class="source-line-no">339</span><span id="line-339">      if (isFull()) return true;</span>
-<span class="source-line-no">340</span><span id="line-340">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
-<span class="source-line-no">341</span><span id="line-341">      if (set == null) {</span>
-<span class="source-line-no">342</span><span id="line-342">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
-<span class="source-line-no">343</span><span id="line-343">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
-<span class="source-line-no">344</span><span id="line-344">      }</span>
-<span class="source-line-no">345</span><span id="line-345">      set.add(cb);</span>
-<span class="source-line-no">346</span><span id="line-346">      this.size += cb.getSize();</span>
-<span class="source-line-no">347</span><span id="line-347">      this.count++;</span>
-<span class="source-line-no">348</span><span id="line-348">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">349</span><span id="line-349">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">350</span><span id="line-350">        this.dataBlockCount++;</span>
-<span class="source-line-no">351</span><span id="line-351">        this.dataSize += cb.getSize();</span>
-<span class="source-line-no">352</span><span id="line-352">      }</span>
-<span class="source-line-no">353</span><span id="line-353">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
-<span class="source-line-no">354</span><span id="line-354">      this.hist.add(age, 1);</span>
-<span class="source-line-no">355</span><span id="line-355">      return false;</span>
-<span class="source-line-no">356</span><span id="line-356">    }</span>
-<span class="source-line-no">357</span><span id="line-357"></span>
-<span class="source-line-no">358</span><span id="line-358">    /**</span>
-<span class="source-line-no">359</span><span id="line-359">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
-<span class="source-line-no">360</span><span id="line-360">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
-<span class="source-line-no">361</span><span id="line-361">     *         DEFAULT_MAX).</span>
-<span class="source-line-no">362</span><span id="line-362">     */</span>
-<span class="source-line-no">363</span><span id="line-363">    public boolean isFull() {</span>
-<span class="source-line-no">364</span><span id="line-364">      return this.count &gt;= this.max;</span>
-<span class="source-line-no">365</span><span id="line-365">    }</span>
-<span class="source-line-no">366</span><span id="line-366"></span>
-<span class="source-line-no">367</span><span id="line-367">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
-<span class="source-line-no">368</span><span id="line-368">      return this.cachedBlockByFile;</span>
-<span class="source-line-no">369</span><span id="line-369">    }</span>
-<span class="source-line-no">370</span><span id="line-370"></span>
-<span class="source-line-no">371</span><span id="line-371">    /** Returns count of blocks in the cache */</span>
-<span class="source-line-no">372</span><span id="line-372">    public int getCount() {</span>
-<span class="source-line-no">373</span><span id="line-373">      return count;</span>
-<span class="source-line-no">374</span><span id="line-374">    }</span>
-<span class="source-line-no">375</span><span id="line-375"></span>
-<span class="source-line-no">376</span><span id="line-376">    public int getDataCount() {</span>
-<span class="source-line-no">377</span><span id="line-377">      return dataBlockCount;</span>
-<span class="source-line-no">378</span><span id="line-378">    }</span>
-<span class="source-line-no">379</span><span id="line-379"></span>
-<span class="source-line-no">380</span><span id="line-380">    /** Returns size of blocks in the cache */</span>
-<span class="source-line-no">381</span><span id="line-381">    public long getSize() {</span>
-<span class="source-line-no">382</span><span id="line-382">      return size;</span>
-<span class="source-line-no">383</span><span id="line-383">    }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">    /** Returns Size of data. */</span>
-<span class="source-line-no">386</span><span id="line-386">    public long getDataSize() {</span>
-<span class="source-line-no">387</span><span id="line-387">      return dataSize;</span>
-<span class="source-line-no">388</span><span id="line-388">    }</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
-<span class="source-line-no">391</span><span id="line-391">      return new AgeSnapshot(this.hist);</span>
-<span class="source-line-no">392</span><span id="line-392">    }</span>
-<span class="source-line-no">393</span><span id="line-393"></span>
-<span class="source-line-no">394</span><span id="line-394">    @Override</span>
-<span class="source-line-no">395</span><span id="line-395">    public String toString() {</span>
-<span class="source-line-no">396</span><span id="line-396">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
-<span class="source-line-no">397</span><span id="line-397">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
-<span class="source-line-no">398</span><span id="line-398">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
-<span class="source-line-no">399</span><span id="line-399">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
-<span class="source-line-no">400</span><span id="line-400">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
-<span class="source-line-no">401</span><span id="line-401">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
-<span class="source-line-no">402</span><span id="line-402">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
-<span class="source-line-no">403</span><span id="line-403">    }</span>
-<span class="source-line-no">404</span><span id="line-404">  }</span>
-<span class="source-line-no">405</span><span id="line-405">}</span>
+<span class="source-line-no">261</span><span id="line-261">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">262</span><span id="line-262"></span>
+<span class="source-line-no">263</span><span id="line-263">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
+<span class="source-line-no">264</span><span id="line-264">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
+<span class="source-line-no">265</span><span id="line-265">  }</span>
+<span class="source-line-no">266</span><span id="line-266"></span>
+<span class="source-line-no">267</span><span id="line-267">  /**</span>
+<span class="source-line-no">268</span><span id="line-268">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
+<span class="source-line-no">269</span><span id="line-269">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
+<span class="source-line-no">270</span><span id="line-270">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
+<span class="source-line-no">271</span><span id="line-271">   * may already have been cached at write time.</span>
+<span class="source-line-no">272</span><span id="line-272">   * @param cacheConf the related CacheConfig object.</span>
+<span class="source-line-no">273</span><span id="line-273">   * @param block     the HFileBlock instance to be converted.</span>
+<span class="source-line-no">274</span><span id="line-274">   * @return the resulting HFileBlock instance without checksum.</span>
+<span class="source-line-no">275</span><span id="line-275">   */</span>
+<span class="source-line-no">276</span><span id="line-276">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
+<span class="source-line-no">277</span><span id="line-277">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
+<span class="source-line-no">278</span><span id="line-278">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
+<span class="source-line-no">279</span><span id="line-279">      ? 0</span>
+<span class="source-line-no">280</span><span id="line-280">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
+<span class="source-line-no">281</span><span id="line-281">        block.getHFileContext().getBytesPerChecksum());</span>
+<span class="source-line-no">282</span><span id="line-282">    ByteBuff buff = block.getBufferReadOnly();</span>
+<span class="source-line-no">283</span><span id="line-283">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
+<span class="source-line-no">284</span><span id="line-284">    return builder.withBlockType(block.getBlockType())</span>
+<span class="source-line-no">285</span><span id="line-285">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
+<span class="source-line-no">286</span><span id="line-286">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
+<span class="source-line-no">287</span><span id="line-287">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
+<span class="source-line-no">288</span><span id="line-288">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
+<span class="source-line-no">289</span><span id="line-289">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
+<span class="source-line-no">290</span><span id="line-290">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
+<span class="source-line-no">291</span><span id="line-291">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
+<span class="source-line-no">292</span><span id="line-292">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
+<span class="source-line-no">293</span><span id="line-293">  }</span>
+<span class="source-line-no">294</span><span id="line-294"></span>
+<span class="source-line-no">295</span><span id="line-295">  public static HFileContext cloneContext(HFileContext context) {</span>
+<span class="source-line-no">296</span><span id="line-296">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
+<span class="source-line-no">297</span><span id="line-297">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
+<span class="source-line-no">298</span><span id="line-298">      .withCompression(context.getCompression())</span>
+<span class="source-line-no">299</span><span id="line-299">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
+<span class="source-line-no">300</span><span id="line-300">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
+<span class="source-line-no">301</span><span id="line-301">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
+<span class="source-line-no">302</span><span id="line-302">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
+<span class="source-line-no">303</span><span id="line-303">    return newContext;</span>
+<span class="source-line-no">304</span><span id="line-304">  }</span>
+<span class="source-line-no">305</span><span id="line-305"></span>
+<span class="source-line-no">306</span><span id="line-306">  /**</span>
+<span class="source-line-no">307</span><span id="line-307">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
+<span class="source-line-no">308</span><span id="line-308">   * This is different than metrics in that it is stats on current state of a cache. See</span>
+<span class="source-line-no">309</span><span id="line-309">   * getLoadedCachedBlocksByFile</span>
+<span class="source-line-no">310</span><span id="line-310">   */</span>
+<span class="source-line-no">311</span><span id="line-311">  public static class CachedBlocksByFile {</span>
+<span class="source-line-no">312</span><span id="line-312">    private int count;</span>
+<span class="source-line-no">313</span><span id="line-313">    private int dataBlockCount;</span>
+<span class="source-line-no">314</span><span id="line-314">    private long size;</span>
+<span class="source-line-no">315</span><span id="line-315">    private long dataSize;</span>
+<span class="source-line-no">316</span><span id="line-316">    private final long now = System.nanoTime();</span>
+<span class="source-line-no">317</span><span id="line-317">    /**</span>
+<span class="source-line-no">318</span><span id="line-318">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
+<span class="source-line-no">319</span><span id="line-319">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
+<span class="source-line-no">320</span><span id="line-320">     * displays warning in red when stats are incomplete.</span>
+<span class="source-line-no">321</span><span id="line-321">     */</span>
+<span class="source-line-no">322</span><span id="line-322">    private final int max;</span>
+<span class="source-line-no">323</span><span id="line-323"></span>
+<span class="source-line-no">324</span><span id="line-324">    CachedBlocksByFile() {</span>
+<span class="source-line-no">325</span><span id="line-325">      this(null);</span>
+<span class="source-line-no">326</span><span id="line-326">    }</span>
+<span class="source-line-no">327</span><span id="line-327"></span>
+<span class="source-line-no">328</span><span id="line-328">    CachedBlocksByFile(final Configuration c) {</span>
+<span class="source-line-no">329</span><span id="line-329">      this.max = getMaxCachedBlocksByFile(c);</span>
+<span class="source-line-no">330</span><span id="line-330">    }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332">    /**</span>
+<span class="source-line-no">333</span><span id="line-333">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
+<span class="source-line-no">334</span><span id="line-334">     */</span>
+<span class="source-line-no">335</span><span id="line-335">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
+<span class="source-line-no">336</span><span id="line-336">      new ConcurrentSkipListMap&lt;&gt;();</span>
+<span class="source-line-no">337</span><span id="line-337">    FastLongHistogram hist = new FastLongHistogram();</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339">    /** Returns True if full.... if we won't be adding any more. */</span>
+<span class="source-line-no">340</span><span id="line-340">    public boolean update(final CachedBlock cb) {</span>
+<span class="source-line-no">341</span><span id="line-341">      if (isFull()) return true;</span>
+<span class="source-line-no">342</span><span id="line-342">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
+<span class="source-line-no">343</span><span id="line-343">      if (set == null) {</span>
+<span class="source-line-no">344</span><span id="line-344">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
+<span class="source-line-no">345</span><span id="line-345">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
+<span class="source-line-no">346</span><span id="line-346">      }</span>
+<span class="source-line-no">347</span><span id="line-347">      set.add(cb);</span>
+<span class="source-line-no">348</span><span id="line-348">      this.size += cb.getSize();</span>
+<span class="source-line-no">349</span><span id="line-349">      this.count++;</span>
+<span class="source-line-no">350</span><span id="line-350">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">351</span><span id="line-351">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">352</span><span id="line-352">        this.dataBlockCount++;</span>
+<span class="source-line-no">353</span><span id="line-353">        this.dataSize += cb.getSize();</span>
+<span class="source-line-no">354</span><span id="line-354">      }</span>
+<span class="source-line-no">355</span><span id="line-355">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
+<span class="source-line-no">356</span><span id="line-356">      this.hist.add(age, 1);</span>
+<span class="source-line-no">357</span><span id="line-357">      return false;</span>
+<span class="source-line-no">358</span><span id="line-358">    }</span>
+<span class="source-line-no">359</span><span id="line-359"></span>
+<span class="source-line-no">360</span><span id="line-360">    /**</span>
+<span class="source-line-no">361</span><span id="line-361">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
+<span class="source-line-no">362</span><span id="line-362">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
+<span class="source-line-no">363</span><span id="line-363">     *         DEFAULT_MAX).</span>
+<span class="source-line-no">364</span><span id="line-364">     */</span>
+<span class="source-line-no">365</span><span id="line-365">    public boolean isFull() {</span>
+<span class="source-line-no">366</span><span id="line-366">      return this.count &gt;= this.max;</span>
+<span class="source-line-no">367</span><span id="line-367">    }</span>
+<span class="source-line-no">368</span><span id="line-368"></span>
+<span class="source-line-no">369</span><span id="line-369">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
+<span class="source-line-no">370</span><span id="line-370">      return this.cachedBlockByFile;</span>
+<span class="source-line-no">371</span><span id="line-371">    }</span>
+<span class="source-line-no">372</span><span id="line-372"></span>
+<span class="source-line-no">373</span><span id="line-373">    /** Returns count of blocks in the cache */</span>
+<span class="source-line-no">374</span><span id="line-374">    public int getCount() {</span>
+<span class="source-line-no">375</span><span id="line-375">      return count;</span>
+<span class="source-line-no">376</span><span id="line-376">    }</span>
+<span class="source-line-no">377</span><span id="line-377"></span>
+<span class="source-line-no">378</span><span id="line-378">    public int getDataCount() {</span>
+<span class="source-line-no">379</span><span id="line-379">      return dataBlockCount;</span>
+<span class="source-line-no">380</span><span id="line-380">    }</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382">    /** Returns size of blocks in the cache */</span>
+<span class="source-line-no">383</span><span id="line-383">    public long getSize() {</span>
+<span class="source-line-no">384</span><span id="line-384">      return size;</span>
+<span class="source-line-no">385</span><span id="line-385">    }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">    /** Returns Size of data. */</span>
+<span class="source-line-no">388</span><span id="line-388">    public long getDataSize() {</span>
+<span class="source-line-no">389</span><span id="line-389">      return dataSize;</span>
+<span class="source-line-no">390</span><span id="line-390">    }</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
+<span class="source-line-no">393</span><span id="line-393">      return new AgeSnapshot(this.hist);</span>
+<span class="source-line-no">394</span><span id="line-394">    }</span>
+<span class="source-line-no">395</span><span id="line-395"></span>
+<span class="source-line-no">396</span><span id="line-396">    @Override</span>
+<span class="source-line-no">397</span><span id="line-397">    public String toString() {</span>
+<span class="source-line-no">398</span><span id="line-398">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
+<span class="source-line-no">399</span><span id="line-399">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
+<span class="source-line-no">400</span><span id="line-400">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
+<span class="source-line-no">401</span><span id="line-401">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
+<span class="source-line-no">402</span><span id="line-402">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
+<span class="source-line-no">403</span><span id="line-403">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
+<span class="source-line-no">404</span><span id="line-404">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
+<span class="source-line-no">405</span><span id="line-405">    }</span>
+<span class="source-line-no">406</span><span id="line-406">  }</span>
+<span class="source-line-no">407</span><span id="line-407">}</span>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
index e608edb663f..8b998b6bada 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlocksByFile.html
@@ -33,389 +33,391 @@
 <span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.io.hfile.HFileBlock.FILL_HEADER;</span>
 <span class="source-line-no">021</span><span id="line-21"></span>
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
-<span class="source-line-no">023</span><span id="line-23">import java.nio.ByteBuffer;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.util.HashSet;</span>
-<span class="source-line-no">025</span><span id="line-25">import java.util.Map;</span>
-<span class="source-line-no">026</span><span id="line-26">import java.util.NavigableMap;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableSet;</span>
-<span class="source-line-no">028</span><span id="line-28">import java.util.Set;</span>
-<span class="source-line-no">029</span><span id="line-29">import java.util.concurrent.ConcurrentSkipListMap;</span>
-<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListSet;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.ChecksumType;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.GsonUtil;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.slf4j.Logger;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47">/**</span>
-<span class="source-line-no">048</span><span id="line-48"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
-<span class="source-line-no">049</span><span id="line-49"> * No attempt has been made at making this thread safe.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51">@InterfaceAudience.Private</span>
-<span class="source-line-no">052</span><span id="line-52">public class BlockCacheUtil {</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">  public static final long NANOS_PER_SECOND = 1000000000;</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58">  /**</span>
-<span class="source-line-no">059</span><span id="line-59">   * Needed generating JSON.</span>
-<span class="source-line-no">060</span><span id="line-60">   */</span>
-<span class="source-line-no">061</span><span id="line-61">  private static final Gson GSON = GsonUtil.createGson()</span>
-<span class="source-line-no">062</span><span id="line-62">    .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64">      @Override</span>
-<span class="source-line-no">065</span><span id="line-65">      public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
-<span class="source-line-no">066</span><span id="line-66">        AgeSnapshot snapshot = new AgeSnapshot(value);</span>
-<span class="source-line-no">067</span><span id="line-67">        out.beginObject();</span>
-<span class="source-line-no">068</span><span id="line-68">        out.name("mean").value(snapshot.getMean());</span>
-<span class="source-line-no">069</span><span id="line-69">        out.name("min").value(snapshot.getMin());</span>
-<span class="source-line-no">070</span><span id="line-70">        out.name("max").value(snapshot.getMax());</span>
-<span class="source-line-no">071</span><span id="line-71">        out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
-<span class="source-line-no">072</span><span id="line-72">        out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
-<span class="source-line-no">073</span><span id="line-73">        out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
-<span class="source-line-no">074</span><span id="line-74">        out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
-<span class="source-line-no">075</span><span id="line-75">        out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
-<span class="source-line-no">076</span><span id="line-76">        out.endObject();</span>
-<span class="source-line-no">077</span><span id="line-77">      }</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79">      @Override</span>
-<span class="source-line-no">080</span><span id="line-80">      public FastLongHistogram read(JsonReader in) throws IOException {</span>
-<span class="source-line-no">081</span><span id="line-81">        throw new UnsupportedOperationException();</span>
-<span class="source-line-no">082</span><span id="line-82">      }</span>
-<span class="source-line-no">083</span><span id="line-83">    }).setPrettyPrinting().create();</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85">  /** Returns The block content as String. */</span>
-<span class="source-line-no">086</span><span id="line-86">  public static String toString(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">087</span><span id="line-87">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
-<span class="source-line-no">088</span><span id="line-88">  }</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90">  /**</span>
-<span class="source-line-no">091</span><span id="line-91">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
-<span class="source-line-no">092</span><span id="line-92">   */</span>
-<span class="source-line-no">093</span><span id="line-93">  static class CachedBlockCountsPerFile {</span>
-<span class="source-line-no">094</span><span id="line-94">    private int count = 0;</span>
-<span class="source-line-no">095</span><span id="line-95">    private long size = 0;</span>
-<span class="source-line-no">096</span><span id="line-96">    private int countData = 0;</span>
-<span class="source-line-no">097</span><span id="line-97">    private long sizeData = 0;</span>
-<span class="source-line-no">098</span><span id="line-98">    private final String filename;</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100">    CachedBlockCountsPerFile(final String filename) {</span>
-<span class="source-line-no">101</span><span id="line-101">      this.filename = filename;</span>
-<span class="source-line-no">102</span><span id="line-102">    }</span>
-<span class="source-line-no">103</span><span id="line-103"></span>
-<span class="source-line-no">104</span><span id="line-104">    public int getCount() {</span>
-<span class="source-line-no">105</span><span id="line-105">      return count;</span>
-<span class="source-line-no">106</span><span id="line-106">    }</span>
-<span class="source-line-no">107</span><span id="line-107"></span>
-<span class="source-line-no">108</span><span id="line-108">    public long getSize() {</span>
-<span class="source-line-no">109</span><span id="line-109">      return size;</span>
-<span class="source-line-no">110</span><span id="line-110">    }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112">    public int getCountData() {</span>
-<span class="source-line-no">113</span><span id="line-113">      return countData;</span>
-<span class="source-line-no">114</span><span id="line-114">    }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">    public long getSizeData() {</span>
-<span class="source-line-no">117</span><span id="line-117">      return sizeData;</span>
-<span class="source-line-no">118</span><span id="line-118">    }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">    public String getFilename() {</span>
-<span class="source-line-no">121</span><span id="line-121">      return filename;</span>
-<span class="source-line-no">122</span><span id="line-122">    }</span>
-<span class="source-line-no">123</span><span id="line-123">  }</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
-<span class="source-line-no">126</span><span id="line-126">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
-<span class="source-line-no">127</span><span id="line-127">    throws IOException {</span>
-<span class="source-line-no">128</span><span id="line-128">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
-<span class="source-line-no">129</span><span id="line-129">    for (CachedBlock cb : blocks) {</span>
-<span class="source-line-no">130</span><span id="line-130">      counts.count++;</span>
-<span class="source-line-no">131</span><span id="line-131">      counts.size += cb.getSize();</span>
-<span class="source-line-no">132</span><span id="line-132">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">133</span><span id="line-133">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">134</span><span id="line-134">        counts.countData++;</span>
-<span class="source-line-no">135</span><span id="line-135">        counts.sizeData += cb.getSize();</span>
-<span class="source-line-no">136</span><span id="line-136">      }</span>
-<span class="source-line-no">137</span><span id="line-137">    }</span>
-<span class="source-line-no">138</span><span id="line-138">    return GSON.toJson(counts);</span>
-<span class="source-line-no">139</span><span id="line-139">  }</span>
-<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
-<span class="source-line-no">142</span><span id="line-142">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
-<span class="source-line-no">143</span><span id="line-143">    return GSON.toJson(cbsbf);</span>
-<span class="source-line-no">144</span><span id="line-144">  }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
-<span class="source-line-no">147</span><span id="line-147">  public static String toJSON(BlockCache bc) throws IOException {</span>
-<span class="source-line-no">148</span><span id="line-148">    return GSON.toJson(bc);</span>
-<span class="source-line-no">149</span><span id="line-149">  }</span>
-<span class="source-line-no">150</span><span id="line-150"></span>
-<span class="source-line-no">151</span><span id="line-151">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
-<span class="source-line-no">152</span><span id="line-152">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">153</span><span id="line-153">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
-<span class="source-line-no">154</span><span id="line-154">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
-<span class="source-line-no">155</span><span id="line-155">      + cb.getBlockPriority();</span>
-<span class="source-line-no">156</span><span id="line-156">  }</span>
-<span class="source-line-no">157</span><span id="line-157"></span>
-<span class="source-line-no">158</span><span id="line-158">  /**</span>
-<span class="source-line-no">159</span><span id="line-159">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
-<span class="source-line-no">160</span><span id="line-160">   * {@link BlockCache}.</span>
-<span class="source-line-no">161</span><span id="line-161">   * @param conf Used to read configurations</span>
-<span class="source-line-no">162</span><span id="line-162">   * @param bc   Block Cache to iterate.</span>
-<span class="source-line-no">163</span><span id="line-163">   * @return Laoded up instance of CachedBlocksByFile</span>
-<span class="source-line-no">164</span><span id="line-164">   */</span>
-<span class="source-line-no">165</span><span id="line-165">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
-<span class="source-line-no">166</span><span id="line-166">    final BlockCache bc) {</span>
-<span class="source-line-no">167</span><span id="line-167">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
-<span class="source-line-no">168</span><span id="line-168">    for (CachedBlock cb : bc) {</span>
-<span class="source-line-no">169</span><span id="line-169">      if (cbsbf.update(cb)) break;</span>
-<span class="source-line-no">170</span><span id="line-170">    }</span>
-<span class="source-line-no">171</span><span id="line-171">    return cbsbf;</span>
-<span class="source-line-no">172</span><span id="line-172">  }</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
-<span class="source-line-no">175</span><span id="line-175">    boolean includeNextBlockMetadata) {</span>
-<span class="source-line-no">176</span><span id="line-176">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
-<span class="source-line-no">177</span><span id="line-177">    left.serialize(l, includeNextBlockMetadata);</span>
-<span class="source-line-no">178</span><span id="line-178">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
-<span class="source-line-no">179</span><span id="line-179">    right.serialize(r, includeNextBlockMetadata);</span>
-<span class="source-line-no">180</span><span id="line-180">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
-<span class="source-line-no">181</span><span id="line-181">      r.limit());</span>
-<span class="source-line-no">182</span><span id="line-182">  }</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">  /**</span>
-<span class="source-line-no">185</span><span id="line-185">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
-<span class="source-line-no">186</span><span id="line-186">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
-<span class="source-line-no">187</span><span id="line-187">   * comparison.</span>
-<span class="source-line-no">188</span><span id="line-188">   * @param existing block that is existing in the cache.</span>
-<span class="source-line-no">189</span><span id="line-189">   * @param newBlock block that is trying to be cached.</span>
-<span class="source-line-no">190</span><span id="line-190">   * @param cacheKey the cache key of the blocks.</span>
-<span class="source-line-no">191</span><span id="line-191">   * @return comparison of the existing block to the newBlock.</span>
-<span class="source-line-no">192</span><span id="line-192">   */</span>
-<span class="source-line-no">193</span><span id="line-193">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
-<span class="source-line-no">194</span><span id="line-194">    BlockCacheKey cacheKey) {</span>
-<span class="source-line-no">195</span><span id="line-195">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
-<span class="source-line-no">196</span><span id="line-196">    if (comparison != 0) {</span>
-<span class="source-line-no">197</span><span id="line-197">      throw new RuntimeException(</span>
-<span class="source-line-no">198</span><span id="line-198">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
-<span class="source-line-no">199</span><span id="line-199">    }</span>
-<span class="source-line-no">200</span><span id="line-200">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
-<span class="source-line-no">201</span><span id="line-201">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
-<span class="source-line-no">202</span><span id="line-202">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
-<span class="source-line-no">203</span><span id="line-203">    }</span>
-<span class="source-line-no">204</span><span id="line-204">    return comparison;</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206"></span>
-<span class="source-line-no">207</span><span id="line-207">  /**</span>
-<span class="source-line-no">208</span><span id="line-208">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
-<span class="source-line-no">209</span><span id="line-209">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
-<span class="source-line-no">210</span><span id="line-210">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
-<span class="source-line-no">211</span><span id="line-211">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
-<span class="source-line-no">212</span><span id="line-212">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
-<span class="source-line-no">213</span><span id="line-213">   * new block to cache has, then we can replace the existing block with the new block for better</span>
-<span class="source-line-no">214</span><span id="line-214">   * performance.(HBASE-20447)</span>
-<span class="source-line-no">215</span><span id="line-215">   * @param blockCache BlockCache to check</span>
-<span class="source-line-no">216</span><span id="line-216">   * @param cacheKey   the block cache key</span>
-<span class="source-line-no">217</span><span id="line-217">   * @param newBlock   the new block which try to put into the block cache.</span>
-<span class="source-line-no">218</span><span id="line-218">   * @return true means need to replace existing block with new block for the same block cache key.</span>
-<span class="source-line-no">219</span><span id="line-219">   *         false means just keep the existing block.</span>
-<span class="source-line-no">220</span><span id="line-220">   */</span>
-<span class="source-line-no">221</span><span id="line-221">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
-<span class="source-line-no">222</span><span id="line-222">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
-<span class="source-line-no">223</span><span id="line-223">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
-<span class="source-line-no">224</span><span id="line-224">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
-<span class="source-line-no">225</span><span id="line-225">    if (existingBlock == null) {</span>
-<span class="source-line-no">226</span><span id="line-226">      return true;</span>
-<span class="source-line-no">227</span><span id="line-227">    }</span>
-<span class="source-line-no">228</span><span id="line-228">    try {</span>
-<span class="source-line-no">229</span><span id="line-229">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
-<span class="source-line-no">230</span><span id="line-230">      if (comparison &lt; 0) {</span>
-<span class="source-line-no">231</span><span id="line-231">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
-<span class="source-line-no">232</span><span id="line-232">          + "nextBlockOnDiskSize set. Caching new block.");</span>
-<span class="source-line-no">233</span><span id="line-233">        return true;</span>
-<span class="source-line-no">234</span><span id="line-234">      } else if (comparison &gt; 0) {</span>
-<span class="source-line-no">235</span><span id="line-235">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
-<span class="source-line-no">236</span><span id="line-236">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
-<span class="source-line-no">237</span><span id="line-237">        return false;</span>
-<span class="source-line-no">238</span><span id="line-238">      } else {</span>
-<span class="source-line-no">239</span><span id="line-239">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
-<span class="source-line-no">240</span><span id="line-240">          + "cases (see HBASE-8547)", cacheKey);</span>
-<span class="source-line-no">241</span><span id="line-241">        return false;</span>
-<span class="source-line-no">242</span><span id="line-242">      }</span>
-<span class="source-line-no">243</span><span id="line-243">    } finally {</span>
-<span class="source-line-no">244</span><span id="line-244">      // Release this block to decrement the reference count.</span>
-<span class="source-line-no">245</span><span id="line-245">      existingBlock.release();</span>
-<span class="source-line-no">246</span><span id="line-246">    }</span>
-<span class="source-line-no">247</span><span id="line-247">  }</span>
-<span class="source-line-no">248</span><span id="line-248"></span>
-<span class="source-line-no">249</span><span id="line-249">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
-<span class="source-line-no">250</span><span id="line-250">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
-<span class="source-line-no">251</span><span id="line-251">    onlineRegions.values().forEach(r -&gt; {</span>
-<span class="source-line-no">252</span><span id="line-252">      r.getStores().forEach(s -&gt; {</span>
-<span class="source-line-no">253</span><span id="line-253">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
-<span class="source-line-no">254</span><span id="line-254">      });</span>
-<span class="source-line-no">255</span><span id="line-255">    });</span>
-<span class="source-line-no">256</span><span id="line-256">    return files;</span>
-<span class="source-line-no">257</span><span id="line-257">  }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.lang.reflect.Modifier;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.nio.ByteBuffer;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.util.HashSet;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.util.Map;</span>
+<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableMap;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.NavigableSet;</span>
+<span class="source-line-no">029</span><span id="line-29">import java.util.Set;</span>
+<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListMap;</span>
+<span class="source-line-no">031</span><span id="line-31">import java.util.concurrent.ConcurrentSkipListSet;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.ChecksumType;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.util.GsonUtil;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.slf4j.Logger;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
+<span class="source-line-no">050</span><span id="line-50"> * No attempt has been made at making this thread safe.</span>
+<span class="source-line-no">051</span><span id="line-51"> */</span>
+<span class="source-line-no">052</span><span id="line-52">@InterfaceAudience.Private</span>
+<span class="source-line-no">053</span><span id="line-53">public class BlockCacheUtil {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">  public static final long NANOS_PER_SECOND = 1000000000;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59">  /**</span>
+<span class="source-line-no">060</span><span id="line-60">   * Needed generating JSON.</span>
+<span class="source-line-no">061</span><span id="line-61">   */</span>
+<span class="source-line-no">062</span><span id="line-62">  private static final Gson GSON =</span>
+<span class="source-line-no">063</span><span id="line-63">    GsonUtil.createGson().excludeFieldsWithModifiers(Modifier.PRIVATE)</span>
+<span class="source-line-no">064</span><span id="line-64">      .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66">        @Override</span>
+<span class="source-line-no">067</span><span id="line-67">        public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
+<span class="source-line-no">068</span><span id="line-68">          AgeSnapshot snapshot = new AgeSnapshot(value);</span>
+<span class="source-line-no">069</span><span id="line-69">          out.beginObject();</span>
+<span class="source-line-no">070</span><span id="line-70">          out.name("mean").value(snapshot.getMean());</span>
+<span class="source-line-no">071</span><span id="line-71">          out.name("min").value(snapshot.getMin());</span>
+<span class="source-line-no">072</span><span id="line-72">          out.name("max").value(snapshot.getMax());</span>
+<span class="source-line-no">073</span><span id="line-73">          out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
+<span class="source-line-no">074</span><span id="line-74">          out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
+<span class="source-line-no">075</span><span id="line-75">          out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
+<span class="source-line-no">076</span><span id="line-76">          out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
+<span class="source-line-no">077</span><span id="line-77">          out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
+<span class="source-line-no">078</span><span id="line-78">          out.endObject();</span>
+<span class="source-line-no">079</span><span id="line-79">        }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81">        @Override</span>
+<span class="source-line-no">082</span><span id="line-82">        public FastLongHistogram read(JsonReader in) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83">          throw new UnsupportedOperationException();</span>
+<span class="source-line-no">084</span><span id="line-84">        }</span>
+<span class="source-line-no">085</span><span id="line-85">      }).setPrettyPrinting().create();</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87">  /** Returns The block content as String. */</span>
+<span class="source-line-no">088</span><span id="line-88">  public static String toString(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">089</span><span id="line-89">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
+<span class="source-line-no">090</span><span id="line-90">  }</span>
+<span class="source-line-no">091</span><span id="line-91"></span>
+<span class="source-line-no">092</span><span id="line-92">  /**</span>
+<span class="source-line-no">093</span><span id="line-93">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
+<span class="source-line-no">094</span><span id="line-94">   */</span>
+<span class="source-line-no">095</span><span id="line-95">  static class CachedBlockCountsPerFile {</span>
+<span class="source-line-no">096</span><span id="line-96">    private int count = 0;</span>
+<span class="source-line-no">097</span><span id="line-97">    private long size = 0;</span>
+<span class="source-line-no">098</span><span id="line-98">    private int countData = 0;</span>
+<span class="source-line-no">099</span><span id="line-99">    private long sizeData = 0;</span>
+<span class="source-line-no">100</span><span id="line-100">    private final String filename;</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102">    CachedBlockCountsPerFile(final String filename) {</span>
+<span class="source-line-no">103</span><span id="line-103">      this.filename = filename;</span>
+<span class="source-line-no">104</span><span id="line-104">    }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106">    public int getCount() {</span>
+<span class="source-line-no">107</span><span id="line-107">      return count;</span>
+<span class="source-line-no">108</span><span id="line-108">    }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">    public long getSize() {</span>
+<span class="source-line-no">111</span><span id="line-111">      return size;</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114">    public int getCountData() {</span>
+<span class="source-line-no">115</span><span id="line-115">      return countData;</span>
+<span class="source-line-no">116</span><span id="line-116">    }</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118">    public long getSizeData() {</span>
+<span class="source-line-no">119</span><span id="line-119">      return sizeData;</span>
+<span class="source-line-no">120</span><span id="line-120">    }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">    public String getFilename() {</span>
+<span class="source-line-no">123</span><span id="line-123">      return filename;</span>
+<span class="source-line-no">124</span><span id="line-124">    }</span>
+<span class="source-line-no">125</span><span id="line-125">  }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
+<span class="source-line-no">128</span><span id="line-128">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
+<span class="source-line-no">129</span><span id="line-129">    throws IOException {</span>
+<span class="source-line-no">130</span><span id="line-130">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
+<span class="source-line-no">131</span><span id="line-131">    for (CachedBlock cb : blocks) {</span>
+<span class="source-line-no">132</span><span id="line-132">      counts.count++;</span>
+<span class="source-line-no">133</span><span id="line-133">      counts.size += cb.getSize();</span>
+<span class="source-line-no">134</span><span id="line-134">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">135</span><span id="line-135">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">136</span><span id="line-136">        counts.countData++;</span>
+<span class="source-line-no">137</span><span id="line-137">        counts.sizeData += cb.getSize();</span>
+<span class="source-line-no">138</span><span id="line-138">      }</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140">    return GSON.toJson(counts);</span>
+<span class="source-line-no">141</span><span id="line-141">  }</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
+<span class="source-line-no">144</span><span id="line-144">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
+<span class="source-line-no">145</span><span id="line-145">    return GSON.toJson(cbsbf);</span>
+<span class="source-line-no">146</span><span id="line-146">  }</span>
+<span class="source-line-no">147</span><span id="line-147"></span>
+<span class="source-line-no">148</span><span id="line-148">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
+<span class="source-line-no">149</span><span id="line-149">  public static String toJSON(BlockCache bc) throws IOException {</span>
+<span class="source-line-no">150</span><span id="line-150">    return GSON.toJson(bc);</span>
+<span class="source-line-no">151</span><span id="line-151">  }</span>
+<span class="source-line-no">152</span><span id="line-152"></span>
+<span class="source-line-no">153</span><span id="line-153">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
+<span class="source-line-no">154</span><span id="line-154">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">155</span><span id="line-155">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
+<span class="source-line-no">156</span><span id="line-156">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
+<span class="source-line-no">157</span><span id="line-157">      + cb.getBlockPriority();</span>
+<span class="source-line-no">158</span><span id="line-158">  }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">  /**</span>
+<span class="source-line-no">161</span><span id="line-161">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
+<span class="source-line-no">162</span><span id="line-162">   * {@link BlockCache}.</span>
+<span class="source-line-no">163</span><span id="line-163">   * @param conf Used to read configurations</span>
+<span class="source-line-no">164</span><span id="line-164">   * @param bc   Block Cache to iterate.</span>
+<span class="source-line-no">165</span><span id="line-165">   * @return Laoded up instance of CachedBlocksByFile</span>
+<span class="source-line-no">166</span><span id="line-166">   */</span>
+<span class="source-line-no">167</span><span id="line-167">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
+<span class="source-line-no">168</span><span id="line-168">    final BlockCache bc) {</span>
+<span class="source-line-no">169</span><span id="line-169">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
+<span class="source-line-no">170</span><span id="line-170">    for (CachedBlock cb : bc) {</span>
+<span class="source-line-no">171</span><span id="line-171">      if (cbsbf.update(cb)) break;</span>
+<span class="source-line-no">172</span><span id="line-172">    }</span>
+<span class="source-line-no">173</span><span id="line-173">    return cbsbf;</span>
+<span class="source-line-no">174</span><span id="line-174">  }</span>
+<span class="source-line-no">175</span><span id="line-175"></span>
+<span class="source-line-no">176</span><span id="line-176">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
+<span class="source-line-no">177</span><span id="line-177">    boolean includeNextBlockMetadata) {</span>
+<span class="source-line-no">178</span><span id="line-178">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
+<span class="source-line-no">179</span><span id="line-179">    left.serialize(l, includeNextBlockMetadata);</span>
+<span class="source-line-no">180</span><span id="line-180">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
+<span class="source-line-no">181</span><span id="line-181">    right.serialize(r, includeNextBlockMetadata);</span>
+<span class="source-line-no">182</span><span id="line-182">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
+<span class="source-line-no">183</span><span id="line-183">      r.limit());</span>
+<span class="source-line-no">184</span><span id="line-184">  }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186">  /**</span>
+<span class="source-line-no">187</span><span id="line-187">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
+<span class="source-line-no">188</span><span id="line-188">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
+<span class="source-line-no">189</span><span id="line-189">   * comparison.</span>
+<span class="source-line-no">190</span><span id="line-190">   * @param existing block that is existing in the cache.</span>
+<span class="source-line-no">191</span><span id="line-191">   * @param newBlock block that is trying to be cached.</span>
+<span class="source-line-no">192</span><span id="line-192">   * @param cacheKey the cache key of the blocks.</span>
+<span class="source-line-no">193</span><span id="line-193">   * @return comparison of the existing block to the newBlock.</span>
+<span class="source-line-no">194</span><span id="line-194">   */</span>
+<span class="source-line-no">195</span><span id="line-195">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
+<span class="source-line-no">196</span><span id="line-196">    BlockCacheKey cacheKey) {</span>
+<span class="source-line-no">197</span><span id="line-197">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
+<span class="source-line-no">198</span><span id="line-198">    if (comparison != 0) {</span>
+<span class="source-line-no">199</span><span id="line-199">      throw new RuntimeException(</span>
+<span class="source-line-no">200</span><span id="line-200">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
+<span class="source-line-no">201</span><span id="line-201">    }</span>
+<span class="source-line-no">202</span><span id="line-202">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
+<span class="source-line-no">203</span><span id="line-203">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
+<span class="source-line-no">204</span><span id="line-204">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
+<span class="source-line-no">205</span><span id="line-205">    }</span>
+<span class="source-line-no">206</span><span id="line-206">    return comparison;</span>
+<span class="source-line-no">207</span><span id="line-207">  }</span>
+<span class="source-line-no">208</span><span id="line-208"></span>
+<span class="source-line-no">209</span><span id="line-209">  /**</span>
+<span class="source-line-no">210</span><span id="line-210">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
+<span class="source-line-no">211</span><span id="line-211">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
+<span class="source-line-no">212</span><span id="line-212">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
+<span class="source-line-no">213</span><span id="line-213">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
+<span class="source-line-no">214</span><span id="line-214">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
+<span class="source-line-no">215</span><span id="line-215">   * new block to cache has, then we can replace the existing block with the new block for better</span>
+<span class="source-line-no">216</span><span id="line-216">   * performance.(HBASE-20447)</span>
+<span class="source-line-no">217</span><span id="line-217">   * @param blockCache BlockCache to check</span>
+<span class="source-line-no">218</span><span id="line-218">   * @param cacheKey   the block cache key</span>
+<span class="source-line-no">219</span><span id="line-219">   * @param newBlock   the new block which try to put into the block cache.</span>
+<span class="source-line-no">220</span><span id="line-220">   * @return true means need to replace existing block with new block for the same block cache key.</span>
+<span class="source-line-no">221</span><span id="line-221">   *         false means just keep the existing block.</span>
+<span class="source-line-no">222</span><span id="line-222">   */</span>
+<span class="source-line-no">223</span><span id="line-223">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
+<span class="source-line-no">224</span><span id="line-224">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
+<span class="source-line-no">225</span><span id="line-225">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
+<span class="source-line-no">226</span><span id="line-226">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
+<span class="source-line-no">227</span><span id="line-227">    if (existingBlock == null) {</span>
+<span class="source-line-no">228</span><span id="line-228">      return true;</span>
+<span class="source-line-no">229</span><span id="line-229">    }</span>
+<span class="source-line-no">230</span><span id="line-230">    try {</span>
+<span class="source-line-no">231</span><span id="line-231">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
+<span class="source-line-no">232</span><span id="line-232">      if (comparison &lt; 0) {</span>
+<span class="source-line-no">233</span><span id="line-233">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
+<span class="source-line-no">234</span><span id="line-234">          + "nextBlockOnDiskSize set. Caching new block.");</span>
+<span class="source-line-no">235</span><span id="line-235">        return true;</span>
+<span class="source-line-no">236</span><span id="line-236">      } else if (comparison &gt; 0) {</span>
+<span class="source-line-no">237</span><span id="line-237">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
+<span class="source-line-no">238</span><span id="line-238">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
+<span class="source-line-no">239</span><span id="line-239">        return false;</span>
+<span class="source-line-no">240</span><span id="line-240">      } else {</span>
+<span class="source-line-no">241</span><span id="line-241">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
+<span class="source-line-no">242</span><span id="line-242">          + "cases (see HBASE-8547)", cacheKey);</span>
+<span class="source-line-no">243</span><span id="line-243">        return false;</span>
+<span class="source-line-no">244</span><span id="line-244">      }</span>
+<span class="source-line-no">245</span><span id="line-245">    } finally {</span>
+<span class="source-line-no">246</span><span id="line-246">      // Release this block to decrement the reference count.</span>
+<span class="source-line-no">247</span><span id="line-247">      existingBlock.release();</span>
+<span class="source-line-no">248</span><span id="line-248">    }</span>
+<span class="source-line-no">249</span><span id="line-249">  }</span>
+<span class="source-line-no">250</span><span id="line-250"></span>
+<span class="source-line-no">251</span><span id="line-251">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
+<span class="source-line-no">252</span><span id="line-252">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
+<span class="source-line-no">253</span><span id="line-253">    onlineRegions.values().forEach(r -&gt; {</span>
+<span class="source-line-no">254</span><span id="line-254">      r.getStores().forEach(s -&gt; {</span>
+<span class="source-line-no">255</span><span id="line-255">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
+<span class="source-line-no">256</span><span id="line-256">      });</span>
+<span class="source-line-no">257</span><span id="line-257">    });</span>
+<span class="source-line-no">258</span><span id="line-258">    return files;</span>
+<span class="source-line-no">259</span><span id="line-259">  }</span>
 <span class="source-line-no">260</span><span id="line-260"></span>
-<span class="source-line-no">261</span><span id="line-261">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
-<span class="source-line-no">262</span><span id="line-262">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
-<span class="source-line-no">263</span><span id="line-263">  }</span>
-<span class="source-line-no">264</span><span id="line-264"></span>
-<span class="source-line-no">265</span><span id="line-265">  /**</span>
-<span class="source-line-no">266</span><span id="line-266">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
-<span class="source-line-no">267</span><span id="line-267">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
-<span class="source-line-no">268</span><span id="line-268">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
-<span class="source-line-no">269</span><span id="line-269">   * may already have been cached at write time.</span>
-<span class="source-line-no">270</span><span id="line-270">   * @param cacheConf the related CacheConfig object.</span>
-<span class="source-line-no">271</span><span id="line-271">   * @param block     the HFileBlock instance to be converted.</span>
-<span class="source-line-no">272</span><span id="line-272">   * @return the resulting HFileBlock instance without checksum.</span>
-<span class="source-line-no">273</span><span id="line-273">   */</span>
-<span class="source-line-no">274</span><span id="line-274">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
-<span class="source-line-no">275</span><span id="line-275">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
-<span class="source-line-no">276</span><span id="line-276">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
-<span class="source-line-no">277</span><span id="line-277">      ? 0</span>
-<span class="source-line-no">278</span><span id="line-278">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
-<span class="source-line-no">279</span><span id="line-279">        block.getHFileContext().getBytesPerChecksum());</span>
-<span class="source-line-no">280</span><span id="line-280">    ByteBuff buff = block.getBufferReadOnly();</span>
-<span class="source-line-no">281</span><span id="line-281">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
-<span class="source-line-no">282</span><span id="line-282">    return builder.withBlockType(block.getBlockType())</span>
-<span class="source-line-no">283</span><span id="line-283">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
-<span class="source-line-no">284</span><span id="line-284">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
-<span class="source-line-no">285</span><span id="line-285">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
-<span class="source-line-no">286</span><span id="line-286">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
-<span class="source-line-no">287</span><span id="line-287">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
-<span class="source-line-no">288</span><span id="line-288">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
-<span class="source-line-no">289</span><span id="line-289">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
-<span class="source-line-no">290</span><span id="line-290">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
-<span class="source-line-no">291</span><span id="line-291">  }</span>
-<span class="source-line-no">292</span><span id="line-292"></span>
-<span class="source-line-no">293</span><span id="line-293">  public static HFileContext cloneContext(HFileContext context) {</span>
-<span class="source-line-no">294</span><span id="line-294">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
-<span class="source-line-no">295</span><span id="line-295">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
-<span class="source-line-no">296</span><span id="line-296">      .withCompression(context.getCompression())</span>
-<span class="source-line-no">297</span><span id="line-297">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
-<span class="source-line-no">298</span><span id="line-298">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
-<span class="source-line-no">299</span><span id="line-299">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
-<span class="source-line-no">300</span><span id="line-300">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
-<span class="source-line-no">301</span><span id="line-301">    return newContext;</span>
-<span class="source-line-no">302</span><span id="line-302">  }</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304">  /**</span>
-<span class="source-line-no">305</span><span id="line-305">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
-<span class="source-line-no">306</span><span id="line-306">   * This is different than metrics in that it is stats on current state of a cache. See</span>
-<span class="source-line-no">307</span><span id="line-307">   * getLoadedCachedBlocksByFile</span>
-<span class="source-line-no">308</span><span id="line-308">   */</span>
-<span class="source-line-no">309</span><span id="line-309">  public static class CachedBlocksByFile {</span>
-<span class="source-line-no">310</span><span id="line-310">    private int count;</span>
-<span class="source-line-no">311</span><span id="line-311">    private int dataBlockCount;</span>
-<span class="source-line-no">312</span><span id="line-312">    private long size;</span>
-<span class="source-line-no">313</span><span id="line-313">    private long dataSize;</span>
-<span class="source-line-no">314</span><span id="line-314">    private final long now = System.nanoTime();</span>
-<span class="source-line-no">315</span><span id="line-315">    /**</span>
-<span class="source-line-no">316</span><span id="line-316">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
-<span class="source-line-no">317</span><span id="line-317">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
-<span class="source-line-no">318</span><span id="line-318">     * displays warning in red when stats are incomplete.</span>
-<span class="source-line-no">319</span><span id="line-319">     */</span>
-<span class="source-line-no">320</span><span id="line-320">    private final int max;</span>
-<span class="source-line-no">321</span><span id="line-321"></span>
-<span class="source-line-no">322</span><span id="line-322">    CachedBlocksByFile() {</span>
-<span class="source-line-no">323</span><span id="line-323">      this(null);</span>
-<span class="source-line-no">324</span><span id="line-324">    }</span>
-<span class="source-line-no">325</span><span id="line-325"></span>
-<span class="source-line-no">326</span><span id="line-326">    CachedBlocksByFile(final Configuration c) {</span>
-<span class="source-line-no">327</span><span id="line-327">      this.max = getMaxCachedBlocksByFile(c);</span>
-<span class="source-line-no">328</span><span id="line-328">    }</span>
-<span class="source-line-no">329</span><span id="line-329"></span>
-<span class="source-line-no">330</span><span id="line-330">    /**</span>
-<span class="source-line-no">331</span><span id="line-331">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
-<span class="source-line-no">332</span><span id="line-332">     */</span>
-<span class="source-line-no">333</span><span id="line-333">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
-<span class="source-line-no">334</span><span id="line-334">      new ConcurrentSkipListMap&lt;&gt;();</span>
-<span class="source-line-no">335</span><span id="line-335">    FastLongHistogram hist = new FastLongHistogram();</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337">    /** Returns True if full.... if we won't be adding any more. */</span>
-<span class="source-line-no">338</span><span id="line-338">    public boolean update(final CachedBlock cb) {</span>
-<span class="source-line-no">339</span><span id="line-339">      if (isFull()) return true;</span>
-<span class="source-line-no">340</span><span id="line-340">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
-<span class="source-line-no">341</span><span id="line-341">      if (set == null) {</span>
-<span class="source-line-no">342</span><span id="line-342">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
-<span class="source-line-no">343</span><span id="line-343">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
-<span class="source-line-no">344</span><span id="line-344">      }</span>
-<span class="source-line-no">345</span><span id="line-345">      set.add(cb);</span>
-<span class="source-line-no">346</span><span id="line-346">      this.size += cb.getSize();</span>
-<span class="source-line-no">347</span><span id="line-347">      this.count++;</span>
-<span class="source-line-no">348</span><span id="line-348">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">349</span><span id="line-349">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">350</span><span id="line-350">        this.dataBlockCount++;</span>
-<span class="source-line-no">351</span><span id="line-351">        this.dataSize += cb.getSize();</span>
-<span class="source-line-no">352</span><span id="line-352">      }</span>
-<span class="source-line-no">353</span><span id="line-353">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
-<span class="source-line-no">354</span><span id="line-354">      this.hist.add(age, 1);</span>
-<span class="source-line-no">355</span><span id="line-355">      return false;</span>
-<span class="source-line-no">356</span><span id="line-356">    }</span>
-<span class="source-line-no">357</span><span id="line-357"></span>
-<span class="source-line-no">358</span><span id="line-358">    /**</span>
-<span class="source-line-no">359</span><span id="line-359">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
-<span class="source-line-no">360</span><span id="line-360">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
-<span class="source-line-no">361</span><span id="line-361">     *         DEFAULT_MAX).</span>
-<span class="source-line-no">362</span><span id="line-362">     */</span>
-<span class="source-line-no">363</span><span id="line-363">    public boolean isFull() {</span>
-<span class="source-line-no">364</span><span id="line-364">      return this.count &gt;= this.max;</span>
-<span class="source-line-no">365</span><span id="line-365">    }</span>
-<span class="source-line-no">366</span><span id="line-366"></span>
-<span class="source-line-no">367</span><span id="line-367">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
-<span class="source-line-no">368</span><span id="line-368">      return this.cachedBlockByFile;</span>
-<span class="source-line-no">369</span><span id="line-369">    }</span>
-<span class="source-line-no">370</span><span id="line-370"></span>
-<span class="source-line-no">371</span><span id="line-371">    /** Returns count of blocks in the cache */</span>
-<span class="source-line-no">372</span><span id="line-372">    public int getCount() {</span>
-<span class="source-line-no">373</span><span id="line-373">      return count;</span>
-<span class="source-line-no">374</span><span id="line-374">    }</span>
-<span class="source-line-no">375</span><span id="line-375"></span>
-<span class="source-line-no">376</span><span id="line-376">    public int getDataCount() {</span>
-<span class="source-line-no">377</span><span id="line-377">      return dataBlockCount;</span>
-<span class="source-line-no">378</span><span id="line-378">    }</span>
-<span class="source-line-no">379</span><span id="line-379"></span>
-<span class="source-line-no">380</span><span id="line-380">    /** Returns size of blocks in the cache */</span>
-<span class="source-line-no">381</span><span id="line-381">    public long getSize() {</span>
-<span class="source-line-no">382</span><span id="line-382">      return size;</span>
-<span class="source-line-no">383</span><span id="line-383">    }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">    /** Returns Size of data. */</span>
-<span class="source-line-no">386</span><span id="line-386">    public long getDataSize() {</span>
-<span class="source-line-no">387</span><span id="line-387">      return dataSize;</span>
-<span class="source-line-no">388</span><span id="line-388">    }</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
-<span class="source-line-no">391</span><span id="line-391">      return new AgeSnapshot(this.hist);</span>
-<span class="source-line-no">392</span><span id="line-392">    }</span>
-<span class="source-line-no">393</span><span id="line-393"></span>
-<span class="source-line-no">394</span><span id="line-394">    @Override</span>
-<span class="source-line-no">395</span><span id="line-395">    public String toString() {</span>
-<span class="source-line-no">396</span><span id="line-396">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
-<span class="source-line-no">397</span><span id="line-397">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
-<span class="source-line-no">398</span><span id="line-398">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
-<span class="source-line-no">399</span><span id="line-399">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
-<span class="source-line-no">400</span><span id="line-400">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
-<span class="source-line-no">401</span><span id="line-401">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
-<span class="source-line-no">402</span><span id="line-402">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
-<span class="source-line-no">403</span><span id="line-403">    }</span>
-<span class="source-line-no">404</span><span id="line-404">  }</span>
-<span class="source-line-no">405</span><span id="line-405">}</span>
+<span class="source-line-no">261</span><span id="line-261">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">262</span><span id="line-262"></span>
+<span class="source-line-no">263</span><span id="line-263">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
+<span class="source-line-no">264</span><span id="line-264">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
+<span class="source-line-no">265</span><span id="line-265">  }</span>
+<span class="source-line-no">266</span><span id="line-266"></span>
+<span class="source-line-no">267</span><span id="line-267">  /**</span>
+<span class="source-line-no">268</span><span id="line-268">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
+<span class="source-line-no">269</span><span id="line-269">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
+<span class="source-line-no">270</span><span id="line-270">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
+<span class="source-line-no">271</span><span id="line-271">   * may already have been cached at write time.</span>
+<span class="source-line-no">272</span><span id="line-272">   * @param cacheConf the related CacheConfig object.</span>
+<span class="source-line-no">273</span><span id="line-273">   * @param block     the HFileBlock instance to be converted.</span>
+<span class="source-line-no">274</span><span id="line-274">   * @return the resulting HFileBlock instance without checksum.</span>
+<span class="source-line-no">275</span><span id="line-275">   */</span>
+<span class="source-line-no">276</span><span id="line-276">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
+<span class="source-line-no">277</span><span id="line-277">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
+<span class="source-line-no">278</span><span id="line-278">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
+<span class="source-line-no">279</span><span id="line-279">      ? 0</span>
+<span class="source-line-no">280</span><span id="line-280">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
+<span class="source-line-no">281</span><span id="line-281">        block.getHFileContext().getBytesPerChecksum());</span>
+<span class="source-line-no">282</span><span id="line-282">    ByteBuff buff = block.getBufferReadOnly();</span>
+<span class="source-line-no">283</span><span id="line-283">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
+<span class="source-line-no">284</span><span id="line-284">    return builder.withBlockType(block.getBlockType())</span>
+<span class="source-line-no">285</span><span id="line-285">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
+<span class="source-line-no">286</span><span id="line-286">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
+<span class="source-line-no">287</span><span id="line-287">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
+<span class="source-line-no">288</span><span id="line-288">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
+<span class="source-line-no">289</span><span id="line-289">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
+<span class="source-line-no">290</span><span id="line-290">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
+<span class="source-line-no">291</span><span id="line-291">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
+<span class="source-line-no">292</span><span id="line-292">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
+<span class="source-line-no">293</span><span id="line-293">  }</span>
+<span class="source-line-no">294</span><span id="line-294"></span>
+<span class="source-line-no">295</span><span id="line-295">  public static HFileContext cloneContext(HFileContext context) {</span>
+<span class="source-line-no">296</span><span id="line-296">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
+<span class="source-line-no">297</span><span id="line-297">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
+<span class="source-line-no">298</span><span id="line-298">      .withCompression(context.getCompression())</span>
+<span class="source-line-no">299</span><span id="line-299">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
+<span class="source-line-no">300</span><span id="line-300">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
+<span class="source-line-no">301</span><span id="line-301">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
+<span class="source-line-no">302</span><span id="line-302">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
+<span class="source-line-no">303</span><span id="line-303">    return newContext;</span>
+<span class="source-line-no">304</span><span id="line-304">  }</span>
+<span class="source-line-no">305</span><span id="line-305"></span>
+<span class="source-line-no">306</span><span id="line-306">  /**</span>
+<span class="source-line-no">307</span><span id="line-307">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
+<span class="source-line-no">308</span><span id="line-308">   * This is different than metrics in that it is stats on current state of a cache. See</span>
+<span class="source-line-no">309</span><span id="line-309">   * getLoadedCachedBlocksByFile</span>
+<span class="source-line-no">310</span><span id="line-310">   */</span>
+<span class="source-line-no">311</span><span id="line-311">  public static class CachedBlocksByFile {</span>
+<span class="source-line-no">312</span><span id="line-312">    private int count;</span>
+<span class="source-line-no">313</span><span id="line-313">    private int dataBlockCount;</span>
+<span class="source-line-no">314</span><span id="line-314">    private long size;</span>
+<span class="source-line-no">315</span><span id="line-315">    private long dataSize;</span>
+<span class="source-line-no">316</span><span id="line-316">    private final long now = System.nanoTime();</span>
+<span class="source-line-no">317</span><span id="line-317">    /**</span>
+<span class="source-line-no">318</span><span id="line-318">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
+<span class="source-line-no">319</span><span id="line-319">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
+<span class="source-line-no">320</span><span id="line-320">     * displays warning in red when stats are incomplete.</span>
+<span class="source-line-no">321</span><span id="line-321">     */</span>
+<span class="source-line-no">322</span><span id="line-322">    private final int max;</span>
+<span class="source-line-no">323</span><span id="line-323"></span>
+<span class="source-line-no">324</span><span id="line-324">    CachedBlocksByFile() {</span>
+<span class="source-line-no">325</span><span id="line-325">      this(null);</span>
+<span class="source-line-no">326</span><span id="line-326">    }</span>
+<span class="source-line-no">327</span><span id="line-327"></span>
+<span class="source-line-no">328</span><span id="line-328">    CachedBlocksByFile(final Configuration c) {</span>
+<span class="source-line-no">329</span><span id="line-329">      this.max = getMaxCachedBlocksByFile(c);</span>
+<span class="source-line-no">330</span><span id="line-330">    }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332">    /**</span>
+<span class="source-line-no">333</span><span id="line-333">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
+<span class="source-line-no">334</span><span id="line-334">     */</span>
+<span class="source-line-no">335</span><span id="line-335">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
+<span class="source-line-no">336</span><span id="line-336">      new ConcurrentSkipListMap&lt;&gt;();</span>
+<span class="source-line-no">337</span><span id="line-337">    FastLongHistogram hist = new FastLongHistogram();</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339">    /** Returns True if full.... if we won't be adding any more. */</span>
+<span class="source-line-no">340</span><span id="line-340">    public boolean update(final CachedBlock cb) {</span>
+<span class="source-line-no">341</span><span id="line-341">      if (isFull()) return true;</span>
+<span class="source-line-no">342</span><span id="line-342">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
+<span class="source-line-no">343</span><span id="line-343">      if (set == null) {</span>
+<span class="source-line-no">344</span><span id="line-344">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
+<span class="source-line-no">345</span><span id="line-345">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
+<span class="source-line-no">346</span><span id="line-346">      }</span>
+<span class="source-line-no">347</span><span id="line-347">      set.add(cb);</span>
+<span class="source-line-no">348</span><span id="line-348">      this.size += cb.getSize();</span>
+<span class="source-line-no">349</span><span id="line-349">      this.count++;</span>
+<span class="source-line-no">350</span><span id="line-350">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">351</span><span id="line-351">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">352</span><span id="line-352">        this.dataBlockCount++;</span>
+<span class="source-line-no">353</span><span id="line-353">        this.dataSize += cb.getSize();</span>
+<span class="source-line-no">354</span><span id="line-354">      }</span>
+<span class="source-line-no">355</span><span id="line-355">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
+<span class="source-line-no">356</span><span id="line-356">      this.hist.add(age, 1);</span>
+<span class="source-line-no">357</span><span id="line-357">      return false;</span>
+<span class="source-line-no">358</span><span id="line-358">    }</span>
+<span class="source-line-no">359</span><span id="line-359"></span>
+<span class="source-line-no">360</span><span id="line-360">    /**</span>
+<span class="source-line-no">361</span><span id="line-361">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
+<span class="source-line-no">362</span><span id="line-362">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
+<span class="source-line-no">363</span><span id="line-363">     *         DEFAULT_MAX).</span>
+<span class="source-line-no">364</span><span id="line-364">     */</span>
+<span class="source-line-no">365</span><span id="line-365">    public boolean isFull() {</span>
+<span class="source-line-no">366</span><span id="line-366">      return this.count &gt;= this.max;</span>
+<span class="source-line-no">367</span><span id="line-367">    }</span>
+<span class="source-line-no">368</span><span id="line-368"></span>
+<span class="source-line-no">369</span><span id="line-369">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
+<span class="source-line-no">370</span><span id="line-370">      return this.cachedBlockByFile;</span>
+<span class="source-line-no">371</span><span id="line-371">    }</span>
+<span class="source-line-no">372</span><span id="line-372"></span>
+<span class="source-line-no">373</span><span id="line-373">    /** Returns count of blocks in the cache */</span>
+<span class="source-line-no">374</span><span id="line-374">    public int getCount() {</span>
+<span class="source-line-no">375</span><span id="line-375">      return count;</span>
+<span class="source-line-no">376</span><span id="line-376">    }</span>
+<span class="source-line-no">377</span><span id="line-377"></span>
+<span class="source-line-no">378</span><span id="line-378">    public int getDataCount() {</span>
+<span class="source-line-no">379</span><span id="line-379">      return dataBlockCount;</span>
+<span class="source-line-no">380</span><span id="line-380">    }</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382">    /** Returns size of blocks in the cache */</span>
+<span class="source-line-no">383</span><span id="line-383">    public long getSize() {</span>
+<span class="source-line-no">384</span><span id="line-384">      return size;</span>
+<span class="source-line-no">385</span><span id="line-385">    }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">    /** Returns Size of data. */</span>
+<span class="source-line-no">388</span><span id="line-388">    public long getDataSize() {</span>
+<span class="source-line-no">389</span><span id="line-389">      return dataSize;</span>
+<span class="source-line-no">390</span><span id="line-390">    }</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
+<span class="source-line-no">393</span><span id="line-393">      return new AgeSnapshot(this.hist);</span>
+<span class="source-line-no">394</span><span id="line-394">    }</span>
+<span class="source-line-no">395</span><span id="line-395"></span>
+<span class="source-line-no">396</span><span id="line-396">    @Override</span>
+<span class="source-line-no">397</span><span id="line-397">    public String toString() {</span>
+<span class="source-line-no">398</span><span id="line-398">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
+<span class="source-line-no">399</span><span id="line-399">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
+<span class="source-line-no">400</span><span id="line-400">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
+<span class="source-line-no">401</span><span id="line-401">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
+<span class="source-line-no">402</span><span id="line-402">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
+<span class="source-line-no">403</span><span id="line-403">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
+<span class="source-line-no">404</span><span id="line-404">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
+<span class="source-line-no">405</span><span id="line-405">    }</span>
+<span class="source-line-no">406</span><span id="line-406">  }</span>
+<span class="source-line-no">407</span><span id="line-407">}</span>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
index bf500f2ad39..fefd721c064 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html
@@ -33,389 +33,391 @@
 <span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.io.hfile.HFileBlock.FILL_HEADER;</span>
 <span class="source-line-no">021</span><span id="line-21"></span>
 <span class="source-line-no">022</span><span id="line-22">import java.io.IOException;</span>
-<span class="source-line-no">023</span><span id="line-23">import java.nio.ByteBuffer;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.util.HashSet;</span>
-<span class="source-line-no">025</span><span id="line-25">import java.util.Map;</span>
-<span class="source-line-no">026</span><span id="line-26">import java.util.NavigableMap;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableSet;</span>
-<span class="source-line-no">028</span><span id="line-28">import java.util.Set;</span>
-<span class="source-line-no">029</span><span id="line-29">import java.util.concurrent.ConcurrentSkipListMap;</span>
-<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListSet;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.ChecksumType;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.GsonUtil;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.slf4j.Logger;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47">/**</span>
-<span class="source-line-no">048</span><span id="line-48"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
-<span class="source-line-no">049</span><span id="line-49"> * No attempt has been made at making this thread safe.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51">@InterfaceAudience.Private</span>
-<span class="source-line-no">052</span><span id="line-52">public class BlockCacheUtil {</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">  public static final long NANOS_PER_SECOND = 1000000000;</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58">  /**</span>
-<span class="source-line-no">059</span><span id="line-59">   * Needed generating JSON.</span>
-<span class="source-line-no">060</span><span id="line-60">   */</span>
-<span class="source-line-no">061</span><span id="line-61">  private static final Gson GSON = GsonUtil.createGson()</span>
-<span class="source-line-no">062</span><span id="line-62">    .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64">      @Override</span>
-<span class="source-line-no">065</span><span id="line-65">      public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
-<span class="source-line-no">066</span><span id="line-66">        AgeSnapshot snapshot = new AgeSnapshot(value);</span>
-<span class="source-line-no">067</span><span id="line-67">        out.beginObject();</span>
-<span class="source-line-no">068</span><span id="line-68">        out.name("mean").value(snapshot.getMean());</span>
-<span class="source-line-no">069</span><span id="line-69">        out.name("min").value(snapshot.getMin());</span>
-<span class="source-line-no">070</span><span id="line-70">        out.name("max").value(snapshot.getMax());</span>
-<span class="source-line-no">071</span><span id="line-71">        out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
-<span class="source-line-no">072</span><span id="line-72">        out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
-<span class="source-line-no">073</span><span id="line-73">        out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
-<span class="source-line-no">074</span><span id="line-74">        out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
-<span class="source-line-no">075</span><span id="line-75">        out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
-<span class="source-line-no">076</span><span id="line-76">        out.endObject();</span>
-<span class="source-line-no">077</span><span id="line-77">      }</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79">      @Override</span>
-<span class="source-line-no">080</span><span id="line-80">      public FastLongHistogram read(JsonReader in) throws IOException {</span>
-<span class="source-line-no">081</span><span id="line-81">        throw new UnsupportedOperationException();</span>
-<span class="source-line-no">082</span><span id="line-82">      }</span>
-<span class="source-line-no">083</span><span id="line-83">    }).setPrettyPrinting().create();</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85">  /** Returns The block content as String. */</span>
-<span class="source-line-no">086</span><span id="line-86">  public static String toString(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">087</span><span id="line-87">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
-<span class="source-line-no">088</span><span id="line-88">  }</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90">  /**</span>
-<span class="source-line-no">091</span><span id="line-91">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
-<span class="source-line-no">092</span><span id="line-92">   */</span>
-<span class="source-line-no">093</span><span id="line-93">  static class CachedBlockCountsPerFile {</span>
-<span class="source-line-no">094</span><span id="line-94">    private int count = 0;</span>
-<span class="source-line-no">095</span><span id="line-95">    private long size = 0;</span>
-<span class="source-line-no">096</span><span id="line-96">    private int countData = 0;</span>
-<span class="source-line-no">097</span><span id="line-97">    private long sizeData = 0;</span>
-<span class="source-line-no">098</span><span id="line-98">    private final String filename;</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100">    CachedBlockCountsPerFile(final String filename) {</span>
-<span class="source-line-no">101</span><span id="line-101">      this.filename = filename;</span>
-<span class="source-line-no">102</span><span id="line-102">    }</span>
-<span class="source-line-no">103</span><span id="line-103"></span>
-<span class="source-line-no">104</span><span id="line-104">    public int getCount() {</span>
-<span class="source-line-no">105</span><span id="line-105">      return count;</span>
-<span class="source-line-no">106</span><span id="line-106">    }</span>
-<span class="source-line-no">107</span><span id="line-107"></span>
-<span class="source-line-no">108</span><span id="line-108">    public long getSize() {</span>
-<span class="source-line-no">109</span><span id="line-109">      return size;</span>
-<span class="source-line-no">110</span><span id="line-110">    }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112">    public int getCountData() {</span>
-<span class="source-line-no">113</span><span id="line-113">      return countData;</span>
-<span class="source-line-no">114</span><span id="line-114">    }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">    public long getSizeData() {</span>
-<span class="source-line-no">117</span><span id="line-117">      return sizeData;</span>
-<span class="source-line-no">118</span><span id="line-118">    }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">    public String getFilename() {</span>
-<span class="source-line-no">121</span><span id="line-121">      return filename;</span>
-<span class="source-line-no">122</span><span id="line-122">    }</span>
-<span class="source-line-no">123</span><span id="line-123">  }</span>
-<span class="source-line-no">124</span><span id="line-124"></span>
-<span class="source-line-no">125</span><span id="line-125">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
-<span class="source-line-no">126</span><span id="line-126">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
-<span class="source-line-no">127</span><span id="line-127">    throws IOException {</span>
-<span class="source-line-no">128</span><span id="line-128">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
-<span class="source-line-no">129</span><span id="line-129">    for (CachedBlock cb : blocks) {</span>
-<span class="source-line-no">130</span><span id="line-130">      counts.count++;</span>
-<span class="source-line-no">131</span><span id="line-131">      counts.size += cb.getSize();</span>
-<span class="source-line-no">132</span><span id="line-132">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">133</span><span id="line-133">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">134</span><span id="line-134">        counts.countData++;</span>
-<span class="source-line-no">135</span><span id="line-135">        counts.sizeData += cb.getSize();</span>
-<span class="source-line-no">136</span><span id="line-136">      }</span>
-<span class="source-line-no">137</span><span id="line-137">    }</span>
-<span class="source-line-no">138</span><span id="line-138">    return GSON.toJson(counts);</span>
-<span class="source-line-no">139</span><span id="line-139">  }</span>
-<span class="source-line-no">140</span><span id="line-140"></span>
-<span class="source-line-no">141</span><span id="line-141">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
-<span class="source-line-no">142</span><span id="line-142">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
-<span class="source-line-no">143</span><span id="line-143">    return GSON.toJson(cbsbf);</span>
-<span class="source-line-no">144</span><span id="line-144">  }</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
-<span class="source-line-no">147</span><span id="line-147">  public static String toJSON(BlockCache bc) throws IOException {</span>
-<span class="source-line-no">148</span><span id="line-148">    return GSON.toJson(bc);</span>
-<span class="source-line-no">149</span><span id="line-149">  }</span>
-<span class="source-line-no">150</span><span id="line-150"></span>
-<span class="source-line-no">151</span><span id="line-151">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
-<span class="source-line-no">152</span><span id="line-152">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
-<span class="source-line-no">153</span><span id="line-153">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
-<span class="source-line-no">154</span><span id="line-154">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
-<span class="source-line-no">155</span><span id="line-155">      + cb.getBlockPriority();</span>
-<span class="source-line-no">156</span><span id="line-156">  }</span>
-<span class="source-line-no">157</span><span id="line-157"></span>
-<span class="source-line-no">158</span><span id="line-158">  /**</span>
-<span class="source-line-no">159</span><span id="line-159">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
-<span class="source-line-no">160</span><span id="line-160">   * {@link BlockCache}.</span>
-<span class="source-line-no">161</span><span id="line-161">   * @param conf Used to read configurations</span>
-<span class="source-line-no">162</span><span id="line-162">   * @param bc   Block Cache to iterate.</span>
-<span class="source-line-no">163</span><span id="line-163">   * @return Laoded up instance of CachedBlocksByFile</span>
-<span class="source-line-no">164</span><span id="line-164">   */</span>
-<span class="source-line-no">165</span><span id="line-165">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
-<span class="source-line-no">166</span><span id="line-166">    final BlockCache bc) {</span>
-<span class="source-line-no">167</span><span id="line-167">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
-<span class="source-line-no">168</span><span id="line-168">    for (CachedBlock cb : bc) {</span>
-<span class="source-line-no">169</span><span id="line-169">      if (cbsbf.update(cb)) break;</span>
-<span class="source-line-no">170</span><span id="line-170">    }</span>
-<span class="source-line-no">171</span><span id="line-171">    return cbsbf;</span>
-<span class="source-line-no">172</span><span id="line-172">  }</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
-<span class="source-line-no">175</span><span id="line-175">    boolean includeNextBlockMetadata) {</span>
-<span class="source-line-no">176</span><span id="line-176">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
-<span class="source-line-no">177</span><span id="line-177">    left.serialize(l, includeNextBlockMetadata);</span>
-<span class="source-line-no">178</span><span id="line-178">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
-<span class="source-line-no">179</span><span id="line-179">    right.serialize(r, includeNextBlockMetadata);</span>
-<span class="source-line-no">180</span><span id="line-180">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
-<span class="source-line-no">181</span><span id="line-181">      r.limit());</span>
-<span class="source-line-no">182</span><span id="line-182">  }</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">  /**</span>
-<span class="source-line-no">185</span><span id="line-185">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
-<span class="source-line-no">186</span><span id="line-186">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
-<span class="source-line-no">187</span><span id="line-187">   * comparison.</span>
-<span class="source-line-no">188</span><span id="line-188">   * @param existing block that is existing in the cache.</span>
-<span class="source-line-no">189</span><span id="line-189">   * @param newBlock block that is trying to be cached.</span>
-<span class="source-line-no">190</span><span id="line-190">   * @param cacheKey the cache key of the blocks.</span>
-<span class="source-line-no">191</span><span id="line-191">   * @return comparison of the existing block to the newBlock.</span>
-<span class="source-line-no">192</span><span id="line-192">   */</span>
-<span class="source-line-no">193</span><span id="line-193">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
-<span class="source-line-no">194</span><span id="line-194">    BlockCacheKey cacheKey) {</span>
-<span class="source-line-no">195</span><span id="line-195">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
-<span class="source-line-no">196</span><span id="line-196">    if (comparison != 0) {</span>
-<span class="source-line-no">197</span><span id="line-197">      throw new RuntimeException(</span>
-<span class="source-line-no">198</span><span id="line-198">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
-<span class="source-line-no">199</span><span id="line-199">    }</span>
-<span class="source-line-no">200</span><span id="line-200">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
-<span class="source-line-no">201</span><span id="line-201">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
-<span class="source-line-no">202</span><span id="line-202">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
-<span class="source-line-no">203</span><span id="line-203">    }</span>
-<span class="source-line-no">204</span><span id="line-204">    return comparison;</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206"></span>
-<span class="source-line-no">207</span><span id="line-207">  /**</span>
-<span class="source-line-no">208</span><span id="line-208">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
-<span class="source-line-no">209</span><span id="line-209">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
-<span class="source-line-no">210</span><span id="line-210">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
-<span class="source-line-no">211</span><span id="line-211">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
-<span class="source-line-no">212</span><span id="line-212">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
-<span class="source-line-no">213</span><span id="line-213">   * new block to cache has, then we can replace the existing block with the new block for better</span>
-<span class="source-line-no">214</span><span id="line-214">   * performance.(HBASE-20447)</span>
-<span class="source-line-no">215</span><span id="line-215">   * @param blockCache BlockCache to check</span>
-<span class="source-line-no">216</span><span id="line-216">   * @param cacheKey   the block cache key</span>
-<span class="source-line-no">217</span><span id="line-217">   * @param newBlock   the new block which try to put into the block cache.</span>
-<span class="source-line-no">218</span><span id="line-218">   * @return true means need to replace existing block with new block for the same block cache key.</span>
-<span class="source-line-no">219</span><span id="line-219">   *         false means just keep the existing block.</span>
-<span class="source-line-no">220</span><span id="line-220">   */</span>
-<span class="source-line-no">221</span><span id="line-221">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
-<span class="source-line-no">222</span><span id="line-222">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
-<span class="source-line-no">223</span><span id="line-223">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
-<span class="source-line-no">224</span><span id="line-224">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
-<span class="source-line-no">225</span><span id="line-225">    if (existingBlock == null) {</span>
-<span class="source-line-no">226</span><span id="line-226">      return true;</span>
-<span class="source-line-no">227</span><span id="line-227">    }</span>
-<span class="source-line-no">228</span><span id="line-228">    try {</span>
-<span class="source-line-no">229</span><span id="line-229">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
-<span class="source-line-no">230</span><span id="line-230">      if (comparison &lt; 0) {</span>
-<span class="source-line-no">231</span><span id="line-231">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
-<span class="source-line-no">232</span><span id="line-232">          + "nextBlockOnDiskSize set. Caching new block.");</span>
-<span class="source-line-no">233</span><span id="line-233">        return true;</span>
-<span class="source-line-no">234</span><span id="line-234">      } else if (comparison &gt; 0) {</span>
-<span class="source-line-no">235</span><span id="line-235">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
-<span class="source-line-no">236</span><span id="line-236">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
-<span class="source-line-no">237</span><span id="line-237">        return false;</span>
-<span class="source-line-no">238</span><span id="line-238">      } else {</span>
-<span class="source-line-no">239</span><span id="line-239">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
-<span class="source-line-no">240</span><span id="line-240">          + "cases (see HBASE-8547)", cacheKey);</span>
-<span class="source-line-no">241</span><span id="line-241">        return false;</span>
-<span class="source-line-no">242</span><span id="line-242">      }</span>
-<span class="source-line-no">243</span><span id="line-243">    } finally {</span>
-<span class="source-line-no">244</span><span id="line-244">      // Release this block to decrement the reference count.</span>
-<span class="source-line-no">245</span><span id="line-245">      existingBlock.release();</span>
-<span class="source-line-no">246</span><span id="line-246">    }</span>
-<span class="source-line-no">247</span><span id="line-247">  }</span>
-<span class="source-line-no">248</span><span id="line-248"></span>
-<span class="source-line-no">249</span><span id="line-249">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
-<span class="source-line-no">250</span><span id="line-250">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
-<span class="source-line-no">251</span><span id="line-251">    onlineRegions.values().forEach(r -&gt; {</span>
-<span class="source-line-no">252</span><span id="line-252">      r.getStores().forEach(s -&gt; {</span>
-<span class="source-line-no">253</span><span id="line-253">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
-<span class="source-line-no">254</span><span id="line-254">      });</span>
-<span class="source-line-no">255</span><span id="line-255">    });</span>
-<span class="source-line-no">256</span><span id="line-256">    return files;</span>
-<span class="source-line-no">257</span><span id="line-257">  }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.lang.reflect.Modifier;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.nio.ByteBuffer;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.util.HashSet;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.util.Map;</span>
+<span class="source-line-no">027</span><span id="line-27">import java.util.NavigableMap;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.NavigableSet;</span>
+<span class="source-line-no">029</span><span id="line-29">import java.util.Set;</span>
+<span class="source-line-no">030</span><span id="line-30">import java.util.concurrent.ConcurrentSkipListMap;</span>
+<span class="source-line-no">031</span><span id="line-31">import java.util.concurrent.ConcurrentSkipListSet;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.metrics.impl.FastLongHistogram;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.nio.ByteBuff;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.ChecksumType;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.util.GsonUtil;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.slf4j.Logger;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.gson.Gson;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hbase.thirdparty.com.google.gson.TypeAdapter;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonReader;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hbase.thirdparty.com.google.gson.stream.JsonWriter;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Utilty for aggregating counts in CachedBlocks and toString/toJSON CachedBlocks and BlockCaches.</span>
+<span class="source-line-no">050</span><span id="line-50"> * No attempt has been made at making this thread safe.</span>
+<span class="source-line-no">051</span><span id="line-51"> */</span>
+<span class="source-line-no">052</span><span id="line-52">@InterfaceAudience.Private</span>
+<span class="source-line-no">053</span><span id="line-53">public class BlockCacheUtil {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  private static final Logger LOG = LoggerFactory.getLogger(BlockCacheUtil.class);</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">  public static final long NANOS_PER_SECOND = 1000000000;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59">  /**</span>
+<span class="source-line-no">060</span><span id="line-60">   * Needed generating JSON.</span>
+<span class="source-line-no">061</span><span id="line-61">   */</span>
+<span class="source-line-no">062</span><span id="line-62">  private static final Gson GSON =</span>
+<span class="source-line-no">063</span><span id="line-63">    GsonUtil.createGson().excludeFieldsWithModifiers(Modifier.PRIVATE)</span>
+<span class="source-line-no">064</span><span id="line-64">      .registerTypeAdapter(FastLongHistogram.class, new TypeAdapter&lt;FastLongHistogram&gt;() {</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66">        @Override</span>
+<span class="source-line-no">067</span><span id="line-67">        public void write(JsonWriter out, FastLongHistogram value) throws IOException {</span>
+<span class="source-line-no">068</span><span id="line-68">          AgeSnapshot snapshot = new AgeSnapshot(value);</span>
+<span class="source-line-no">069</span><span id="line-69">          out.beginObject();</span>
+<span class="source-line-no">070</span><span id="line-70">          out.name("mean").value(snapshot.getMean());</span>
+<span class="source-line-no">071</span><span id="line-71">          out.name("min").value(snapshot.getMin());</span>
+<span class="source-line-no">072</span><span id="line-72">          out.name("max").value(snapshot.getMax());</span>
+<span class="source-line-no">073</span><span id="line-73">          out.name("75thPercentile").value(snapshot.get75thPercentile());</span>
+<span class="source-line-no">074</span><span id="line-74">          out.name("95thPercentile").value(snapshot.get95thPercentile());</span>
+<span class="source-line-no">075</span><span id="line-75">          out.name("98thPercentile").value(snapshot.get98thPercentile());</span>
+<span class="source-line-no">076</span><span id="line-76">          out.name("99thPercentile").value(snapshot.get99thPercentile());</span>
+<span class="source-line-no">077</span><span id="line-77">          out.name("999thPercentile").value(snapshot.get999thPercentile());</span>
+<span class="source-line-no">078</span><span id="line-78">          out.endObject();</span>
+<span class="source-line-no">079</span><span id="line-79">        }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81">        @Override</span>
+<span class="source-line-no">082</span><span id="line-82">        public FastLongHistogram read(JsonReader in) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83">          throw new UnsupportedOperationException();</span>
+<span class="source-line-no">084</span><span id="line-84">        }</span>
+<span class="source-line-no">085</span><span id="line-85">      }).setPrettyPrinting().create();</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87">  /** Returns The block content as String. */</span>
+<span class="source-line-no">088</span><span id="line-88">  public static String toString(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">089</span><span id="line-89">    return "filename=" + cb.getFilename() + ", " + toStringMinusFileName(cb, now);</span>
+<span class="source-line-no">090</span><span id="line-90">  }</span>
+<span class="source-line-no">091</span><span id="line-91"></span>
+<span class="source-line-no">092</span><span id="line-92">  /**</span>
+<span class="source-line-no">093</span><span id="line-93">   * Little data structure to hold counts for a file. Used doing a toJSON.</span>
+<span class="source-line-no">094</span><span id="line-94">   */</span>
+<span class="source-line-no">095</span><span id="line-95">  static class CachedBlockCountsPerFile {</span>
+<span class="source-line-no">096</span><span id="line-96">    private int count = 0;</span>
+<span class="source-line-no">097</span><span id="line-97">    private long size = 0;</span>
+<span class="source-line-no">098</span><span id="line-98">    private int countData = 0;</span>
+<span class="source-line-no">099</span><span id="line-99">    private long sizeData = 0;</span>
+<span class="source-line-no">100</span><span id="line-100">    private final String filename;</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102">    CachedBlockCountsPerFile(final String filename) {</span>
+<span class="source-line-no">103</span><span id="line-103">      this.filename = filename;</span>
+<span class="source-line-no">104</span><span id="line-104">    }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106">    public int getCount() {</span>
+<span class="source-line-no">107</span><span id="line-107">      return count;</span>
+<span class="source-line-no">108</span><span id="line-108">    }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">    public long getSize() {</span>
+<span class="source-line-no">111</span><span id="line-111">      return size;</span>
+<span class="source-line-no">112</span><span id="line-112">    }</span>
+<span class="source-line-no">113</span><span id="line-113"></span>
+<span class="source-line-no">114</span><span id="line-114">    public int getCountData() {</span>
+<span class="source-line-no">115</span><span id="line-115">      return countData;</span>
+<span class="source-line-no">116</span><span id="line-116">    }</span>
+<span class="source-line-no">117</span><span id="line-117"></span>
+<span class="source-line-no">118</span><span id="line-118">    public long getSizeData() {</span>
+<span class="source-line-no">119</span><span id="line-119">      return sizeData;</span>
+<span class="source-line-no">120</span><span id="line-120">    }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">    public String getFilename() {</span>
+<span class="source-line-no">123</span><span id="line-123">      return filename;</span>
+<span class="source-line-no">124</span><span id="line-124">    }</span>
+<span class="source-line-no">125</span><span id="line-125">  }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127">  /** Returns A JSON String of &lt;code&gt;filename&lt;/code&gt; and counts of &lt;code&gt;blocks&lt;/code&gt; */</span>
+<span class="source-line-no">128</span><span id="line-128">  public static String toJSON(String filename, NavigableSet&lt;CachedBlock&gt; blocks)</span>
+<span class="source-line-no">129</span><span id="line-129">    throws IOException {</span>
+<span class="source-line-no">130</span><span id="line-130">    CachedBlockCountsPerFile counts = new CachedBlockCountsPerFile(filename);</span>
+<span class="source-line-no">131</span><span id="line-131">    for (CachedBlock cb : blocks) {</span>
+<span class="source-line-no">132</span><span id="line-132">      counts.count++;</span>
+<span class="source-line-no">133</span><span id="line-133">      counts.size += cb.getSize();</span>
+<span class="source-line-no">134</span><span id="line-134">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">135</span><span id="line-135">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">136</span><span id="line-136">        counts.countData++;</span>
+<span class="source-line-no">137</span><span id="line-137">        counts.sizeData += cb.getSize();</span>
+<span class="source-line-no">138</span><span id="line-138">      }</span>
+<span class="source-line-no">139</span><span id="line-139">    }</span>
+<span class="source-line-no">140</span><span id="line-140">    return GSON.toJson(counts);</span>
+<span class="source-line-no">141</span><span id="line-141">  }</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143">  /** Returns JSON string of &lt;code&gt;cbsf&lt;/code&gt; aggregated */</span>
+<span class="source-line-no">144</span><span id="line-144">  public static String toJSON(CachedBlocksByFile cbsbf) throws IOException {</span>
+<span class="source-line-no">145</span><span id="line-145">    return GSON.toJson(cbsbf);</span>
+<span class="source-line-no">146</span><span id="line-146">  }</span>
+<span class="source-line-no">147</span><span id="line-147"></span>
+<span class="source-line-no">148</span><span id="line-148">  /** Returns JSON string of &lt;code&gt;bc&lt;/code&gt; content. */</span>
+<span class="source-line-no">149</span><span id="line-149">  public static String toJSON(BlockCache bc) throws IOException {</span>
+<span class="source-line-no">150</span><span id="line-150">    return GSON.toJson(bc);</span>
+<span class="source-line-no">151</span><span id="line-151">  }</span>
+<span class="source-line-no">152</span><span id="line-152"></span>
+<span class="source-line-no">153</span><span id="line-153">  /** Returns The block content of &lt;code&gt;bc&lt;/code&gt; as a String minus the filename. */</span>
+<span class="source-line-no">154</span><span id="line-154">  public static String toStringMinusFileName(final CachedBlock cb, final long now) {</span>
+<span class="source-line-no">155</span><span id="line-155">    return "offset=" + cb.getOffset() + ", size=" + cb.getSize() + ", age="</span>
+<span class="source-line-no">156</span><span id="line-156">      + (now - cb.getCachedTime()) + ", type=" + cb.getBlockType() + ", priority="</span>
+<span class="source-line-no">157</span><span id="line-157">      + cb.getBlockPriority();</span>
+<span class="source-line-no">158</span><span id="line-158">  }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">  /**</span>
+<span class="source-line-no">161</span><span id="line-161">   * Get a {@link CachedBlocksByFile} instance and load it up by iterating content in</span>
+<span class="source-line-no">162</span><span id="line-162">   * {@link BlockCache}.</span>
+<span class="source-line-no">163</span><span id="line-163">   * @param conf Used to read configurations</span>
+<span class="source-line-no">164</span><span id="line-164">   * @param bc   Block Cache to iterate.</span>
+<span class="source-line-no">165</span><span id="line-165">   * @return Laoded up instance of CachedBlocksByFile</span>
+<span class="source-line-no">166</span><span id="line-166">   */</span>
+<span class="source-line-no">167</span><span id="line-167">  public static CachedBlocksByFile getLoadedCachedBlocksByFile(final Configuration conf,</span>
+<span class="source-line-no">168</span><span id="line-168">    final BlockCache bc) {</span>
+<span class="source-line-no">169</span><span id="line-169">    CachedBlocksByFile cbsbf = new CachedBlocksByFile(conf);</span>
+<span class="source-line-no">170</span><span id="line-170">    for (CachedBlock cb : bc) {</span>
+<span class="source-line-no">171</span><span id="line-171">      if (cbsbf.update(cb)) break;</span>
+<span class="source-line-no">172</span><span id="line-172">    }</span>
+<span class="source-line-no">173</span><span id="line-173">    return cbsbf;</span>
+<span class="source-line-no">174</span><span id="line-174">  }</span>
+<span class="source-line-no">175</span><span id="line-175"></span>
+<span class="source-line-no">176</span><span id="line-176">  private static int compareCacheBlock(Cacheable left, Cacheable right,</span>
+<span class="source-line-no">177</span><span id="line-177">    boolean includeNextBlockMetadata) {</span>
+<span class="source-line-no">178</span><span id="line-178">    ByteBuffer l = ByteBuffer.allocate(left.getSerializedLength());</span>
+<span class="source-line-no">179</span><span id="line-179">    left.serialize(l, includeNextBlockMetadata);</span>
+<span class="source-line-no">180</span><span id="line-180">    ByteBuffer r = ByteBuffer.allocate(right.getSerializedLength());</span>
+<span class="source-line-no">181</span><span id="line-181">    right.serialize(r, includeNextBlockMetadata);</span>
+<span class="source-line-no">182</span><span id="line-182">    return Bytes.compareTo(l.array(), l.arrayOffset(), l.limit(), r.array(), r.arrayOffset(),</span>
+<span class="source-line-no">183</span><span id="line-183">      r.limit());</span>
+<span class="source-line-no">184</span><span id="line-184">  }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186">  /**</span>
+<span class="source-line-no">187</span><span id="line-187">   * Validate that the existing and newBlock are the same without including the nextBlockMetadata,</span>
+<span class="source-line-no">188</span><span id="line-188">   * if not, throw an exception. If they are the same without the nextBlockMetadata, return the</span>
+<span class="source-line-no">189</span><span id="line-189">   * comparison.</span>
+<span class="source-line-no">190</span><span id="line-190">   * @param existing block that is existing in the cache.</span>
+<span class="source-line-no">191</span><span id="line-191">   * @param newBlock block that is trying to be cached.</span>
+<span class="source-line-no">192</span><span id="line-192">   * @param cacheKey the cache key of the blocks.</span>
+<span class="source-line-no">193</span><span id="line-193">   * @return comparison of the existing block to the newBlock.</span>
+<span class="source-line-no">194</span><span id="line-194">   */</span>
+<span class="source-line-no">195</span><span id="line-195">  public static int validateBlockAddition(Cacheable existing, Cacheable newBlock,</span>
+<span class="source-line-no">196</span><span id="line-196">    BlockCacheKey cacheKey) {</span>
+<span class="source-line-no">197</span><span id="line-197">    int comparison = compareCacheBlock(existing, newBlock, false);</span>
+<span class="source-line-no">198</span><span id="line-198">    if (comparison != 0) {</span>
+<span class="source-line-no">199</span><span id="line-199">      throw new RuntimeException(</span>
+<span class="source-line-no">200</span><span id="line-200">        "Cached block contents differ, which should not have happened." + "cacheKey:" + cacheKey);</span>
+<span class="source-line-no">201</span><span id="line-201">    }</span>
+<span class="source-line-no">202</span><span id="line-202">    if ((existing instanceof HFileBlock) &amp;&amp; (newBlock instanceof HFileBlock)) {</span>
+<span class="source-line-no">203</span><span id="line-203">      comparison = ((HFileBlock) existing).getNextBlockOnDiskSize()</span>
+<span class="source-line-no">204</span><span id="line-204">        - ((HFileBlock) newBlock).getNextBlockOnDiskSize();</span>
+<span class="source-line-no">205</span><span id="line-205">    }</span>
+<span class="source-line-no">206</span><span id="line-206">    return comparison;</span>
+<span class="source-line-no">207</span><span id="line-207">  }</span>
+<span class="source-line-no">208</span><span id="line-208"></span>
+<span class="source-line-no">209</span><span id="line-209">  /**</span>
+<span class="source-line-no">210</span><span id="line-210">   * Because of the region splitting, it's possible that the split key locate in the middle of a</span>
+<span class="source-line-no">211</span><span id="line-211">   * block. So it's possible that both the daughter regions load the same block from their parent</span>
+<span class="source-line-no">212</span><span id="line-212">   * HFile. When pread, we don't force the read to read all of the next block header. So when two</span>
+<span class="source-line-no">213</span><span id="line-213">   * threads try to cache the same block, it's possible that one thread read all of the next block</span>
+<span class="source-line-no">214</span><span id="line-214">   * header but the other one didn't. if the already cached block hasn't next block header but the</span>
+<span class="source-line-no">215</span><span id="line-215">   * new block to cache has, then we can replace the existing block with the new block for better</span>
+<span class="source-line-no">216</span><span id="line-216">   * performance.(HBASE-20447)</span>
+<span class="source-line-no">217</span><span id="line-217">   * @param blockCache BlockCache to check</span>
+<span class="source-line-no">218</span><span id="line-218">   * @param cacheKey   the block cache key</span>
+<span class="source-line-no">219</span><span id="line-219">   * @param newBlock   the new block which try to put into the block cache.</span>
+<span class="source-line-no">220</span><span id="line-220">   * @return true means need to replace existing block with new block for the same block cache key.</span>
+<span class="source-line-no">221</span><span id="line-221">   *         false means just keep the existing block.</span>
+<span class="source-line-no">222</span><span id="line-222">   */</span>
+<span class="source-line-no">223</span><span id="line-223">  public static boolean shouldReplaceExistingCacheBlock(BlockCache blockCache,</span>
+<span class="source-line-no">224</span><span id="line-224">    BlockCacheKey cacheKey, Cacheable newBlock) {</span>
+<span class="source-line-no">225</span><span id="line-225">    // NOTICE: The getBlock has retained the existingBlock inside.</span>
+<span class="source-line-no">226</span><span id="line-226">    Cacheable existingBlock = blockCache.getBlock(cacheKey, false, false, false);</span>
+<span class="source-line-no">227</span><span id="line-227">    if (existingBlock == null) {</span>
+<span class="source-line-no">228</span><span id="line-228">      return true;</span>
+<span class="source-line-no">229</span><span id="line-229">    }</span>
+<span class="source-line-no">230</span><span id="line-230">    try {</span>
+<span class="source-line-no">231</span><span id="line-231">      int comparison = BlockCacheUtil.validateBlockAddition(existingBlock, newBlock, cacheKey);</span>
+<span class="source-line-no">232</span><span id="line-232">      if (comparison &lt; 0) {</span>
+<span class="source-line-no">233</span><span id="line-233">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the new block has "</span>
+<span class="source-line-no">234</span><span id="line-234">          + "nextBlockOnDiskSize set. Caching new block.");</span>
+<span class="source-line-no">235</span><span id="line-235">        return true;</span>
+<span class="source-line-no">236</span><span id="line-236">      } else if (comparison &gt; 0) {</span>
+<span class="source-line-no">237</span><span id="line-237">        LOG.warn("Cached block contents differ by nextBlockOnDiskSize, the existing block has "</span>
+<span class="source-line-no">238</span><span id="line-238">          + "nextBlockOnDiskSize set, Keeping cached block.");</span>
+<span class="source-line-no">239</span><span id="line-239">        return false;</span>
+<span class="source-line-no">240</span><span id="line-240">      } else {</span>
+<span class="source-line-no">241</span><span id="line-241">        LOG.debug("Caching an already cached block: {}. This is harmless and can happen in rare "</span>
+<span class="source-line-no">242</span><span id="line-242">          + "cases (see HBASE-8547)", cacheKey);</span>
+<span class="source-line-no">243</span><span id="line-243">        return false;</span>
+<span class="source-line-no">244</span><span id="line-244">      }</span>
+<span class="source-line-no">245</span><span id="line-245">    } finally {</span>
+<span class="source-line-no">246</span><span id="line-246">      // Release this block to decrement the reference count.</span>
+<span class="source-line-no">247</span><span id="line-247">      existingBlock.release();</span>
+<span class="source-line-no">248</span><span id="line-248">    }</span>
+<span class="source-line-no">249</span><span id="line-249">  }</span>
+<span class="source-line-no">250</span><span id="line-250"></span>
+<span class="source-line-no">251</span><span id="line-251">  public static Set&lt;String&gt; listAllFilesNames(Map&lt;String, HRegion&gt; onlineRegions) {</span>
+<span class="source-line-no">252</span><span id="line-252">    Set&lt;String&gt; files = new HashSet&lt;&gt;();</span>
+<span class="source-line-no">253</span><span id="line-253">    onlineRegions.values().forEach(r -&gt; {</span>
+<span class="source-line-no">254</span><span id="line-254">      r.getStores().forEach(s -&gt; {</span>
+<span class="source-line-no">255</span><span id="line-255">        s.getStorefiles().forEach(f -&gt; files.add(f.getPath().getName()));</span>
+<span class="source-line-no">256</span><span id="line-256">      });</span>
+<span class="source-line-no">257</span><span id="line-257">    });</span>
+<span class="source-line-no">258</span><span id="line-258">    return files;</span>
+<span class="source-line-no">259</span><span id="line-259">  }</span>
 <span class="source-line-no">260</span><span id="line-260"></span>
-<span class="source-line-no">261</span><span id="line-261">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
-<span class="source-line-no">262</span><span id="line-262">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
-<span class="source-line-no">263</span><span id="line-263">  }</span>
-<span class="source-line-no">264</span><span id="line-264"></span>
-<span class="source-line-no">265</span><span id="line-265">  /**</span>
-<span class="source-line-no">266</span><span id="line-266">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
-<span class="source-line-no">267</span><span id="line-267">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
-<span class="source-line-no">268</span><span id="line-268">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
-<span class="source-line-no">269</span><span id="line-269">   * may already have been cached at write time.</span>
-<span class="source-line-no">270</span><span id="line-270">   * @param cacheConf the related CacheConfig object.</span>
-<span class="source-line-no">271</span><span id="line-271">   * @param block     the HFileBlock instance to be converted.</span>
-<span class="source-line-no">272</span><span id="line-272">   * @return the resulting HFileBlock instance without checksum.</span>
-<span class="source-line-no">273</span><span id="line-273">   */</span>
-<span class="source-line-no">274</span><span id="line-274">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
-<span class="source-line-no">275</span><span id="line-275">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
-<span class="source-line-no">276</span><span id="line-276">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
-<span class="source-line-no">277</span><span id="line-277">      ? 0</span>
-<span class="source-line-no">278</span><span id="line-278">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
-<span class="source-line-no">279</span><span id="line-279">        block.getHFileContext().getBytesPerChecksum());</span>
-<span class="source-line-no">280</span><span id="line-280">    ByteBuff buff = block.getBufferReadOnly();</span>
-<span class="source-line-no">281</span><span id="line-281">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
-<span class="source-line-no">282</span><span id="line-282">    return builder.withBlockType(block.getBlockType())</span>
-<span class="source-line-no">283</span><span id="line-283">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
-<span class="source-line-no">284</span><span id="line-284">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
-<span class="source-line-no">285</span><span id="line-285">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
-<span class="source-line-no">286</span><span id="line-286">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
-<span class="source-line-no">287</span><span id="line-287">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
-<span class="source-line-no">288</span><span id="line-288">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
-<span class="source-line-no">289</span><span id="line-289">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
-<span class="source-line-no">290</span><span id="line-290">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
-<span class="source-line-no">291</span><span id="line-291">  }</span>
-<span class="source-line-no">292</span><span id="line-292"></span>
-<span class="source-line-no">293</span><span id="line-293">  public static HFileContext cloneContext(HFileContext context) {</span>
-<span class="source-line-no">294</span><span id="line-294">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
-<span class="source-line-no">295</span><span id="line-295">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
-<span class="source-line-no">296</span><span id="line-296">      .withCompression(context.getCompression())</span>
-<span class="source-line-no">297</span><span id="line-297">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
-<span class="source-line-no">298</span><span id="line-298">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
-<span class="source-line-no">299</span><span id="line-299">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
-<span class="source-line-no">300</span><span id="line-300">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
-<span class="source-line-no">301</span><span id="line-301">    return newContext;</span>
-<span class="source-line-no">302</span><span id="line-302">  }</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304">  /**</span>
-<span class="source-line-no">305</span><span id="line-305">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
-<span class="source-line-no">306</span><span id="line-306">   * This is different than metrics in that it is stats on current state of a cache. See</span>
-<span class="source-line-no">307</span><span id="line-307">   * getLoadedCachedBlocksByFile</span>
-<span class="source-line-no">308</span><span id="line-308">   */</span>
-<span class="source-line-no">309</span><span id="line-309">  public static class CachedBlocksByFile {</span>
-<span class="source-line-no">310</span><span id="line-310">    private int count;</span>
-<span class="source-line-no">311</span><span id="line-311">    private int dataBlockCount;</span>
-<span class="source-line-no">312</span><span id="line-312">    private long size;</span>
-<span class="source-line-no">313</span><span id="line-313">    private long dataSize;</span>
-<span class="source-line-no">314</span><span id="line-314">    private final long now = System.nanoTime();</span>
-<span class="source-line-no">315</span><span id="line-315">    /**</span>
-<span class="source-line-no">316</span><span id="line-316">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
-<span class="source-line-no">317</span><span id="line-317">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
-<span class="source-line-no">318</span><span id="line-318">     * displays warning in red when stats are incomplete.</span>
-<span class="source-line-no">319</span><span id="line-319">     */</span>
-<span class="source-line-no">320</span><span id="line-320">    private final int max;</span>
-<span class="source-line-no">321</span><span id="line-321"></span>
-<span class="source-line-no">322</span><span id="line-322">    CachedBlocksByFile() {</span>
-<span class="source-line-no">323</span><span id="line-323">      this(null);</span>
-<span class="source-line-no">324</span><span id="line-324">    }</span>
-<span class="source-line-no">325</span><span id="line-325"></span>
-<span class="source-line-no">326</span><span id="line-326">    CachedBlocksByFile(final Configuration c) {</span>
-<span class="source-line-no">327</span><span id="line-327">      this.max = getMaxCachedBlocksByFile(c);</span>
-<span class="source-line-no">328</span><span id="line-328">    }</span>
-<span class="source-line-no">329</span><span id="line-329"></span>
-<span class="source-line-no">330</span><span id="line-330">    /**</span>
-<span class="source-line-no">331</span><span id="line-331">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
-<span class="source-line-no">332</span><span id="line-332">     */</span>
-<span class="source-line-no">333</span><span id="line-333">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
-<span class="source-line-no">334</span><span id="line-334">      new ConcurrentSkipListMap&lt;&gt;();</span>
-<span class="source-line-no">335</span><span id="line-335">    FastLongHistogram hist = new FastLongHistogram();</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337">    /** Returns True if full.... if we won't be adding any more. */</span>
-<span class="source-line-no">338</span><span id="line-338">    public boolean update(final CachedBlock cb) {</span>
-<span class="source-line-no">339</span><span id="line-339">      if (isFull()) return true;</span>
-<span class="source-line-no">340</span><span id="line-340">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
-<span class="source-line-no">341</span><span id="line-341">      if (set == null) {</span>
-<span class="source-line-no">342</span><span id="line-342">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
-<span class="source-line-no">343</span><span id="line-343">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
-<span class="source-line-no">344</span><span id="line-344">      }</span>
-<span class="source-line-no">345</span><span id="line-345">      set.add(cb);</span>
-<span class="source-line-no">346</span><span id="line-346">      this.size += cb.getSize();</span>
-<span class="source-line-no">347</span><span id="line-347">      this.count++;</span>
-<span class="source-line-no">348</span><span id="line-348">      BlockType bt = cb.getBlockType();</span>
-<span class="source-line-no">349</span><span id="line-349">      if (bt != null &amp;&amp; bt.isData()) {</span>
-<span class="source-line-no">350</span><span id="line-350">        this.dataBlockCount++;</span>
-<span class="source-line-no">351</span><span id="line-351">        this.dataSize += cb.getSize();</span>
-<span class="source-line-no">352</span><span id="line-352">      }</span>
-<span class="source-line-no">353</span><span id="line-353">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
-<span class="source-line-no">354</span><span id="line-354">      this.hist.add(age, 1);</span>
-<span class="source-line-no">355</span><span id="line-355">      return false;</span>
-<span class="source-line-no">356</span><span id="line-356">    }</span>
-<span class="source-line-no">357</span><span id="line-357"></span>
-<span class="source-line-no">358</span><span id="line-358">    /**</span>
-<span class="source-line-no">359</span><span id="line-359">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
-<span class="source-line-no">360</span><span id="line-360">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
-<span class="source-line-no">361</span><span id="line-361">     *         DEFAULT_MAX).</span>
-<span class="source-line-no">362</span><span id="line-362">     */</span>
-<span class="source-line-no">363</span><span id="line-363">    public boolean isFull() {</span>
-<span class="source-line-no">364</span><span id="line-364">      return this.count &gt;= this.max;</span>
-<span class="source-line-no">365</span><span id="line-365">    }</span>
-<span class="source-line-no">366</span><span id="line-366"></span>
-<span class="source-line-no">367</span><span id="line-367">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
-<span class="source-line-no">368</span><span id="line-368">      return this.cachedBlockByFile;</span>
-<span class="source-line-no">369</span><span id="line-369">    }</span>
-<span class="source-line-no">370</span><span id="line-370"></span>
-<span class="source-line-no">371</span><span id="line-371">    /** Returns count of blocks in the cache */</span>
-<span class="source-line-no">372</span><span id="line-372">    public int getCount() {</span>
-<span class="source-line-no">373</span><span id="line-373">      return count;</span>
-<span class="source-line-no">374</span><span id="line-374">    }</span>
-<span class="source-line-no">375</span><span id="line-375"></span>
-<span class="source-line-no">376</span><span id="line-376">    public int getDataCount() {</span>
-<span class="source-line-no">377</span><span id="line-377">      return dataBlockCount;</span>
-<span class="source-line-no">378</span><span id="line-378">    }</span>
-<span class="source-line-no">379</span><span id="line-379"></span>
-<span class="source-line-no">380</span><span id="line-380">    /** Returns size of blocks in the cache */</span>
-<span class="source-line-no">381</span><span id="line-381">    public long getSize() {</span>
-<span class="source-line-no">382</span><span id="line-382">      return size;</span>
-<span class="source-line-no">383</span><span id="line-383">    }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">    /** Returns Size of data. */</span>
-<span class="source-line-no">386</span><span id="line-386">    public long getDataSize() {</span>
-<span class="source-line-no">387</span><span id="line-387">      return dataSize;</span>
-<span class="source-line-no">388</span><span id="line-388">    }</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
-<span class="source-line-no">391</span><span id="line-391">      return new AgeSnapshot(this.hist);</span>
-<span class="source-line-no">392</span><span id="line-392">    }</span>
-<span class="source-line-no">393</span><span id="line-393"></span>
-<span class="source-line-no">394</span><span id="line-394">    @Override</span>
-<span class="source-line-no">395</span><span id="line-395">    public String toString() {</span>
-<span class="source-line-no">396</span><span id="line-396">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
-<span class="source-line-no">397</span><span id="line-397">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
-<span class="source-line-no">398</span><span id="line-398">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
-<span class="source-line-no">399</span><span id="line-399">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
-<span class="source-line-no">400</span><span id="line-400">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
-<span class="source-line-no">401</span><span id="line-401">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
-<span class="source-line-no">402</span><span id="line-402">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
-<span class="source-line-no">403</span><span id="line-403">    }</span>
-<span class="source-line-no">404</span><span id="line-404">  }</span>
-<span class="source-line-no">405</span><span id="line-405">}</span>
+<span class="source-line-no">261</span><span id="line-261">  private static final int DEFAULT_MAX = 1000000;</span>
+<span class="source-line-no">262</span><span id="line-262"></span>
+<span class="source-line-no">263</span><span id="line-263">  public static int getMaxCachedBlocksByFile(Configuration conf) {</span>
+<span class="source-line-no">264</span><span id="line-264">    return conf == null ? DEFAULT_MAX : conf.getInt("hbase.ui.blockcache.by.file.max", DEFAULT_MAX);</span>
+<span class="source-line-no">265</span><span id="line-265">  }</span>
+<span class="source-line-no">266</span><span id="line-266"></span>
+<span class="source-line-no">267</span><span id="line-267">  /**</span>
+<span class="source-line-no">268</span><span id="line-268">   * Similarly to HFileBlock.Writer.getBlockForCaching(), creates a HFileBlock instance without</span>
+<span class="source-line-no">269</span><span id="line-269">   * checksum for caching. This is needed for when we cache blocks via readers (either prefetch or</span>
+<span class="source-line-no">270</span><span id="line-270">   * client read), otherwise we may fail equality comparison when checking against same block that</span>
+<span class="source-line-no">271</span><span id="line-271">   * may already have been cached at write time.</span>
+<span class="source-line-no">272</span><span id="line-272">   * @param cacheConf the related CacheConfig object.</span>
+<span class="source-line-no">273</span><span id="line-273">   * @param block     the HFileBlock instance to be converted.</span>
+<span class="source-line-no">274</span><span id="line-274">   * @return the resulting HFileBlock instance without checksum.</span>
+<span class="source-line-no">275</span><span id="line-275">   */</span>
+<span class="source-line-no">276</span><span id="line-276">  public static HFileBlock getBlockForCaching(CacheConfig cacheConf, HFileBlock block) {</span>
+<span class="source-line-no">277</span><span id="line-277">    // Calculate how many bytes we need for checksum on the tail of the block.</span>
+<span class="source-line-no">278</span><span id="line-278">    int numBytes = cacheConf.shouldCacheCompressed(block.getBlockType().getCategory())</span>
+<span class="source-line-no">279</span><span id="line-279">      ? 0</span>
+<span class="source-line-no">280</span><span id="line-280">      : (int) ChecksumUtil.numBytes(block.getOnDiskDataSizeWithHeader(),</span>
+<span class="source-line-no">281</span><span id="line-281">        block.getHFileContext().getBytesPerChecksum());</span>
+<span class="source-line-no">282</span><span id="line-282">    ByteBuff buff = block.getBufferReadOnly();</span>
+<span class="source-line-no">283</span><span id="line-283">    HFileBlockBuilder builder = new HFileBlockBuilder();</span>
+<span class="source-line-no">284</span><span id="line-284">    return builder.withBlockType(block.getBlockType())</span>
+<span class="source-line-no">285</span><span id="line-285">      .withOnDiskSizeWithoutHeader(block.getOnDiskSizeWithoutHeader())</span>
+<span class="source-line-no">286</span><span id="line-286">      .withUncompressedSizeWithoutHeader(block.getUncompressedSizeWithoutHeader())</span>
+<span class="source-line-no">287</span><span id="line-287">      .withPrevBlockOffset(block.getPrevBlockOffset()).withByteBuff(buff)</span>
+<span class="source-line-no">288</span><span id="line-288">      .withFillHeader(FILL_HEADER).withOffset(block.getOffset()).withNextBlockOnDiskSize(-1)</span>
+<span class="source-line-no">289</span><span id="line-289">      .withOnDiskDataSizeWithHeader(block.getOnDiskDataSizeWithHeader() + numBytes)</span>
+<span class="source-line-no">290</span><span id="line-290">      .withNextBlockOnDiskSize(block.getNextBlockOnDiskSize())</span>
+<span class="source-line-no">291</span><span id="line-291">      .withHFileContext(cloneContext(block.getHFileContext()))</span>
+<span class="source-line-no">292</span><span id="line-292">      .withByteBuffAllocator(cacheConf.getByteBuffAllocator()).withShared(!buff.hasArray()).build();</span>
+<span class="source-line-no">293</span><span id="line-293">  }</span>
+<span class="source-line-no">294</span><span id="line-294"></span>
+<span class="source-line-no">295</span><span id="line-295">  public static HFileContext cloneContext(HFileContext context) {</span>
+<span class="source-line-no">296</span><span id="line-296">    HFileContext newContext = new HFileContextBuilder().withBlockSize(context.getBlocksize())</span>
+<span class="source-line-no">297</span><span id="line-297">      .withBytesPerCheckSum(0).withChecksumType(ChecksumType.NULL) // no checksums in cached data</span>
+<span class="source-line-no">298</span><span id="line-298">      .withCompression(context.getCompression())</span>
+<span class="source-line-no">299</span><span id="line-299">      .withDataBlockEncoding(context.getDataBlockEncoding())</span>
+<span class="source-line-no">300</span><span id="line-300">      .withHBaseCheckSum(context.isUseHBaseChecksum()).withCompressTags(context.isCompressTags())</span>
+<span class="source-line-no">301</span><span id="line-301">      .withIncludesMvcc(context.isIncludesMvcc()).withIncludesTags(context.isIncludesTags())</span>
+<span class="source-line-no">302</span><span id="line-302">      .withColumnFamily(context.getColumnFamily()).withTableName(context.getTableName()).build();</span>
+<span class="source-line-no">303</span><span id="line-303">    return newContext;</span>
+<span class="source-line-no">304</span><span id="line-304">  }</span>
+<span class="source-line-no">305</span><span id="line-305"></span>
+<span class="source-line-no">306</span><span id="line-306">  /**</span>
+<span class="source-line-no">307</span><span id="line-307">   * Use one of these to keep a running account of cached blocks by file. Throw it away when done.</span>
+<span class="source-line-no">308</span><span id="line-308">   * This is different than metrics in that it is stats on current state of a cache. See</span>
+<span class="source-line-no">309</span><span id="line-309">   * getLoadedCachedBlocksByFile</span>
+<span class="source-line-no">310</span><span id="line-310">   */</span>
+<span class="source-line-no">311</span><span id="line-311">  public static class CachedBlocksByFile {</span>
+<span class="source-line-no">312</span><span id="line-312">    private int count;</span>
+<span class="source-line-no">313</span><span id="line-313">    private int dataBlockCount;</span>
+<span class="source-line-no">314</span><span id="line-314">    private long size;</span>
+<span class="source-line-no">315</span><span id="line-315">    private long dataSize;</span>
+<span class="source-line-no">316</span><span id="line-316">    private final long now = System.nanoTime();</span>
+<span class="source-line-no">317</span><span id="line-317">    /**</span>
+<span class="source-line-no">318</span><span id="line-318">     * How many blocks to look at before we give up. There could be many millions of blocks. We</span>
+<span class="source-line-no">319</span><span id="line-319">     * don't want the ui to freeze while we run through 1B blocks... users will think hbase dead. UI</span>
+<span class="source-line-no">320</span><span id="line-320">     * displays warning in red when stats are incomplete.</span>
+<span class="source-line-no">321</span><span id="line-321">     */</span>
+<span class="source-line-no">322</span><span id="line-322">    private final int max;</span>
+<span class="source-line-no">323</span><span id="line-323"></span>
+<span class="source-line-no">324</span><span id="line-324">    CachedBlocksByFile() {</span>
+<span class="source-line-no">325</span><span id="line-325">      this(null);</span>
+<span class="source-line-no">326</span><span id="line-326">    }</span>
+<span class="source-line-no">327</span><span id="line-327"></span>
+<span class="source-line-no">328</span><span id="line-328">    CachedBlocksByFile(final Configuration c) {</span>
+<span class="source-line-no">329</span><span id="line-329">      this.max = getMaxCachedBlocksByFile(c);</span>
+<span class="source-line-no">330</span><span id="line-330">    }</span>
+<span class="source-line-no">331</span><span id="line-331"></span>
+<span class="source-line-no">332</span><span id="line-332">    /**</span>
+<span class="source-line-no">333</span><span id="line-333">     * Map by filename. use concurent utils because we want our Map and contained blocks sorted.</span>
+<span class="source-line-no">334</span><span id="line-334">     */</span>
+<span class="source-line-no">335</span><span id="line-335">    private transient NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; cachedBlockByFile =</span>
+<span class="source-line-no">336</span><span id="line-336">      new ConcurrentSkipListMap&lt;&gt;();</span>
+<span class="source-line-no">337</span><span id="line-337">    FastLongHistogram hist = new FastLongHistogram();</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339">    /** Returns True if full.... if we won't be adding any more. */</span>
+<span class="source-line-no">340</span><span id="line-340">    public boolean update(final CachedBlock cb) {</span>
+<span class="source-line-no">341</span><span id="line-341">      if (isFull()) return true;</span>
+<span class="source-line-no">342</span><span id="line-342">      NavigableSet&lt;CachedBlock&gt; set = this.cachedBlockByFile.get(cb.getFilename());</span>
+<span class="source-line-no">343</span><span id="line-343">      if (set == null) {</span>
+<span class="source-line-no">344</span><span id="line-344">        set = new ConcurrentSkipListSet&lt;&gt;();</span>
+<span class="source-line-no">345</span><span id="line-345">        this.cachedBlockByFile.put(cb.getFilename(), set);</span>
+<span class="source-line-no">346</span><span id="line-346">      }</span>
+<span class="source-line-no">347</span><span id="line-347">      set.add(cb);</span>
+<span class="source-line-no">348</span><span id="line-348">      this.size += cb.getSize();</span>
+<span class="source-line-no">349</span><span id="line-349">      this.count++;</span>
+<span class="source-line-no">350</span><span id="line-350">      BlockType bt = cb.getBlockType();</span>
+<span class="source-line-no">351</span><span id="line-351">      if (bt != null &amp;&amp; bt.isData()) {</span>
+<span class="source-line-no">352</span><span id="line-352">        this.dataBlockCount++;</span>
+<span class="source-line-no">353</span><span id="line-353">        this.dataSize += cb.getSize();</span>
+<span class="source-line-no">354</span><span id="line-354">      }</span>
+<span class="source-line-no">355</span><span id="line-355">      long age = (this.now - cb.getCachedTime()) / NANOS_PER_SECOND;</span>
+<span class="source-line-no">356</span><span id="line-356">      this.hist.add(age, 1);</span>
+<span class="source-line-no">357</span><span id="line-357">      return false;</span>
+<span class="source-line-no">358</span><span id="line-358">    }</span>
+<span class="source-line-no">359</span><span id="line-359"></span>
+<span class="source-line-no">360</span><span id="line-360">    /**</span>
+<span class="source-line-no">361</span><span id="line-361">     * @return True if full; i.e. there are more items in the cache but we only loaded up the</span>
+<span class="source-line-no">362</span><span id="line-362">     *         maximum set in configuration &lt;code&gt;hbase.ui.blockcache.by.file.max&lt;/code&gt; (Default:</span>
+<span class="source-line-no">363</span><span id="line-363">     *         DEFAULT_MAX).</span>
+<span class="source-line-no">364</span><span id="line-364">     */</span>
+<span class="source-line-no">365</span><span id="line-365">    public boolean isFull() {</span>
+<span class="source-line-no">366</span><span id="line-366">      return this.count &gt;= this.max;</span>
+<span class="source-line-no">367</span><span id="line-367">    }</span>
+<span class="source-line-no">368</span><span id="line-368"></span>
+<span class="source-line-no">369</span><span id="line-369">    public NavigableMap&lt;String, NavigableSet&lt;CachedBlock&gt;&gt; getCachedBlockStatsByFile() {</span>
+<span class="source-line-no">370</span><span id="line-370">      return this.cachedBlockByFile;</span>
+<span class="source-line-no">371</span><span id="line-371">    }</span>
+<span class="source-line-no">372</span><span id="line-372"></span>
+<span class="source-line-no">373</span><span id="line-373">    /** Returns count of blocks in the cache */</span>
+<span class="source-line-no">374</span><span id="line-374">    public int getCount() {</span>
+<span class="source-line-no">375</span><span id="line-375">      return count;</span>
+<span class="source-line-no">376</span><span id="line-376">    }</span>
+<span class="source-line-no">377</span><span id="line-377"></span>
+<span class="source-line-no">378</span><span id="line-378">    public int getDataCount() {</span>
+<span class="source-line-no">379</span><span id="line-379">      return dataBlockCount;</span>
+<span class="source-line-no">380</span><span id="line-380">    }</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382">    /** Returns size of blocks in the cache */</span>
+<span class="source-line-no">383</span><span id="line-383">    public long getSize() {</span>
+<span class="source-line-no">384</span><span id="line-384">      return size;</span>
+<span class="source-line-no">385</span><span id="line-385">    }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387">    /** Returns Size of data. */</span>
+<span class="source-line-no">388</span><span id="line-388">    public long getDataSize() {</span>
+<span class="source-line-no">389</span><span id="line-389">      return dataSize;</span>
+<span class="source-line-no">390</span><span id="line-390">    }</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392">    public AgeSnapshot getAgeInCacheSnapshot() {</span>
+<span class="source-line-no">393</span><span id="line-393">      return new AgeSnapshot(this.hist);</span>
+<span class="source-line-no">394</span><span id="line-394">    }</span>
+<span class="source-line-no">395</span><span id="line-395"></span>
+<span class="source-line-no">396</span><span id="line-396">    @Override</span>
+<span class="source-line-no">397</span><span id="line-397">    public String toString() {</span>
+<span class="source-line-no">398</span><span id="line-398">      AgeSnapshot snapshot = getAgeInCacheSnapshot();</span>
+<span class="source-line-no">399</span><span id="line-399">      return "count=" + count + ", dataBlockCount=" + dataBlockCount + ", size=" + size</span>
+<span class="source-line-no">400</span><span id="line-400">        + ", dataSize=" + getDataSize() + ", mean age=" + snapshot.getMean() + ", min age="</span>
+<span class="source-line-no">401</span><span id="line-401">        + snapshot.getMin() + ", max age=" + snapshot.getMax() + ", 75th percentile age="</span>
+<span class="source-line-no">402</span><span id="line-402">        + snapshot.get75thPercentile() + ", 95th percentile age=" + snapshot.get95thPercentile()</span>
+<span class="source-line-no">403</span><span id="line-403">        + ", 98th percentile age=" + snapshot.get98thPercentile() + ", 99th percentile age="</span>
+<span class="source-line-no">404</span><span id="line-404">        + snapshot.get99thPercentile() + ", 99.9th percentile age=" + snapshot.get99thPercentile();</span>
+<span class="source-line-no">405</span><span id="line-405">    }</span>
+<span class="source-line-no">406</span><span id="line-406">  }</span>
+<span class="source-line-no">407</span><span id="line-407">}</span>
 
 
 
diff --git a/downloads.html b/downloads.html
index 630c7e62d95..3353ee69674 100644
--- a/downloads.html
+++ b/downloads.html
@@ -422,7 +422,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/export_control.html b/export_control.html
index 3201d400993..caf3db76408 100644
--- a/export_control.html
+++ b/export_control.html
@@ -210,7 +210,7 @@ for more details.</p>
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/index.html b/index.html
index 832ee0fd5f9..78c21391e1b 100644
--- a/index.html
+++ b/index.html
@@ -283,7 +283,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/issue-management.html b/issue-management.html
index 72ba14b6a8a..f41a6cdf6f2 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -181,7 +181,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/licenses.html b/licenses.html
index 9f631a250a9..1130cdda7b6 100644
--- a/licenses.html
+++ b/licenses.html
@@ -383,7 +383,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/mailing-lists.html b/mailing-lists.html
index 88d204a695f..41af77a627b 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -228,7 +228,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/metrics.html b/metrics.html
index eddcd98a9c9..3f9c6395de0 100644
--- a/metrics.html
+++ b/metrics.html
@@ -332,7 +332,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/old_news.html b/old_news.html
index 265d0f1b712..110c8f8d111 100644
--- a/old_news.html
+++ b/old_news.html
@@ -329,7 +329,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugin-management.html b/plugin-management.html
index a11ca1a88f5..3ba70efd8e8 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -338,7 +338,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugins.html b/plugins.html
index 51d5eac89d7..a7f9594d7af 100644
--- a/plugins.html
+++ b/plugins.html
@@ -276,7 +276,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 84070bbb640..274f3546f03 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -671,7 +671,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-info.html b/project-info.html
index b1cab0956ec..a06b8448ec8 100644
--- a/project-info.html
+++ b/project-info.html
@@ -225,7 +225,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-reports.html b/project-reports.html
index cc4e1f5b6f0..e031c4cd87f 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -198,7 +198,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index f61a3386b1f..9a0de04fc32 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -187,7 +187,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/replication.html b/replication.html
index cfb002d5016..249366a76bb 100644
--- a/replication.html
+++ b/replication.html
@@ -182,7 +182,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/resources.html b/resources.html
index c38e1e02c09..6f463db5027 100644
--- a/resources.html
+++ b/resources.html
@@ -205,7 +205,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/scm.html b/scm.html
index f4f1d486c6a..7448595af49 100644
--- a/scm.html
+++ b/scm.html
@@ -189,7 +189,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/sponsors.html b/sponsors.html
index efa81865812..d7077f7ed1f 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -211,7 +211,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/summary.html b/summary.html
index 35030b4c4c9..144eb5f536a 100644
--- a/summary.html
+++ b/summary.html
@@ -222,7 +222,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/supportingprojects.html b/supportingprojects.html
index aacaabac41b..355684fdd3c 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -401,7 +401,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/team.html b/team.html
index a836bf52470..a5db25dcd2d 100644
--- a/team.html
+++ b/team.html
@@ -856,7 +856,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-07-02
+        Last Published: 2025-07-07
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/testapidocs/index-all.html b/testapidocs/index-all.html
index b4ae7f1c772..e47b49092a5 100644
--- a/testapidocs/index-all.html
+++ b/testapidocs/index-all.html
@@ -619,7 +619,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithBulkLoad.html#afterClass()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">afterClass()</a> - Static method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithBulkLoad.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestIncrementalBackupMergeW [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#afterClass()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">afterClass()</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSide4</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#afterClass()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">afterClass()</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSideWithCoprocessor</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestAppendFromClientSide.html#afterClass()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">afterClass()</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestAppendFromClientSide.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestAppendFromClientSide</a></dt>
 <dd>&nbsp;</dd>
@@ -843,7 +843,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt>assertCounterLt(String, long, BaseSource) - Method in class org.apache.hadoop.hbase.test.MetricsAssertHelperImpl</dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertDoubleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertDoubleResult(Result, byte[], byte[], byte[], byte[], byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hb [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertDoubleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertDoubleResult(Result, byte[], byte[], byte[], byte[], byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/ap [...]
 <dd>
 <div class="block">Validate that result contains two specified keys, exactly.</div>
 </dd>
@@ -863,7 +863,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/TestMetaTableAccessor.html#assertEmptyMetaLocation(org.apache.hadoop.hbase.client.Table,byte%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">assertEmptyMetaLocation(Table, byte[], int)</a> - Static method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/TestMetaTableAccessor.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">T [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertEmptyResult(org.apache.hadoop.hbase.client.Result)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertEmptyResult(Result)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientS [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertEmptyResult(org.apache.hadoop.hbase.client.Result)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertEmptyResult(Result)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="ex [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#assertErrors(org.apache.hadoop.hbase.util.HBaseFsck,org.apache.hadoop.hbase.util.HbckErrorReporter.ERROR_CODE%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.util.hbck">assertErrors(HBaseFsck, HbckErrorReporter.ERROR_CODE[])</a> - Static method in class org.apache.hadoop.hbase.util.hbck.<a href="../apidocs/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.htm [...]
 <dd>&nbsp;</dd>
@@ -908,7 +908,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt>assertGaugeLt(String, long, BaseSource) - Method in class org.apache.hadoop.hbase.test.MetricsAssertHelperImpl</dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertKey(org.apache.hadoop.hbase.Cell,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertKey(Cell, byte[], byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hb [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertKey(org.apache.hadoop.hbase.Cell,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertKey(Cell, byte[], byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or inter [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/HBaseTestingUtil.html#assertKVListsEqual(java.lang.String,java.util.List,java.util.List)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">assertKVListsEqual(String, List&lt;? extends Cell&gt;, List&lt;? extends Cell&gt;)</a> - Static method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/HBaseTestingUtil.html" title="class or interface in org.apache.hadoop.hbase" clas [...]
 <dd>&nbsp;</dd>
@@ -924,13 +924,13 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/http/jmx/TestJMXJsonServlet.html#assertNotFind(java.lang.String,java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http.jmx">assertNotFind(String, String)</a> - Static method in class org.apache.hadoop.hbase.http.jmx.<a href="../apidocs/org/apache/hadoop/hbase/http/jmx/TestJMXJsonServlet.html" title="class or interface in org.apache.hadoop.hbase.http.jmx" class="external-link">Test [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertNResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,int%5B%5D%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNResult(Result, byte[], byte[][], byte[][], byte[][], int[][])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFro [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertNResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,int%5B%5D%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNResult(Result, byte[], byte[][], byte[][], byte[][], int[][])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/ [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertNResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNResult(Result, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromCli [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertNResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNResult(Result, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/clie [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertNullResult(org.apache.hadoop.hbase.client.Result)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNullResult(Result)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSid [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertNullResult(org.apache.hadoop.hbase.client.Result)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNullResult(Result)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="exte [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertNumKeys(org.apache.hadoop.hbase.client.Result,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNumKeys(Result, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClient [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertNumKeys(org.apache.hadoop.hbase.client.Result,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertNumKeys(Result, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="e [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.html#assertOneSnapshotThatMatches(org.apache.hadoop.hbase.client.Admin,byte%5B%5D,org.apache.hadoop.hbase.TableName)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">assertOneSnapshotThatMatches(Admin, byte[], TableName)</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.htm [...]
 <dd>
@@ -1003,7 +1003,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/RegionReplicaTestHelper.html#assertReplicaDistributed(org.apache.hadoop.hbase.HBaseTestingUtil,org.apache.hadoop.hbase.client.Table)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertReplicaDistributed(HBaseTestingUtil, Table)</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/RegionReplicaTestHelper.html" title="class [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertRowCount(org.apache.hadoop.hbase.client.Table,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertRowCount(Table, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClient [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertRowCount(org.apache.hadoop.hbase.client.Table,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertRowCount(Table, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="e [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestHRegion.html#assertScan(org.apache.hadoop.hbase.regionserver.HRegion,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">assertScan(HRegion, byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class or interface in org.apache.hadoop.hbase.regio [...]
 <dd>&nbsp;</dd>
@@ -1011,11 +1011,11 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.html#assertScannerResults(org.apache.hadoop.hbase.regionserver.KeyValueScanner,org.apache.hadoop.hbase.KeyValue%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">assertScannerResults(KeyValueScanner, KeyValue[])</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestDefaultMemStore [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertSingleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertSingleResult(Result, byte[], byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or inte [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertSingleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertSingleResult(Result, byte[], byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocesso [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertSingleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertSingleResult(Result, byte[], byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertSingleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertSingleResult(Result, byte[], byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html"  [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#assertSingleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,long,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertSingleResult(Result, byte[], byte[], byte[], long, byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="cl [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#assertSingleResult(org.apache.hadoop.hbase.client.Result,byte%5B%5D,byte%5B%5D,byte%5B%5D,long,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">assertSingleResult(Result, byte[], byte[], byte[], long, byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWit [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/hbtop/TestUtils.html#assertSummary(org.apache.hadoop.hbase.hbtop.screen.top.Summary)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.hbtop">assertSummary(Summary)</a> - Static method in class org.apache.hadoop.hbase.hbtop.<a href="../apidocs/org/apache/hadoop/hbase/hbtop/TestUtils.html" title="class or interface in org.apache.hadoop.hbase.hbtop" class="external-link">TestUtils</a></dt>
 <dd>&nbsp;</dd>
@@ -1619,7 +1619,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html#buildRowSpec(byte%5B%5D,java.util.Map,long,long,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.rest.client">buildRowSpec(byte[], Map, long, long, int)</a> - Method in class org.apache.hadoop.hbase.rest.client.<a href="../apidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html" title="class or interface in org.apache.hadoop.hbase.rest.client" class="extern [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#buildScanner(java.lang.String,java.lang.String,org.apache.hadoop.hbase.client.Table)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">buildScanner(String, String, Table)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#buildScanner(java.lang.String,java.lang.String,org.apache.hadoop.hbase.client.Table)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">buildScanner(String, String, Table)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/http/TestProxyUserSpnegoHttpServer.html#buildSpnegoConfiguration(org.apache.hadoop.conf.Configuration,java.lang.String,java.io.File)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">buildSpnegoConfiguration(Configuration, String, File)</a> - Static method in class org.apache.hadoop.hbase.http.<a href="../apidocs/org/apache/hadoop/hbase/http/TestProxyUserSpnegoHttpServer.html" title="class or [...]
 <dd>&nbsp;</dd>
@@ -6386,9 +6386,9 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideScanExcpetion.MyHStore.html#createScanner(org.apache.hadoop.hbase.client.Scan,org.apache.hadoop.hbase.regionserver.ScanInfo,java.util.NavigableSet,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">createScanner(Scan, ScanInfo, NavigableSet&lt;byte[]&gt;, long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/clie [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#createScanWithRowFilter(byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">createScanWithRowFilter(byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSide4</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#createScanWithRowFilter(byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">createScanWithRowFilter(byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">Te [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#createScanWithRowFilter(byte%5B%5D,byte%5B%5D,org.apache.hadoop.hbase.CompareOperator)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">createScanWithRowFilter(byte[], byte[], CompareOperator)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apac [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#createScanWithRowFilter(byte%5B%5D,byte%5B%5D,org.apache.hadoop.hbase.CompareOperator)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">createScanWithRowFilter(byte[], byte[], CompareOperator)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="cl [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSizeLimit()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">createScanWithSizeLimit()</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">AbstractTestScanCursor</a></dt>
 <dd>&nbsp;</dd>
@@ -7243,7 +7243,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.html#deleteColumnFamilyAsync(org.apache.hadoop.hbase.TableName,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.rsgroup">deleteColumnFamilyAsync(TableName, byte[])</a> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="../apidocs/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.html" title="class or interface in org.apache.hadoop.hbase.rsgroup [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#deleteColumns(org.apache.hadoop.hbase.client.Table,java.lang.String,java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">deleteColumns(Table, String, String)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.clien [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#deleteColumns(org.apache.hadoop.hbase.client.Table,java.lang.String,java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">deleteColumns(Table, String, String)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in o [...]
 <dd>&nbsp;</dd>
 <dt>org.apache.hadoop.hbase.chaos.actions.DeleteDataFilesAction - Class in <a href="org/apache/hadoop/hbase/chaos/actions/package-summary.html">org.apache.hadoop.hbase.chaos.actions</a></dt>
 <dd>
@@ -7906,7 +7906,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Used by tests to inject an edge into the manager.</div>
 </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#equals(byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">equals(byte[], byte[])</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSide4</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#equals(byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">equals(byte[], byte[])</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromCl [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html#equals(java.lang.Object)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">equals(Object)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">ColumnCountOnRowFilter</a></dt>
 <dd>&nbsp;</dd>
@@ -8817,7 +8817,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestRegionLocator.html#getAllRegionLocations(org.apache.hadoop.hbase.TableName)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getAllRegionLocations(TableName)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestRegionLocator.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestRegionLo [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getAllVersionsAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getAllVersionsAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/ [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getAllVersionsAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getAllVersionsAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache [...]
 <dd>&nbsp;</dd>
 <dt>getAndStartMonkey() - Method in class org.apache.hadoop.hbase.chaos.util.ChaosMonkeyRunner</dt>
 <dd>&nbsp;</dd>
@@ -10071,7 +10071,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html#getNumberOfMobFiles(org.apache.hadoop.hbase.TableName,java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mob">getNumberOfMobFiles(TableName, String)</a> - Method in class org.apache.hadoop.hbase.mob.<a href="../apidocs/org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html" title="class or interface in org.apache.hadoop.hbase.mob" clas [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getNumberOfRows(java.lang.String,java.lang.String,org.apache.hadoop.hbase.client.Table)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getNumberOfRows(String, String, Table)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.c [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getNumberOfRows(java.lang.String,java.lang.String,org.apache.hadoop.hbase.client.Table)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getNumberOfRows(String, String, Table)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface  [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.html#getNumBytesCompacted()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">getNumBytesCompacted()</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="external-link">MetricsRegio [...]
 <dd>&nbsp;</dd>
@@ -10861,7 +10861,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.html#getShortCircuitBytesRead()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">getShortCircuitBytesRead()</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="externa [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getSingleScanResult(org.apache.hadoop.hbase.client.Table,org.apache.hadoop.hbase.client.Scan)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getSingleScanResult(Table, Scan)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.c [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getSingleScanResult(org.apache.hadoop.hbase.client.Table,org.apache.hadoop.hbase.client.Scan)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getSingleScanResult(Table, Scan)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface  [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.html#getSmallCompactionQueueSize()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">getSmallCompactionQueueSize()</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="e [...]
 <dd>&nbsp;</dd>
@@ -11117,9 +11117,9 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Returns the underlying instance of <a href="../apidocs/org/apache/hadoop/hbase/HBaseTestingUtil.html" title="class or interface in org.apache.hadoop.hbase" class="external-link"><code>HBaseTestingUtil</code></a></div>
 </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getTestNull(Table, byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.cl [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getTestNull(Table, byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface i [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getTestNull(Table, byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" cl [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getTestNull(Table, byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.ap [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/RestoreSnapshotFromClientSchemaChangeTestBase.html#getTestRestoreSchemaChangeHCD()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getTestRestoreSchemaChangeHCD()</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/RestoreSnapshotFromClientSchemaChangeTestBase.html" title="class or interface in org.apache.hadoop.hbase.client" clas [...]
 <dd>&nbsp;</dd>
@@ -11209,22 +11209,22 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/rest/RowResourceBase.html#getValueXML(java.lang.String,org.apache.http.Header%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.rest">getValueXML(String, Header[])</a> - Static method in class org.apache.hadoop.hbase.rest.<a href="../apidocs/org/apache/hadoop/hbase/rest/RowResourceBase.html" title="class or interface in org.apache.hadoop.hbase.rest" class="external-link">RowResourceBase</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getVerifySingleColumn(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVerifySingleColumn(Table, byte[][], int, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/a [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getVerifySingleColumn(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVerifySingleColumn(Table, byte[][], int, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href=".. [...]
 <dd>
 <div class="block">Verify a single column using gets.</div>
 </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getVerifySingleEmpty(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVerifySingleEmpty(Table, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClie [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getVerifySingleEmpty(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVerifySingleEmpty(Table, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/clien [...]
 <dd>
 <div class="block">Verify we do not read any values by accident around a single column Same requirements as
  getVerifySingleColumn</div>
 </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getVersionAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionAndVerify(Table, byte[], byte[], byte[], long, byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="cl [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getVersionAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionAndVerify(Table, byte[], byte[], byte[], long, byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWit [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getVersionAndVerifyMissing(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionAndVerifyMissing(Table, byte[], byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class o [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getVersionAndVerifyMissing(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionAndVerifyMissing(Table, byte[], byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCopr [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getVersionRangeAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionRangeAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbas [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getVersionRangeAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionRangeAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apac [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#getVersionRangeAndVerifyGreaterThan(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionRangeAndVerifyGreaterThan(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/ [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#getVersionRangeAndVerifyGreaterThan(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">getVersionRangeAndVerifyGreaterThan(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a hre [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/Waiter.html#getWaitForRatio(org.apache.hadoop.conf.Configuration)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">getWaitForRatio(Configuration)</a> - Static method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/Waiter.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">Waiter</a></dt>
 <dd>
@@ -11905,7 +11905,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html#initialize()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">initialize()</a> - Static method in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestTlsRejectPlainText.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">AbstractTestTlsRejectPlainText</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#initialize(java.lang.Class,int,java.lang.Class...)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">initialize(Class&lt;? extends ConnectionRegistry&gt;, int, Class&lt;?&gt;...)</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoo [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#initialize(java.lang.Class,int,java.lang.Class...)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">initialize(Class&lt;? extends ConnectionRegistry&gt;, int, Class&lt;?&gt;...)</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or i [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html#initialize(org.apache.hadoop.conf.Configuration,org.apache.hadoop.conf.Configuration)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">initialize(Configuration, Configuration)</a> - Method in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/AbstractTestMutualTls.html" title="class or interface in org.apache.ha [...]
 <dd>&nbsp;</dd>
@@ -12554,7 +12554,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/TestRESTApiClusterManager.html#isRunningPositive()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">isRunningPositive()</a> - Method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/TestRESTApiClusterManager.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TestRESTApiClusterManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#isSameParameterizedCluster(java.lang.Class,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">isSameParameterizedCluster(Class&lt;?&gt;, int)</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-l [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#isSameParameterizedCluster(java.lang.Class,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">isSameParameterizedCluster(Class&lt;?&gt;, int)</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hba [...]
 <dd>
 <div class="block">JUnit does not provide an easy way to run a hook after each parameterized run.</div>
 </dd>
@@ -13461,18 +13461,18 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.ScanMapper.html#makeAssertions(org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.hbase.client.Result)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mapreduce">makeAssertions(ImmutableBytesWritable, Result)</a> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="../apidocs/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTe [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#makeN(byte%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">makeN(byte[], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSide4</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#makeN(byte%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">makeN(byte[], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSideWithCoproce [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/HTestConst.html#makeNAscii(byte%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">makeNAscii(byte[], int)</a> - Static method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/HTestConst.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HTestConst</a></dt>
 <dd>
 <div class="block">Generate the given number of unique byte sequences by appending numeric suffixes (ASCII
  representations of decimal numbers).</div>
 </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#makeNBig(byte%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">makeNBig(byte[], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSide4</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#makeNBig(byte%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">makeNBig(byte[], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSideWithC [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.html#makeQualifier(int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">makeQualifier(int, int)</a> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="external-link">TestComp [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#makeStamps(int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">makeStamps(int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSide4</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#makeStamps(int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">makeStamps(int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSideWithCoprocessor</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/master/AbstractTestDLS.html#makeWAL(org.apache.hadoop.hbase.regionserver.HRegionServer,java.util.List,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.master">makeWAL(HRegionServer, List&lt;RegionInfo&gt;, int, int)</a> - Method in class org.apache.hadoop.hbase.master.<a href="../apidocs/org/apache/hadoop/hbase/master/AbstractTestDLS.html" title="class or interface in org.apache.hadoop.hb [...]
 <dd>&nbsp;</dd>
@@ -16835,7 +16835,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/ipc/TestPluggableQueueImpl.html#put(org.apache.hadoop.hbase.ipc.CallRunner)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.ipc">put(CallRunner)</a> - Method in class org.apache.hadoop.hbase.ipc.<a href="../apidocs/org/apache/hadoop/hbase/ipc/TestPluggableQueueImpl.html" title="class or interface in org.apache.hadoop.hbase.ipc" class="external-link">TestPluggableQueueImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#putRows(org.apache.hadoop.hbase.client.Table,int,java.lang.String,java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">putRows(Table, int, String, String)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client"  [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#putRows(org.apache.hadoop.hbase.client.Table,int,java.lang.String,java.lang.String)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">putRows(Table, int, String, String)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org. [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/mapreduce/MRIncrementalLoadTestBase.html#putSortReducer" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mapreduce">putSortReducer</a> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="../apidocs/org/apache/hadoop/hbase/mapreduce/MRIncrementalLoadTestBase.html" title="class or interface in org.apache.hadoop.hbase.mapreduce" class="external-link">MRIncrementalLoadTestBase</a></dt>
 <dd>&nbsp;</dd>
@@ -18116,7 +18116,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/DummyAsyncTable.html#scanAll(org.apache.hadoop.hbase.client.Scan)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanAll(Scan)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/DummyAsyncTable.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">DummyAsyncTable</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanAllVersionsAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanAllVersionsAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbas [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanAllVersionsAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanAllVersionsAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apac [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableScan.html#scanCreater" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanCreater</a> - Variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableScan.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestAsyncTableScan</a></dt>
 <dd>&nbsp;</dd>
@@ -18157,9 +18157,9 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html#scanTable(org.apache.hadoop.hbase.TableName)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mob">scanTable(TableName)</a> - Method in class org.apache.hadoop.hbase.mob.<a href="../apidocs/org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html" title="class or interface in org.apache.hadoop.hbase.mob" class="external-link">TestMobCompactionWithDefaul [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanTestNull(Table, byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase. [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanTestNull(Table, byte[], byte[], byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,boolean)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanTestNull(Table, byte[], byte[], byte[], boolean)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apa [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanTestNull(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,boolean)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanTestNull(Table, byte[], byte[], byte[], boolean)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="c [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableScan.html#scanType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanType</a> - Variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableScan.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestAsyncTableScan</a></dt>
 <dd>&nbsp;</dd>
@@ -18169,19 +18169,19 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.html#scanType" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanType</a> - Variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestRawAsyncTableScan</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanVerifySingleColumn(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVerifySingleColumn(Table, byte[][], int, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanVerifySingleColumn(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVerifySingleColumn(Table, byte[][], int, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href=" [...]
 <dd>
 <div class="block">Verify a single column using scanners.</div>
 </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanVerifySingleEmpty(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVerifySingleEmpty(Table, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromCl [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanVerifySingleEmpty(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int,byte%5B%5D%5B%5D,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVerifySingleEmpty(Table, byte[][], int, byte[][], int, byte[][], int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/cli [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanVersionAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionAndVerify(Table, byte[], byte[], byte[], long, byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title=" [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanVersionAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long,byte%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionAndVerify(Table, byte[], byte[], byte[], long, byte[])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideW [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanVersionAndVerifyMissing(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionAndVerifyMissing(Table, byte[], byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanVersionAndVerifyMissing(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionAndVerifyMissing(Table, byte[], byte[], byte[], long)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCo [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanVersionRangeAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionRangeAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hb [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanVersionRangeAndVerify(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionRangeAndVerify(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/ap [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#scanVersionRangeAndVerifyGreaterThan(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionRangeAndVerifyGreaterThan(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidoc [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#scanVersionRangeAndVerifyGreaterThan(org.apache.hadoop.hbase.client.Table,byte%5B%5D,byte%5B%5D,byte%5B%5D,long%5B%5D,byte%5B%5D%5B%5D,int,int)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">scanVersionRangeAndVerifyGreaterThan(Table, byte[], byte[], byte[], long[], byte[][], int, int)</a> - Method in class org.apache.hadoop.hbase.client.<a h [...]
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestSCVFWithMiniCluster.html#scanWithAllQualifiersOfBothFamilies()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">scanWithAllQualifiersOfBothFamilies()</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestSCVFWithMiniCluster.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class= [...]
 <dd>
@@ -21049,9 +21049,9 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Subclass so can get at protected methods (none at moment).</div>
 </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#singleRowGetTest(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">singleRowGetTest(Table, byte[][], byte[][], byte[][], byte[][])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4. [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#singleRowGetTest(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">singleRowGetTest(Table, byte[][], byte[][], byte[][], byte[][])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFr [...]
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#singleRowScanTest(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">singleRowScanTest(Table, byte[][], byte[][], byte[][], byte[][])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#singleRowScanTest(org.apache.hadoop.hbase.client.Table,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D,byte%5B%5D%5B%5D)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">singleRowScanTest(Table, byte[][], byte[][], byte[][], byte[][])</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/Test [...]
 <dd>&nbsp;</dd>
 <dt>sink - Variable in class org.apache.hadoop.hbase.test.IntegrationTestReplication.VerifyReplicationLoop</dt>
 <dd>&nbsp;</dd>
@@ -21332,7 +21332,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="../apidocs/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.html#splitSwitch(boolean,boolean)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.rsgroup">splitSwitch(boolean, boolean)</a> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="../apidocs/org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.html" title="class or interface in org.apache.hadoop.hbase.rsgroup" class="external-link">VerifyingRSGroupAdmin</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html#splitTable(org.apache.hadoop.hbase.client.Table)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">splitTable(Table)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSide4.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestFromClientSide4</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html#splitTable(org.apache.hadoop.hbase.client.Table)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">splitTable(Table)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestFromClientSideWithCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">Tes [...]
 <dd>
 <div class="block">Split table into multiple regions.</div>
 </dd>
diff --git a/testapidocs/member-search-index.js b/testapidocs/member-search-index.js
index b914609ae56..581ddc112b9 100644
--- a/testapidocs/member-search-index.js
+++ b/testapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"TestRegionObserverInterface","l":"A"},{"p":"org.apache.hadoop.hbase.client","c":"TestGetProcedureResult.DummyProcedure","l":"abort(MasterProcedureEnv)","u":"abort(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)"},{"p":"org.apache.hadoop.hbase.master","c":"TestMigrateNamespaceTable.SuspendProcedure","l" [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"TestRegionObserverInterface","l":"A"},{"p":"org.apache.hadoop.hbase.client","c":"TestGetProcedureResult.DummyProcedure","l":"abort(MasterProcedureEnv)","u":"abort(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)"},{"p":"org.apache.hadoop.hbase.master","c":"TestMigrateNamespaceTable.SuspendProcedure","l" [...]
\ No newline at end of file
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 7fa33cb55bd..3201579fb19 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -896,7 +896,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html#addRegion()" class="member-name-link">addRegion()</a> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#addRegion(int%5B%5D,int)" class="member-name-link">addRegion(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#addRegion(int%5B%5D,int)" class="member-name-link">addRegion(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#addRegion(org.apache.hadoop.hbase.regionserver.HRegion)" class="member-name-link">addRegion(HRegion)</a> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
 <dd>&nbsp;</dd>
@@ -906,9 +906,9 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#addRegionNode(org.apache.hadoop.hbase.master.assignment.RegionStates,org.apache.hadoop.hbase.TableName,long)" class="member-name-link">addRegionNode(RegionStates, TableName, long)</a> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#addRegions(int%5B%5D,java.util.Set)" class="member-name-link">addRegions(int[], Set&lt;Integer&gt;)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#addRegions(int%5B%5D,java.util.Set)" class="member-name-link">addRegions(int[], Set&lt;Integer&gt;)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.Dum [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#addRegionSorted(int%5B%5D,int)" class="member-name-link">addRegionSorted(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#addRegionSorted(int%5B%5D,int)" class="member-name-link">addRegionSorted(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClust [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.html#addRegionToMETA(org.apache.hadoop.hbase.regionserver.HRegion,org.apache.hadoop.hbase.regionserver.HRegion)" class="member-name-link">addRegionToMETA(HRegion, HRegion)</a> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestDefaultMemStore</a></dt>
 <dd>
@@ -10443,7 +10443,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.html#clusterSize" class="member-name-link">clusterSize</a> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.html" title="class in org.apache.hadoop.hbase">IntegrationTestRegionReplicaPerf</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#clusterState" class="member-name-link">clusterState</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#clusterState" class="member-name-link">clusterState</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/BalancerTestBase.html#clusterStateMocks" class="member-name-link">clusterStateMocks</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/BalancerTestBase.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerTestBase</a></dt>
 <dd>&nbsp;</dd>
@@ -10629,11 +10629,11 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Build a set of all the host:port pairs of region servers known to this cluster.</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#colocatedReplicaCountsPerHost" class="member-name-link">colocatedReplicaCountsPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#colocatedReplicaCountsPerHost" class="member-name-link">colocatedReplicaCountsPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerCl [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#colocatedReplicaCountsPerRack" class="member-name-link">colocatedReplicaCountsPerRack</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#colocatedReplicaCountsPerRack" class="member-name-link">colocatedReplicaCountsPerRack</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerCl [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#colocatedReplicaCountsPerServer" class="member-name-link">colocatedReplicaCountsPerServer</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#colocatedReplicaCountsPerServer" class="member-name-link">colocatedReplicaCountsPerServer</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalanc [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/IntegrationTestIngestWithACL.html#COLON" class="member-name-link">COLON</a> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestIngestWithACL.html" title="class in org.apache.hadoop.hbase">IntegrationTestIngestWithACL</a></dt>
 <dd>&nbsp;</dd>
@@ -12436,7 +12436,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/TestCellUtil.html#consume(org.apache.hadoop.hbase.CellScanner,int)" class="member-name-link">consume(CellScanner, int)</a> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestCellUtil.html" title="class in org.apache.hadoop.hbase">TestCellUtil</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#contains(int%5B%5D,int)" class="member-name-link">contains(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#contains(int%5B%5D,int)" class="member-name-link">contains(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#contains(java.lang.Iterable,org.apache.hadoop.fs.Path)" class="member-name-link">contains(Iterable&lt;FileStatus&gt;, Path)</a> - Static method in class org.apache.hadoop.hbase.master.snapshot.<a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">TestSnapshotFileCache</a></dt>
 <dd>&nbsp;</dd>
@@ -16930,7 +16930,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.TimingCallable.html#doAction()" class="member-name-link">doAction()</a> - Method in class org.apache.hadoop.hbase.mttr.<a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.TimingCallable.html" title="class in org.apache.hadoop.hbase.mttr">IntegrationTestMTTR.TimingCallable</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#doAction(org.apache.hadoop.hbase.master.balancer.BalanceAction)" class="member-name-link">doAction(BalanceAction)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#doAction(org.apache.hadoop.hbase.master.balancer.BalanceAction)" class="member-name-link">doAction(BalanceAction)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCo [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/chaos/policies/DoActionsOncePolicy.html" class="type-name-link" title="class in org.apache.hadoop.hbase.chaos.policies">DoActionsOncePolicy</a> - Class in <a href="org/apache/hadoop/hbase/chaos/policies/package-summary.html">org.apache.hadoop.hbase.chaos.policies</a></dt>
 <dd>
@@ -16972,7 +16972,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.html#doAssert(byte%5B%5D,java.lang.String)" class="member-name-link">doAssert(byte[], String)</a> - Static method in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.html" title="class in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsReplication</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#doAssignRegion(org.apache.hadoop.hbase.client.RegionInfo,org.apache.hadoop.hbase.ServerName)" class="member-name-link">doAssignRegion(RegionInfo, ServerName)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalanc [...]
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#doAssignRegion(org.apache.hadoop.hbase.client.RegionInfo,org.apache.hadoop.hbase.ServerName)" class="member-name-link">doAssignRegion(RegionInfo, ServerName)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hba [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/quotas/TestSuperUserQuotaPermissions.html#doAsSuperUser(java.util.concurrent.Callable)" class="member-name-link">doAsSuperUser(Callable&lt;T&gt;)</a> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestSuperUserQuotaPermissions.html" title="class in org.apache.hadoop.hbase.quotas">TestSuperUserQuotaPermissions</a></dt>
 <dd>&nbsp;</dd>
@@ -23468,7 +23468,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.html#getLongOrNull(org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine,java.lang.String)" class="member-name-link">getLongOrNull(CommandLine, String)</a> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase">StripeCompactionsPerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getLowestLocalityRegionOnServer(int)" class="member-name-link">getLowestLocalityRegionOnServer(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getLowestLocalityRegionOnServer(int)" class="member-name-link">getLowestLocalityRegionOnServer(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.Dum [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestHStore.html#getLowestTimeStampFromFS(org.apache.hadoop.fs.FileSystem,java.util.Collection)" class="member-name-link">getLowestTimeStampFromFS(FileSystem, Collection&lt;HStoreFile&gt;)</a> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore</a></dt>
 <dd>&nbsp;</dd>
@@ -23644,7 +23644,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html#getMaxProcId()" class="member-name-link">getMaxProcId()</a> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.LoadCounter</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getMaxReplicas()" class="member-name-link">getMaxReplicas()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getMaxReplicas()" class="member-name-link">getMaxReplicas()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html#getMaxResultSize()" class="member-name-link">getMaxResultSize()</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.CustomScanner.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.CustomScanner</a></dt>
 <dd>&nbsp;</dd>
@@ -24094,11 +24094,11 @@ loadScripts(document, 'script');</script>
 <div class="block">Check whether regions are assigned to servers consistent with the explicit hints that are
  persisted in the hbase:meta table.</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getNumRegions(int)" class="member-name-link">getNumRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getNumRegions(int)" class="member-name-link">getNumRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.html#getNumRegions(java.lang.String)" class="member-name-link">getNumRegions(String)</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsTableWrapperStub</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getNumRegionsComparator()" class="member-name-link">getNumRegionsComparator()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getNumRegionsComparator()" class="member-name-link">getNumRegionsComparator()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/StartTestingClusterOption.html#getNumRegionServers()" class="member-name-link">getNumRegionServers()</a> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/StartTestingClusterOption.html" title="class in org.apache.hadoop.hbase">StartTestingClusterOption</a></dt>
 <dd>&nbsp;</dd>
@@ -24232,19 +24232,19 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Returns the command line option for <a href="org/apache/hadoop/hbase/util/bulkdatagenerator/BulkDataGeneratorTool.html" title="class in org.apache.hadoop.hbase.util.bulkdatagenerator"><code>BulkDataGeneratorTool</code></a></div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getOrComputeLocality(int,int,org.apache.hadoop.hbase.master.balancer.BalancerClusterState.LocalityType)" class="member-name-link">getOrComputeLocality(int, int, BalancerClusterState.LocalityType)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.mas [...]
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getOrComputeLocality(int,int,org.apache.hadoop.hbase.master.balancer.BalancerClusterState.LocalityType)" class="member-name-link">getOrComputeLocality(int, int, BalancerClusterState.LocalityType)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getOrComputeRackLocalities()" class="member-name-link">getOrComputeRackLocalities()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getOrComputeRackLocalities()" class="member-name-link">getOrComputeRackLocalities()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerCluste [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getOrComputeRegionCacheRatio(int,int)" class="member-name-link">getOrComputeRegionCacheRatio(int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getOrComputeRegionCacheRatio(int,int)" class="member-name-link">getOrComputeRegionCacheRatio(int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction. [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getOrComputeRegionsToMostLocalEntities(org.apache.hadoop.hbase.master.balancer.BalancerClusterState.LocalityType)" class="member-name-link">getOrComputeRegionsToMostLocalEntities(BalancerClusterState.LocalityType)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apach [...]
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getOrComputeRegionsToMostLocalEntities(org.apache.hadoop.hbase.master.balancer.BalancerClusterState.LocalityType)" class="member-name-link">getOrComputeRegionsToMostLocalEntities(BalancerClusterState.LocalityType)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancer [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getOrComputeServerWithBestRegionCachedRatio()" class="member-name-link">getOrComputeServerWithBestRegionCachedRatio()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getOrComputeServerWithBestRegionCachedRatio()" class="member-name-link">getOrComputeServerWithBestRegionCachedRatio()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSk [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getOrComputeWeightedLocality(int,int,org.apache.hadoop.hbase.master.balancer.BalancerClusterState.LocalityType)" class="member-name-link">getOrComputeWeightedLocality(int, int, BalancerClusterState.LocalityType)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache. [...]
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getOrComputeWeightedLocality(int,int,org.apache.hadoop.hbase.master.balancer.BalancerClusterState.LocalityType)" class="member-name-link">getOrComputeWeightedLocality(int, int, BalancerClusterState.LocalityType)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerCl [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getOrComputeWeightedRegionCacheRatio(int,int)" class="member-name-link">getOrComputeWeightedRegionCacheRatio(int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getOrComputeWeightedRegionCacheRatio(int,int)" class="member-name-link">getOrComputeWeightedRegionCacheRatio(int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableS [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html#getOrCreateSaslServer()" class="member-name-link">getOrCreateSaslServer()</a> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/AbstractTestIPC.FailingSimpleRpcServer.FailingConnection.html" title="class in org.apache.hadoop.hbase.ipc">AbstractTestIPC.FailingSimpleRpcServer.FailingConnection</a></dt>
 <dd>&nbsp;</dd>
@@ -24524,7 +24524,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/TestRegionMover3.MockRackManager.html#getRack(org.apache.hadoop.hbase.ServerName)" class="member-name-link">getRack(ServerName)</a> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestRegionMover3.MockRackManager.html" title="class in org.apache.hadoop.hbase.util">TestRegionMover3.MockRackManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getRackForRegion(int)" class="member-name-link">getRackForRegion(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getRackForRegion(int)" class="member-name-link">getRackForRegion(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/io/crypto/TestEncryption.html#getRandomBlock(int)" class="member-name-link">getRandomBlock(int)</a> - Method in class org.apache.hadoop.hbase.io.crypto.<a href="org/apache/hadoop/hbase/io/crypto/TestEncryption.html" title="class in org.apache.hadoop.hbase.io.crypto">TestEncryption</a></dt>
 <dd>&nbsp;</dd>
@@ -24621,7 +24621,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Helper method to get the archive directory for the specified region</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getRegionCacheRatioOnRegionServer(int,int)" class="member-name-link">getRegionCacheRatioOnRegionServer(int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getRegionCacheRatioOnRegionServer(int,int)" class="member-name-link">getRegionCacheRatioOnRegionServer(int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCos [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestCacheAwareLoadBalancerCostFunctions.MockClusterForCacheCost.html#getRegionCacheRatioOnRegionServer(int,int)" class="member-name-link">getRegionCacheRatioOnRegionServer(int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestCacheAwareLoadBalancerCostFunctions.MockClusterForCacheCost.html" title="class in org.apache.hadoop.hbase.master.balancer">TestCacheAwareLoadB [...]
 <dd>&nbsp;</dd>
@@ -25525,7 +25525,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/TestPerformanceEvaluation.PESampleTestImpl.html#getShortValueSizeReport()" class="member-name-link">getShortValueSizeReport()</a> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestPerformanceEvaluation.PESampleTestImpl.html" title="class in org.apache.hadoop.hbase">TestPerformanceEvaluation.PESampleTestImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getShuffledServerIndices()" class="member-name-link">getShuffledServerIndices()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getShuffledServerIndices()" class="member-name-link">getShuffledServerIndices()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterSta [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/FromClientSideBase.html#getSingleScanResult(org.apache.hadoop.hbase.client.Table,org.apache.hadoop.hbase.client.Scan)" class="member-name-link">getSingleScanResult(Table, Scan)</a> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/FromClientSideBase.html" title="class in org.apache.hadoop.hbase.client">FromClientSideBase</a></dt>
 <dd>&nbsp;</dd>
@@ -26209,7 +26209,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperStub.html#getTotalQueueSize()" class="member-name-link">getTotalQueueSize()</a> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerWrapperStub.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServerWrapperStub</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#getTotalRegionHFileSizeMB(int)" class="member-name-link">getTotalRegionHFileSizeMB(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#getTotalRegionHFileSizeMB(int)" class="member-name-link">getTotalRegionHFileSizeMB(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerCl [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestCacheAwareLoadBalancerCostFunctions.MockClusterForCacheCost.html#getTotalRegionHFileSizeMB(int)" class="member-name-link">getTotalRegionHFileSizeMB(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestCacheAwareLoadBalancerCostFunctions.MockClusterForCacheCost.html" title="class in org.apache.hadoop.hbase.master.balancer">TestCacheAwareLoadBalancerCostFunctions.Mock [...]
 <dd>&nbsp;</dd>
@@ -26987,7 +26987,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/DummyClusterInfoProvider.html#hasRegionReplica(java.util.Collection)" class="member-name-link">hasRegionReplica(Collection&lt;RegionInfo&gt;)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/DummyClusterInfoProvider.html" title="class in org.apache.hadoop.hbase.master.balancer">DummyClusterInfoProvider</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#hasRegionReplicas" class="member-name-link">hasRegionReplicas</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#hasRegionReplicas" class="member-name-link">hasRegionReplicas</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/trace/hamcrest/SpanDataMatchers.html#hasStatusWithCode(io.opentelemetry.api.trace.StatusCode)" class="member-name-link">hasStatusWithCode(StatusCode)</a> - Static method in class org.apache.hadoop.hbase.client.trace.hamcrest.<a href="org/apache/hadoop/hbase/client/trace/hamcrest/SpanDataMatchers.html" title="class in org.apache.hadoop.hbase.client.trace.hamcrest">SpanDataMatchers</a></dt>
 <dd>&nbsp;</dd>
@@ -27674,11 +27674,11 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.html#hostPort" class="member-name-link">hostPort</a> - Static variable in class org.apache.hadoop.hbase.master.http.<a href="org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.html" title="class in org.apache.hadoop.hbase.master.http">TestHbckMetricsResource</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#hosts" class="member-name-link">hosts</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#hosts" class="member-name-link">hosts</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.html#hostStartCode" class="member-name-link">hostStartCode</a> - Static variable in class org.apache.hadoop.hbase.master.http.<a href="org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.html" title="class in org.apache.hadoop.hbase.master.http">TestHbckMetricsResource</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#hostsToIndex" class="member-name-link">hostsToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#hostsToIndex" class="member-name-link">hostsToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyHeterogeneousStorage.html#HOT_WINDOW_SP" class="member-name-link">HOT_WINDOW_SP</a> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyHeterogeneousStorage.html" title="class in org.apache.hadoop.hbase.regionserver">TestDateTieredCompactionPolicyHeterogeneousStorage</a></dt>
 <dd>&nbsp;</dd>
@@ -28602,7 +28602,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#initialRegionCount" class="member-name-link">initialRegionCount</a> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#initialRegionIndexToServerIndex" class="member-name-link">initialRegionIndexToServerIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#initialRegionIndexToServerIndex" class="member-name-link">initialRegionIndexToServerIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalanc [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/chaos/actions/DumpClusterStatusAction.html#initialRegionServers" class="member-name-link">initialRegionServers</a> - Variable in class org.apache.hadoop.hbase.chaos.actions.<a href="org/apache/hadoop/hbase/chaos/actions/DumpClusterStatusAction.html" title="class in org.apache.hadoop.hbase.chaos.actions">DumpClusterStatusAction</a></dt>
 <dd>&nbsp;</dd>
@@ -30048,7 +30048,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/MockServer.html#isStopping()" class="member-name-link">isStopping()</a> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MockServer.html" title="class in org.apache.hadoop.hbase.util">MockServer</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#isStopRequested()" class="member-name-link">isStopRequested()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#isStopRequested()" class="member-name-link">isStopRequested()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mapreduce/TestImportTSVWithVisibilityLabels.html#issueDeleteAndVerifyData(org.apache.hadoop.hbase.TableName)" class="member-name-link">issueDeleteAndVerifyData(TableName)</a> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestImportTSVWithVisibilityLabels.html" title="class in org.apache.hadoop.hbase.mapreduce">TestImportTSVWithVisibilityLabels</a></dt>
 <dd>&nbsp;</dd>
@@ -31541,7 +31541,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#localities" class="member-name-link">localities</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#localityPerServer" class="member-name-link">localityPerServer</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#localityPerServer" class="member-name-link">localityPerServer</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/chaos/actions/AddCPULoadAction.html#localPerform()" class="member-name-link">localPerform()</a> - Method in class org.apache.hadoop.hbase.chaos.actions.<a href="org/apache/hadoop/hbase/chaos/actions/AddCPULoadAction.html" title="class in org.apache.hadoop.hbase.chaos.actions">AddCPULoadAction</a></dt>
 <dd>&nbsp;</dd>
@@ -34298,7 +34298,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/procedure2/TestStackIdHoles.DummyProcedureStore.html#maxProcId" class="member-name-link">maxProcId</a> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestStackIdHoles.DummyProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2">TestStackIdHoles.DummyProcedureStore</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#maxReplicas" class="member-name-link">maxReplicas</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#maxReplicas" class="member-name-link">maxReplicas</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/rest/client/RemoteAdmin.html#maxRetries" class="member-name-link">maxRetries</a> - Variable in class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/RemoteAdmin.html" title="class in org.apache.hadoop.hbase.rest.client">RemoteAdmin</a></dt>
 <dd>&nbsp;</dd>
@@ -34362,7 +34362,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/TestOperation.html#MCP_FILTER" class="member-name-link">MCP_FILTER</a> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestOperation.html" title="class in org.apache.hadoop.hbase.client">TestOperation</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#meanRegionsPerTable" class="member-name-link">meanRegionsPerTable</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#meanRegionsPerTable" class="member-name-link">meanRegionsPerTable</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/security/provider/CustomSaslAuthenticationProviderTestBase.InMemoryClientProvider.html#MECHANISM" class="member-name-link">MECHANISM</a> - Static variable in class org.apache.hadoop.hbase.security.provider.<a href="org/apache/hadoop/hbase/security/provider/CustomSaslAuthenticationProviderTestBase.InMemoryClientProvider.html" title="class in org.apache.hadoop.hbase.security.provider">CustomSaslAuthenticationProviderTestBase.InMemoryClientProvider</a></dt>
 <dd>&nbsp;</dd>
@@ -35457,7 +35457,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.VerifyMapper.html#multipleUnevenColumnFamilies" class="member-name-link">multipleUnevenColumnFamilies</a> - Variable in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.VerifyMapper.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedList.Verify.VerifyMapper</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#multiServersPerHost" class="member-name-link">multiServersPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#multiServersPerHost" class="member-name-link">multiServersPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.html" class="type-name-link" title="class in org.apache.hadoop.hbase.mapreduce">MultiTableInputFormatTestBase</a> - Class in <a href="org/apache/hadoop/hbase/mapreduce/package-summary.html">org.apache.hadoop.hbase.mapreduce</a></dt>
 <dd>
@@ -37752,7 +37752,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.html#numGetters" class="member-name-link">numGetters</a> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.html" title="class in org.apache.hadoop.hbase">AcidGuaranteesTestTool</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numHosts" class="member-name-link">numHosts</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numHosts" class="member-name-link">numHosts</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestAtomicOperation.Incrementer.html#numIncrements" class="member-name-link">numIncrements</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestAtomicOperation.Incrementer.html" title="class in org.apache.hadoop.hbase.regionserver">TestAtomicOperation.Incrementer</a></dt>
 <dd>&nbsp;</dd>
@@ -37782,7 +37782,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/StartTestingClusterOption.Builder.html#numMasters(int)" class="member-name-link">numMasters(int)</a> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/StartTestingClusterOption.Builder.html" title="class in org.apache.hadoop.hbase">StartTestingClusterOption.Builder</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numMovedRegions" class="member-name-link">numMovedRegions</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numMovedRegions" class="member-name-link">numMovedRegions</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.GeneratorInputFormat.GeneratorRecordReader.html#numNodes" class="member-name-link">numNodes</a> - Variable in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.GeneratorInputFormat.GeneratorRecordReader.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedList.Generator.GeneratorInputFormat.GeneratorRecordReader</a></dt>
 <dd>&nbsp;</dd>
@@ -37816,7 +37816,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestHRegion.PutThread.html#numPutsFinished" class="member-name-link">numPutsFinished</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegion.PutThread.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion.PutThread</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numRacks" class="member-name-link">numRacks</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numRacks" class="member-name-link">numRacks</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager.html#numRacks" class="member-name-link">numRacks</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager</a></dt>
 <dd>&nbsp;</dd>
@@ -37828,7 +37828,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.html#numRegions" class="member-name-link">numRegions</a> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.html" title="class in org.apache.hadoop.hbase">IntegrationTestDDLMasterFailover</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numRegions" class="member-name-link">numRegions</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numRegions" class="member-name-link">numRegions</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html#numRegions" class="member-name-link">numRegions</a> - Variable in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/TestMobCompactionWithDefaults.html" title="class in org.apache.hadoop.hbase.mob">TestMobCompactionWithDefaults</a></dt>
 <dd>&nbsp;</dd>
@@ -37854,9 +37854,9 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Computes the number of regions for the given table that have a positive size.</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numRegionsPerServerPerTable" class="member-name-link">numRegionsPerServerPerTable</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numRegionsPerServerPerTable" class="member-name-link">numRegionsPerServerPerTable</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerCluste [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numRegionsPerTable" class="member-name-link">numRegionsPerTable</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numRegionsPerTable" class="member-name-link">numRegionsPerTable</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/TestCloneSnapshotFromClientAfterSplittingRegion.html#numReplicas" class="member-name-link">numReplicas</a> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestCloneSnapshotFromClientAfterSplittingRegion.html" title="class in org.apache.hadoop.hbase.client">TestCloneSnapshotFromClientAfterSplittingRegion</a></dt>
 <dd>&nbsp;</dd>
@@ -37938,7 +37938,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.AtomicScanReader.html#numScans" class="member-name-link">numScans</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.AtomicScanReader.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionServerBulkLoad.AtomicScanReader</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numServers" class="member-name-link">numServers</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numServers" class="member-name-link">numServers</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager.html#numServers" class="member-name-link">numServers</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager</a></dt>
 <dd>&nbsp;</dd>
@@ -37948,7 +37948,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/IntegrationTestBackupRestore.html#numTables" class="member-name-link">numTables</a> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestBackupRestore.html" title="class in org.apache.hadoop.hbase">IntegrationTestBackupRestore</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#numTables" class="member-name-link">numTables</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#numTables" class="member-name-link">numTables</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.html#numTables" class="member-name-link">numTables</a> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureSchedulerPerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
@@ -39507,7 +39507,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mob/TestMobCompactionWithException.MyMobStoreCompactor.html#performCompaction(org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails,org.apache.hadoop.hbase.regionserver.InternalScanner,org.apache.hadoop.hbase.regionserver.CellSink,long,boolean,org.apache.hadoop.hbase.regionserver.throttle.ThroughputController,org.apache.hadoop.hbase.regionserver.compactions.CompactionRequestImpl,org.apache.hadoop.hbase.regionserver.compactions.Compact [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.CustomStoreFlusher.html#performFlush(org.apache.hadoop.hbase.regionserver.InternalScanner,org.apache.hadoop.hbase.regionserver.CellSink,org.apache.hadoop.hbase.regionserver.throttle.ThroughputController)" class="member-name-link">performFlush(InternalScanner, CellSink, ThroughputController)</a> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTes [...]
+<dt><a href="org/apache/hadoop/hbase/regionserver/TestDefaultStoreEngine.DummyStoreFlusher.html#performFlush(org.apache.hadoop.hbase.regionserver.InternalScanner,org.apache.hadoop.hbase.regionserver.CellSink,org.apache.hadoop.hbase.regionserver.throttle.ThroughputController)" class="member-name-link">performFlush(InternalScanner, CellSink, ThroughputController)</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestDefaultStoreEngine. [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestHStore.MyDefaultStoreFlusher.html#performFlush(org.apache.hadoop.hbase.regionserver.InternalScanner,org.apache.hadoop.hbase.regionserver.CellSink,org.apache.hadoop.hbase.regionserver.throttle.ThroughputController)" class="member-name-link">performFlush(InternalScanner, CellSink, ThroughputController)</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.MyDefaultStoreFlushe [...]
 <dd>&nbsp;</dd>
@@ -42522,9 +42522,9 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.html#rackManager" class="member-name-link">rackManager</a> - Static variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">TestBaseLoadBalancer</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#racks" class="member-name-link">racks</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#racks" class="member-name-link">racks</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#racksToIndex" class="member-name-link">racksToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#racksToIndex" class="member-name-link">racksToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.html#rackToServers" class="member-name-link">rackToServers</a> - Static variable in class org.apache.hadoop.hbase.favored.<a href="org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.html" title="class in org.apache.hadoop.hbase.favored">TestFavoredNodeAssignmentHelper</a></dt>
 <dd>&nbsp;</dd>
@@ -43338,7 +43338,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/RegionAsTable.RegionScannerToResultScannerAdaptor.html" class="type-name-link" title="class in org.apache.hadoop.hbase.regionserver">RegionAsTable.RegionScannerToResultScannerAdaptor</a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionCacheRatioOnOldServerMap" class="member-name-link">regionCacheRatioOnOldServerMap</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionCacheRatioOnOldServerMap" class="member-name-link">regionCacheRatioOnOldServerMap</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancer [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.RegionChecker.html#%3Cinit%3E(org.apache.hadoop.conf.Configuration,org.apache.hadoop.hbase.Stoppable,org.apache.hadoop.hbase.TableName)" class="member-name-link">RegionChecker(Configuration, Stoppable, TableName)</a> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.RegionChecker.html" title="class in org.apache.hadoop.hbase. [...]
 <dd>&nbsp;</dd>
@@ -43374,11 +43374,11 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/TestRegionLocations.html#regionId2" class="member-name-link">regionId2</a> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestRegionLocations.html" title="class in org.apache.hadoop.hbase">TestRegionLocations</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionIndexToPrimaryIndex" class="member-name-link">regionIndexToPrimaryIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionIndexToPrimaryIndex" class="member-name-link">regionIndexToPrimaryIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterSta [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionIndexToServerIndex" class="member-name-link">regionIndexToServerIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionIndexToServerIndex" class="member-name-link">regionIndexToServerIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionIndexToTableIndex" class="member-name-link">regionIndexToTableIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionIndexToTableIndex" class="member-name-link">regionIndexToTableIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html#regionInfo" class="member-name-link">regionInfo</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRegionCoprocessorHost</a></dt>
 <dd>&nbsp;</dd>
@@ -43400,11 +43400,11 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/TestRegionMover2.html#regionIsolationOperation(org.apache.hadoop.hbase.ServerName,org.apache.hadoop.hbase.ServerName,int,boolean)" class="member-name-link">regionIsolationOperation(ServerName, ServerName, int, boolean)</a> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestRegionMover2.html" title="class in org.apache.hadoop.hbase.util">TestRegionMover2</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionLoads" class="member-name-link">regionLoads</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionLoads" class="member-name-link">regionLoads</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/TestResultStatsUtil.html#regionLoadStats" class="member-name-link">regionLoadStats</a> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestResultStatsUtil.html" title="class in org.apache.hadoop.hbase.client">TestResultStatsUtil</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionLocations" class="member-name-link">regionLocations</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionLocations" class="member-name-link">regionLocations</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/TestRegionRebalancing.html#regionLocator" class="member-name-link">regionLocator</a> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestRegionRebalancing.html" title="class in org.apache.hadoop.hbase">TestRegionRebalancing</a></dt>
 <dd>&nbsp;</dd>
@@ -43414,7 +43414,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/http/TestRegionVisualizer.html#regionMetricsBuilderLongValueSetters" class="member-name-link">regionMetricsBuilderLongValueSetters</a> - Static variable in class org.apache.hadoop.hbase.master.http.<a href="org/apache/hadoop/hbase/master/http/TestRegionVisualizer.html" title="class in org.apache.hadoop.hbase.master.http">TestRegionVisualizer</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionMoved(int,int,int)" class="member-name-link">regionMoved(int, int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionMoved(int,int,int)" class="member-name-link">regionMoved(int, int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/DummyCostFunction.html#regionMoved(int,int,int)" class="member-name-link">regionMoved(int, int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/DummyCostFunction.html" title="class in org.apache.hadoop.hbase.master.balancer">DummyCostFunction</a></dt>
 <dd>&nbsp;</dd>
@@ -43486,7 +43486,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/quotas/TestTableQuotaViolationStore.html#regionReports" class="member-name-link">regionReports</a> - Variable in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestTableQuotaViolationStore.html" title="class in org.apache.hadoop.hbase.quotas">TestTableQuotaViolationStore</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regions" class="member-name-link">regions</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regions" class="member-name-link">regions</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestStoreFileWriter.html#regions" class="member-name-link">regions</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileWriter</a></dt>
 <dd>&nbsp;</dd>
@@ -43578,11 +43578,11 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.html#regionServicesForStores" class="member-name-link">regionServicesForStores</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestCompactingMemStore</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionsPerHost" class="member-name-link">regionsPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionsPerHost" class="member-name-link">regionsPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionsPerRack" class="member-name-link">regionsPerRack</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionsPerRack" class="member-name-link">regionsPerRack</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionsPerServer" class="member-name-link">regionsPerServer</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionsPerServer" class="member-name-link">regionsPerServer</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.html#regionsPerTable" class="member-name-link">regionsPerTable</a> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureSchedulerPerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
@@ -43598,7 +43598,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#regionStates" class="member-name-link">regionStates</a> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#regionsToIndex" class="member-name-link">regionsToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#regionsToIndex" class="member-name-link">regionsToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/compaction/TestMajorCompactionRequest.html#regionStoreDir" class="member-name-link">regionStoreDir</a> - Variable in class org.apache.hadoop.hbase.util.compaction.<a href="org/apache/hadoop/hbase/util/compaction/TestMajorCompactionRequest.html" title="class in org.apache.hadoop.hbase.util.compaction">TestMajorCompactionRequest</a></dt>
 <dd>&nbsp;</dd>
@@ -43908,11 +43908,11 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCacheRefCnt.MyBucketCache2.html#removeRamCounter" class="member-name-link">removeRamCounter</a> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/TestBucketCacheRefCnt.MyBucketCache2.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestBucketCacheRefCnt.MyBucketCache2</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#removeRegion(int%5B%5D,int)" class="member-name-link">removeRegion(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#removeRegion(int%5B%5D,int)" class="member-name-link">removeRegion(int[], int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterStat [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#removeRegion(org.apache.hadoop.hbase.regionserver.HRegion,org.apache.hadoop.hbase.ServerName)" class="member-name-link">removeRegion(HRegion, ServerName)</a> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#removeRegions(int%5B%5D,java.util.Set)" class="member-name-link">removeRegions(int[], Set&lt;Integer&gt;)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#removeRegions(int%5B%5D,java.util.Set)" class="member-name-link">removeRegions(int[], Set&lt;Integer&gt;)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFuncti [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html#removeReplicationPeer(java.lang.String)" class="member-name-link">removeReplicationPeer(String)</a> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html" title="class in org.apache.hadoop.hbase.master">MockNoopMasterServices</a></dt>
 <dd>&nbsp;</dd>
@@ -43987,7 +43987,7 @@ loadScripts(document, 'script');</script>
 <div class="block">Replace the hbase-site.xml file under this test's data directory with the content of the
  override-hbase-site.xml file.</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#replaceRegion(int%5B%5D,int,int)" class="member-name-link">replaceRegion(int[], int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#replaceRegion(int%5B%5D,int,int)" class="member-name-link">replaceRegion(int[], int, int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancer [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#replay(org.apache.hadoop.hbase.regionserver.HRegion,org.apache.hadoop.hbase.client.Put,long)" class="member-name-link">replay(HRegion, Put, long)</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
 <dd>&nbsp;</dd>
@@ -47743,21 +47743,21 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/security/AbstractTestSecureIPC.html#serverConf" class="member-name-link">serverConf</a> - Variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/AbstractTestSecureIPC.html" title="class in org.apache.hadoop.hbase.security">AbstractTestSecureIPC</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serverHasTooFewRegions(int)" class="member-name-link">serverHasTooFewRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serverHasTooFewRegions(int)" class="member-name-link">serverHasTooFewRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterS [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/RESTApiClusterManager.html#serverHostname" class="member-name-link">serverHostname</a> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RESTApiClusterManager.html" title="class in org.apache.hadoop.hbase">RESTApiClusterManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager.html#serverIndexes" class="member-name-link">serverIndexes</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancerRegionReplicaWithRacks.ForTestRackManager< [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serverIndexToHostIndex" class="member-name-link">serverIndexToHostIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serverIndexToHostIndex" class="member-name-link">serverIndexToHostIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serverIndexToRackIndex" class="member-name-link">serverIndexToRackIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serverIndexToRackIndex" class="member-name-link">serverIndexToRackIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serverIndexToRegionsOffset" class="member-name-link">serverIndexToRegionsOffset</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serverIndexToRegionsOffset" class="member-name-link">serverIndexToRegionsOffset</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterS [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serverIndicesSortedByLocality" class="member-name-link">serverIndicesSortedByLocality</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serverIndicesSortedByLocality" class="member-name-link">serverIndicesSortedByLocality</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerCl [...]
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serverIndicesSortedByRegionCount" class="member-name-link">serverIndicesSortedByRegionCount</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serverIndicesSortedByRegionCount" class="member-name-link">serverIndicesSortedByRegionCount</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBala [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/thrift/TestThriftSpnegoHttpFallbackServer.html#serverKeytab" class="member-name-link">serverKeytab</a> - Static variable in class org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/TestThriftSpnegoHttpFallbackServer.html" title="class in org.apache.hadoop.hbase.thrift">TestThriftSpnegoHttpFallbackServer</a></dt>
 <dd>&nbsp;</dd>
@@ -47818,7 +47818,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.html#servers" class="member-name-link">servers</a> - Static variable in class org.apache.hadoop.hbase.favored.<a href="org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.html" title="class in org.apache.hadoop.hbase.favored">TestFavoredNodeAssignmentHelper</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#servers" class="member-name-link">servers</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#servers" class="member-name-link">servers</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.html#servers" class="member-name-link">servers</a> - Static variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.html" title="class in org.apache.hadoop.hbase.master.balancer">RSGroupableBalancerTestBase</a></dt>
 <dd>&nbsp;</dd>
@@ -47842,11 +47842,11 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html#serverSource" class="member-name-link">serverSource</a> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerMetrics</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serversPerHost" class="member-name-link">serversPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serversPerHost" class="member-name-link">serversPerHost</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serversPerRack" class="member-name-link">serversPerRack</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serversPerRack" class="member-name-link">serversPerRack</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#serversToIndex" class="member-name-link">serversToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#serversToIndex" class="member-name-link">serversToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/ipc/TestTLSHandshadeFailure.html#serverThread" class="member-name-link">serverThread</a> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestTLSHandshadeFailure.html" title="class in org.apache.hadoop.hbase.ipc">TestTLSHandshadeFailure</a></dt>
 <dd>&nbsp;</dd>
@@ -48242,9 +48242,9 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/mapreduce/NMapInputFormat.html#setNumMapTasks(org.apache.hadoop.conf.Configuration,int)" class="member-name-link">setNumMapTasks(Configuration, int)</a> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/NMapInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">NMapInputFormat</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#setNumMovedRegions(int)" class="member-name-link">setNumMovedRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#setNumMovedRegions(int)" class="member-name-link">setNumMovedRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#setNumRegions(int)" class="member-name-link">setNumRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#setNumRegions(int)" class="member-name-link">setNumRegions(int)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/monitoring/TestTaskMonitor.TestParam.html#setParam(java.lang.String)" class="member-name-link">setParam(String)</a> - Method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TestTaskMonitor.TestParam.html" title="class in org.apache.hadoop.hbase.monitoring">TestTaskMonitor.TestParam</a></dt>
 <dd>&nbsp;</dd>
@@ -48406,7 +48406,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/io/hfile/TestHFileSeek.MyOptions.html#setStopProceed()" class="member-name-link">setStopProceed()</a> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestHFileSeek.MyOptions.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileSeek.MyOptions</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#setStopRequestedAt(long)" class="member-name-link">setStopRequestedAt(long)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#setStopRequestedAt(long)" class="member-name-link">setStopRequestedAt(long)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/TestFSUtils.AlwaysFailSetStoragePolicyFileSystem.html#setStoragePolicy(org.apache.hadoop.fs.Path,java.lang.String)" class="member-name-link">setStoragePolicy(Path, String)</a> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestFSUtils.AlwaysFailSetStoragePolicyFileSystem.html" title="class in org.apache.hadoop.hbase.util">TestFSUtils.AlwaysFailSetStoragePolicyFileSystem</a></dt>
 <dd>&nbsp;</dd>
@@ -52638,7 +52638,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/hbtop/screen/field/TestFieldScreenPresenter.html#sortFieldPosition" class="member-name-link">sortFieldPosition</a> - Variable in class org.apache.hadoop.hbase.hbtop.screen.field.<a href="org/apache/hadoop/hbase/hbtop/screen/field/TestFieldScreenPresenter.html" title="class in org.apache.hadoop.hbase.hbtop.screen.field">TestFieldScreenPresenter</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#sortServersByRegionCount()" class="member-name-link">sortServersByRegionCount()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#sortServersByRegionCount()" class="member-name-link">sortServersByRegionCount()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterSta [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestMetricsHeapMemoryManager.html#source" class="member-name-link">source</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMetricsHeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestMetricsHeapMemoryManager</a></dt>
 <dd>&nbsp;</dd>
@@ -55817,7 +55817,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2TestBase.RandomPutGeneratingMapper.html#tables" class="member-name-link">tables</a> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2TestBase.RandomPutGeneratingMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">HFileOutputFormat2TestBase.RandomPutGeneratingMapper</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#tables" class="member-name-link">tables</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#tables" class="member-name-link">tables</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.html#tables" class="member-name-link">tables</a> - Static variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.html" title="class in org.apache.hadoop.hbase.master.balancer">RSGroupableBalancerTestBase</a></dt>
 <dd>&nbsp;</dd>
@@ -55853,7 +55853,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#tableStateManager" class="member-name-link">tableStateManager</a> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/MockMasterServices.html" title="class in org.apache.hadoop.hbase.master.assignment">MockMasterServices</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#tablesToIndex" class="member-name-link">tablesToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#tablesToIndex" class="member-name-link">tablesToIndex</a> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mapreduce/MRIncrementalLoadTestBase.html#tableStr" class="member-name-link">tableStr</a> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/MRIncrementalLoadTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">MRIncrementalLoadTestBase</a></dt>
 <dd>&nbsp;</dd>
@@ -89239,7 +89239,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormatImpl.ScanWithEquals.html#toString()" class="member-name-link">toString()</a> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormatImpl.ScanWithEquals.html" title="class in org.apache.hadoop.hbase.mapreduce">TestMultiTableSnapshotInputFormatImpl.ScanWithEquals</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#toString()" class="member-name-link">toString()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStochasticLoadBalancer.MockCluster</a></dt>
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#toString()" class="member-name-link">toString()</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoreFileTableSkewCostFunction.DummyBalancerClusterState</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/procedure/TestHBCKSCP.HBCKSCPScheduler.html#toString()" class="member-name-link">toString()</a> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestHBCKSCP.HBCKSCPScheduler.html" title="class in org.apache.hadoop.hbase.master.procedure">TestHBCKSCP.HBCKSCPScheduler</a></dt>
 <dd>&nbsp;</dd>
@@ -94000,7 +94000,7 @@ the order they are declared.</div>
 <div class="block">Constraint to check that the naming of constraints doesn't mess up the pattern matching.(that
  constraint $___Constraint$NameConstraint isn't a problem)</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html#wouldLowerAvailability(org.apache.hadoop.hbase.client.RegionInfo,org.apache.hadoop.hbase.ServerName)" class="member-name-link">wouldLowerAvailability(RegionInfo, ServerName)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.MockCluster.html" title="class in org.apache.hadoop.hbase.master.balancer">TestStoc [...]
+<dt><a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html#wouldLowerAvailability(org.apache.hadoop.hbase.client.RegionInfo,org.apache.hadoop.hbase.ServerName)" class="member-name-link">wouldLowerAvailability(RegionInfo, ServerName)</a> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestStoreFileTableSkewCostFunction.DummyBalancerClusterState.html" title="class in org.a [...]
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.GeneratorMapper.html#wrap" class="member-name-link">wrap</a> - Variable in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.GeneratorMapper.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedList.Generator.GeneratorMapper</a></dt>
 <dd>&nbsp;</dd>
diff --git a/testdevapidocs/member-search-index.js b/testdevapidocs/member-search-index.js
index 31a6f12a196..bae4a8a24f1 100644
--- a/testdevapidocs/member-search-index.js
+++ b/testdevapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_ARI"},{"p":"org.apache.hadoop.hbase.io","c":"TestHalfStoreFileReader","l":"_b(String)","u":"_b(java.lang.String)"},{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_BRI"},{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.regionserver","c":"TestBlocksScanned","l":"_testBlo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_ARI"},{"p":"org.apache.hadoop.hbase.io","c":"TestHalfStoreFileReader","l":"_b(String)","u":"_b(java.lang.String)"},{"p":"org.apache.hadoop.hbase.master.janitor","c":"TestMetaFixerNoCluster","l":"_BRI"},{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.regionserver","c":"TestBlocksScanned","l":"_testBlo [...]
\ No newline at end of file