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 2021/07/22 16:28:28 UTC

[hbase-site] branch asf-site updated: Published site at be2c97e20340a5e3ca2efae00b00282ff0c25f17.

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 9189f29  Published site at be2c97e20340a5e3ca2efae00b00282ff0c25f17.
9189f29 is described below

commit 9189f29d4576e3061bae66c5f5f2bb04fa1fe6ae
Author: jenkins <bu...@apache.org>
AuthorDate: Thu Jul 22 16:28:12 2021 +0000

    Published site at be2c97e20340a5e3ca2efae00b00282ff0c25f17.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 apidocs/allclasses-frame.html                      |    2 -
 apidocs/allclasses-noframe.html                    |    2 -
 apidocs/index-all.html                             |   94 +-
 apidocs/org/apache/hadoop/hbase/AuthUtil.html      |    6 +-
 .../org/apache/hadoop/hbase/CellComparator.html    |   68 +-
 apidocs/org/apache/hadoop/hbase/CellUtil.html      |    4 +-
 apidocs/org/apache/hadoop/hbase/ChoreService.html  |  407 -------
 .../hadoop/hbase/ClockOutOfSyncException.html      |    4 +-
 .../hadoop/hbase/RetryImmediatelyException.html    |    4 +-
 .../org/apache/hadoop/hbase/ScheduledChore.html    |  621 ----------
 apidocs/org/apache/hadoop/hbase/ServerMetrics.html |    4 +-
 .../hadoop/hbase/class-use/ChoreService.html       |  125 --
 .../hadoop/hbase/class-use/ScheduledChore.html     |  194 ---
 .../apache/hadoop/hbase/class-use/Stoppable.html   |   68 +-
 apidocs/org/apache/hadoop/hbase/package-frame.html |    2 -
 .../org/apache/hadoop/hbase/package-summary.html   |   33 +-
 apidocs/org/apache/hadoop/hbase/package-tree.html  |    2 -
 apidocs/org/apache/hadoop/hbase/package-use.html   |   16 +-
 apidocs/overview-tree.html                         |    2 -
 .../org/apache/hadoop/hbase/CellComparator.html    |  262 ++--
 .../org/apache/hadoop/hbase/ChoreService.html      |  510 --------
 .../org/apache/hadoop/hbase/ScheduledChore.html    |  430 -------
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |   26 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/index-all.html                          |    6 +
 .../org/apache/hadoop/hbase/CellComparator.html    |   68 +-
 .../apache/hadoop/hbase/CellComparatorImpl.html    |    2 +-
 .../org/apache/hadoop/hbase/ChoreService.html      |    2 +-
 .../apache/hadoop/hbase/MetaCellComparator.html    |   45 +-
 .../org/apache/hadoop/hbase/ScheduledChore.html    |    2 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |    4 +-
 .../apache/hadoop/hbase/chaos/package-tree.html    |    2 +-
 .../hadoop/hbase/client/MutableRegionInfo.html     |   84 +-
 .../apache/hadoop/hbase/client/package-tree.html   |   26 +-
 .../apache/hadoop/hbase/executor/package-tree.html |    2 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |    6 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    6 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html       |    4 +-
 .../hbase/master/assignment/package-tree.html      |    2 +-
 .../hadoop/hbase/master/balancer/package-tree.html |    2 +-
 .../apache/hadoop/hbase/master/package-tree.html   |    6 +-
 .../hbase/master/procedure/package-tree.html       |    4 +-
 .../hadoop/hbase/mob/DefaultMobStoreCompactor.html |   40 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   16 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    6 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |    6 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   20 +-
 .../regionserver/querymatcher/package-tree.html    |    2 +-
 .../hbase/regionserver/wal/package-tree.html       |    4 +-
 .../hadoop/hbase/replication/package-tree.html     |    2 +-
 .../hadoop/hbase/rest/model/package-tree.html      |    2 +-
 .../hadoop/hbase/security/access/package-tree.html |    6 +-
 .../apache/hadoop/hbase/security/package-tree.html |    2 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |   10 +-
 .../org/apache/hadoop/hbase/CellComparator.html    |  262 ++--
 .../ChoreService.ChoreServiceThreadFactory.html    |    2 +-
 .../org/apache/hadoop/hbase/ChoreService.html      |    2 +-
 .../apache/hadoop/hbase/MetaCellComparator.html    |  177 +--
 .../org/apache/hadoop/hbase/ScheduledChore.html    |    2 +-
 .../hadoop/hbase/client/MutableRegionInfo.html     |  650 +++++-----
 .../hadoop/hbase/mob/DefaultMobStoreCompactor.html | 1282 ++++++++++----------
 downloads.html                                     |   16 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-tracking.html                                |    2 +-
 mail-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 +-
 project-summary.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 source-repository.html                             |    2 +-
 sponsors.html                                      |    2 +-
 supportingprojects.html                            |    2 +-
 team-list.html                                     |    2 +-
 testdevapidocs/index-all.html                      |    4 +
 .../hadoop/hbase/client/TestRegionInfoBuilder.html |   63 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    2 +-
 .../hadoop/hbase/mob/FaultyMobStoreCompactor.html  |   20 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   16 +-
 .../hadoop/hbase/procedure/package-tree.html       |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    4 +-
 .../hadoop/hbase/regionserver/TestRegionInfo.html  |   87 +-
 .../hadoop/hbase/regionserver/package-tree.html    |    6 +-
 .../org/apache/hadoop/hbase/test/package-tree.html |    4 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../hadoop/hbase/client/TestRegionInfoBuilder.html |  544 +++++----
 .../hadoop/hbase/mob/FaultyMobStoreCompactor.html  |  700 +++++------
 .../hadoop/hbase/regionserver/TestRegionInfo.html  |  910 +++++++-------
 106 files changed, 2925 insertions(+), 5177 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index 3352145..bcda9f9 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -456,7 +456,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 948cc19..24a87fc 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.3, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20210721200451+00'00')
-/CreationDate (D:20210721201436+00'00')
+/ModDate (D:20210722161613+00'00')
+/CreationDate (D:20210722162606+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/allclasses-frame.html b/apidocs/allclasses-frame.html
index 8fff1b6..f849d6e 100644
--- a/apidocs/allclasses-frame.html
+++ b/apidocs/allclasses-frame.html
@@ -73,7 +73,6 @@
 <li><a href="org/apache/hadoop/hbase/client/CheckAndMutate.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">CheckAndMutate</a></li>
 <li><a href="org/apache/hadoop/hbase/client/CheckAndMutate.Builder.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">CheckAndMutate.Builder</a></li>
 <li><a href="org/apache/hadoop/hbase/client/CheckAndMutateResult.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">CheckAndMutateResult</a></li>
-<li><a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase" target="classFrame">ChoreService</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/Cipher.html" title="class in org.apache.hadoop.hbase.io.crypto" target="classFrame">Cipher</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/CipherProvider.html" title="interface in org.apache.hadoop.hbase.io.crypto" target="classFrame"><span class="interfaceName">CipherProvider</span></a></li>
 <li><a href="org/apache/hadoop/hbase/rest/client/Client.html" title="class in org.apache.hadoop.hbase.rest.client" target="classFrame">Client</a></li>
@@ -320,7 +319,6 @@
 <li><a href="org/apache/hadoop/hbase/exceptions/ScannerResetException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">ScannerResetException</a></li>
 <li><a href="org/apache/hadoop/hbase/client/ScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client" target="classFrame"><span class="interfaceName">ScanResultConsumer</span></a></li>
 <li><a href="org/apache/hadoop/hbase/client/ScanResultConsumerBase.html" title="interface in org.apache.hadoop.hbase.client" target="classFrame"><span class="interfaceName">ScanResultConsumerBase</span></a></li>
-<li><a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase" target="classFrame">ScheduledChore</a></li>
 <li><a href="org/apache/hadoop/hbase/client/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security" target="classFrame">SecurityCapability</a></li>
 <li><a href="org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase" target="classFrame"><span class="interfaceName">ServerMetrics</span></a></li>
 <li><a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase" target="classFrame">ServerName</a></li>
diff --git a/apidocs/allclasses-noframe.html b/apidocs/allclasses-noframe.html
index cc5cc4e..38ae0f6 100644
--- a/apidocs/allclasses-noframe.html
+++ b/apidocs/allclasses-noframe.html
@@ -73,7 +73,6 @@
 <li><a href="org/apache/hadoop/hbase/client/CheckAndMutate.html" title="class in org.apache.hadoop.hbase.client">CheckAndMutate</a></li>
 <li><a href="org/apache/hadoop/hbase/client/CheckAndMutate.Builder.html" title="class in org.apache.hadoop.hbase.client">CheckAndMutate.Builder</a></li>
 <li><a href="org/apache/hadoop/hbase/client/CheckAndMutateResult.html" title="class in org.apache.hadoop.hbase.client">CheckAndMutateResult</a></li>
-<li><a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/Cipher.html" title="class in org.apache.hadoop.hbase.io.crypto">Cipher</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/CipherProvider.html" title="interface in org.apache.hadoop.hbase.io.crypto"><span class="interfaceName">CipherProvider</span></a></li>
 <li><a href="org/apache/hadoop/hbase/rest/client/Client.html" title="class in org.apache.hadoop.hbase.rest.client">Client</a></li>
@@ -320,7 +319,6 @@
 <li><a href="org/apache/hadoop/hbase/exceptions/ScannerResetException.html" title="class in org.apache.hadoop.hbase.exceptions">ScannerResetException</a></li>
 <li><a href="org/apache/hadoop/hbase/client/ScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client"><span class="interfaceName">ScanResultConsumer</span></a></li>
 <li><a href="org/apache/hadoop/hbase/client/ScanResultConsumerBase.html" title="interface in org.apache.hadoop.hbase.client"><span class="interfaceName">ScanResultConsumerBase</span></a></li>
-<li><a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></li>
 <li><a href="org/apache/hadoop/hbase/client/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security">SecurityCapability</a></li>
 <li><a href="org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="interfaceName">ServerMetrics</span></a></li>
 <li><a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></li>
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 41da139..89f18cc 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -1106,10 +1106,6 @@
 <dd>
 <div class="block">CallTimeoutException with cause</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#cancel--">cancel()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#cancel-boolean-">cancel(boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RequestController.Checker.html#canTakeRow-org.apache.hadoop.hbase.HRegionLocation-org.apache.hadoop.hbase.client.Row-">canTakeRow(HRegionLocation, Row)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RequestController.Checker.html" title="interface in org.apache.hadoop.hbase.client">RequestController.Checker</a></dt>
 <dd>
 <div class="block">Checks the data whether it is valid to submit.</div>
@@ -1317,25 +1313,8 @@
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 <div class="block">Return an md5 digest of the entire contents of a table.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#chore--">chore()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>
-<div class="block">The task to execute on each scheduled execution of the Chore</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/ChaosConstants.html#CHORE_SERVICE_PREFIX">CHORE_SERVICE_PREFIX</a></span> - Static variable in class org.apache.hadoop.hbase.chaos.<a href="org/apache/hadoop/hbase/chaos/ChaosConstants.html" title="class in org.apache.hadoop.hbase.chaos">ChaosConstants</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#choreForTesting--">choreForTesting()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ChoreService</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
-<dd>
-<div class="block">ChoreService is a service that can be used to schedule instances of <a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a> to run
- periodically while sharing threads.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#ChoreService-java.lang.String-">ChoreService(String)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#ChoreService-java.lang.String-boolean-">ChoreService(String, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#ChoreService-java.lang.String-int-boolean-">ChoreService(String, int, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/io/crypto/Cipher.html" title="class in org.apache.hadoop.hbase.io.crypto"><span class="typeNameLink">Cipher</span></a> - Class in <a href="org/apache/hadoop/hbase/io/crypto/package-summary.html">org.apache.hadoop.hbase.io.crypto</a></dt>
 <dd>
 <div class="block">A common interface for a cryptographic algorithm.</div>
@@ -1368,10 +1347,6 @@
 <dd>
 <div class="block">Turn the cleaner chore on/off.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#cleanup--">cleanup()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>
-<div class="block">Override to run cleanup tasks when the Chore encounters an error and must stop running</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#cleanupDataTestDirOnTestFS--">cleanupDataTestDirOnTestFS()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
@@ -1957,6 +1932,10 @@
 <div class="block">Compares the row part of the cell with a simple plain byte[] like the
  stopRow in Scan.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#compareRows-byte:A-byte:A-">compareRows(byte[], byte[])</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
+<dd>
+<div class="block">Compares two row bytes</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows(ByteBuffer, Cell)</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#compareTimestamps-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareTimestamps(Cell, Cell)</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
@@ -6727,8 +6706,6 @@
 <div class="block">Returns a ClusterStatus for this HBase cluster as observed at the
  starting of the HBaseCluster</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#getInitialDelay--">getInitialDelay()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/BalancerDecision.html#getInitialFunctionCosts--">getInitialFunctionCosts()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BalancerDecision.html" title="class in org.apache.hadoop.hbase.client">BalancerDecision</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/BalancerDecision.html#getInitTotalCost--">getInitTotalCost()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BalancerDecision.html" title="class in org.apache.hadoop.hbase.client">BalancerDecision</a></dt>
@@ -7153,8 +7130,6 @@
 <dd>
 <div class="block">Get group name.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#getName--">getName()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#getName--">getName()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
 <dd>
 <div class="block">Returns the full user name.</div>
@@ -7389,8 +7364,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html#getPeerId--">getPeerId()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#getPeriod--">getPeriod()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncBufferedMutator.html#getPeriodicalFlushTimeout-java.util.concurrent.TimeUnit-">getPeriodicalFlushTimeout(TimeUnit)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncBufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">AsyncBufferedMutator</a></dt>
 <dd>
 <div class="block">Returns the periodical flush interval, 0 means disabled.</div>
@@ -8180,8 +8153,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Result.html#getStats--">getStats()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#getStopper--">getStopper()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#getStopRow--">getStopRow()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#getStopRowKey--">getStopRowKey()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter">InclusiveStopFilter</a></dt>
@@ -8397,8 +8368,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html#getTimeToLive--">getTimeToLive()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#getTimeUnit--">getTimeUnit()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#getToken-java.lang.String-java.lang.String-">getToken(String, String)</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
 <dd>
 <div class="block">Returns the Token of the specified kind associated with this user,
@@ -9709,10 +9678,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/TimeRange.html#INITIAL_MIN_TIMESTAMP">INITIAL_MIN_TIMESTAMP</a></span> - Static variable in class org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#initialChore--">initialChore()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>
-<div class="block">Override to run a task before we start looping.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseCluster.html#initialClusterStatus">initialClusterStatus</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
@@ -9983,8 +9948,6 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Get.html#isCheckExistenceOnly--">isCheckExistenceOnly()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#isChoreScheduled-org.apache.hadoop.hbase.ScheduledChore-">isChoreScheduled(ScheduledChore)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#isCleanerChoreEnabled--">isCleanerChoreEnabled()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Query on the cleaner chore state (Enabled/Disabled?).</div>
@@ -10140,8 +10103,6 @@
 <dd>
 <div class="block">Returns whether or not secure authentication is enabled for HBase.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#isInitialChoreComplete--">isInitialChoreComplete()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html#isInMemory--">isInMemory()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotView.SpaceQuotaStatusView.html#isInViolation--">isInViolation()</a></span> - Method in interface org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotView.SpaceQuotaStatusView.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotView.SpaceQuotaStatusView</a></dt>
@@ -10437,8 +10398,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#isScanMetricsEnabled--">isScanMetricsEnabled()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#isScheduled--">isScheduled()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/MultiRowRangeFilter.RowRange.html#isSearchRowInclusive--">isSearchRowInclusive()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/MultiRowRangeFilter.RowRange.html" title="class in org.apache.hadoop.hbase.filter">MultiRowRangeFilter.RowRange</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#isSecurityEnabled--">isSecurityEnabled()</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
@@ -10449,8 +10408,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseConfiguration.html#isShowConfInServlet--">isShowConfInServlet()</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseConfiguration.html" title="class in org.apache.hadoop.hbase">HBaseConfiguration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#isShutdown--">isShutdown()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/types/DataType.html#isSkippable--">isSkippable()</a></span> - Method in interface org.apache.hadoop.hbase.types.<a href="org/apache/hadoop/hbase/types/DataType.html" title="interface in org.apache.hadoop.hbase.types">DataType</a></dt>
 <dd>
 <div class="block">Indicates whether this instance is able to skip over it's encoded value.</div>
@@ -10553,8 +10510,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncAdmin.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled(TableName)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#isTerminated--">isTerminated()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/OrderedBytes.html#isText-org.apache.hadoop.hbase.util.PositionedByteRange-">isText(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
 <dd>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Text encoding,
@@ -11653,10 +11608,6 @@
 <dd>
 <div class="block">Minimum MOB file age to archive, default (3600000 - 1h)</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#MIN_CORE_POOL_SIZE">MIN_CORE_POOL_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>
-<div class="block">The minimum number of threads in the core pool of the underlying ScheduledThreadPoolExecutor</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#MIN_KEEP_SEQID_PERIOD">MIN_KEEP_SEQID_PERIOD</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>
 <div class="block">At least to keep MVCC values in hfiles for 5 days</div>
@@ -14720,8 +14671,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/WALPlayer.html#run-java.lang.String:A-">run(String[])</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/WALPlayer.html" title="class in org.apache.hadoop.hbase.mapreduce">WALPlayer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#runAs-java.security.PrivilegedAction-">runAs(PrivilegedAction&lt;T&gt;)</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
 <dd>
 <div class="block">Executes the given action within the context of this user.</div>
@@ -14891,22 +14840,6 @@ service.</div>
 <dd>
 <div class="block">Job parameter that specifies the scan list.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#scheduleChore-org.apache.hadoop.hbase.ScheduledChore-">scheduleChore(ScheduledChore)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ScheduledChore</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
-<dd>
-<div class="block">ScheduledChore is a task performed on a period in hbase.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore--">ScheduledChore()</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>
-<div class="block">This constructor is for test only.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ScheduledChore(String, Stoppable, int)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-">ScheduledChore(String, Stoppable, int, long)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-java.util.concurrent.TimeUnit-">ScheduledChore(String, Stoppable, int, long, TimeUnit)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/Bytes.html#searchDelimiterIndex-byte:A-int-int-int-">searchDelimiterIndex(byte[], int, int, int)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/Bytes.html#searchDelimiterIndexInReverse-byte:A-int-int-int-">searchDelimiterIndexInReverse(byte[], int, int, int)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></dt>
@@ -16167,10 +16100,6 @@ service.</div>
 <dd>
 <div class="block">Specify if we have to shuffle the map tasks.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ChoreService.html#shutdown--">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></dt>
-<dd>
-<div class="block">shutdown the service.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#shutdown--">shutdown()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Shuts down the HBase cluster.</div>
@@ -16193,15 +16122,6 @@ service.</div>
 <dd>
 <div class="block">Shut down the client.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#shutdown--">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>
-<div class="block">Call <a href="org/apache/hadoop/hbase/ScheduledChore.html#shutdown-boolean-"><code>ScheduledChore.shutdown(boolean)</code></a> with <code>true</code>.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#shutdown-boolean-">shutdown(boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>
-<div class="block">Completely shutdown the ScheduleChore, which means we will call cleanup and you should not
- schedule it again.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.html#shutdown--">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/MiniZooKeeperCluster.html" title="class in org.apache.hadoop.hbase.zookeeper">MiniZooKeeperCluster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#shutdownMiniCluster--">shutdownMiniCluster()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
@@ -18115,10 +18035,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html#toString--">toString()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#toString--">toString()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>
-<div class="block">A summation of this chore in human readable format.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/User.html#toString--">toString()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#toString--">toString()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
@@ -18203,8 +18119,6 @@ service.</div>
 <dd>
 <div class="block">Transit current cluster to a new state in a synchronous replication peer.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#triggerNow--">triggerNow()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-">truncateTable(TableName, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Truncate a table.</div>
diff --git a/apidocs/org/apache/hadoop/hbase/AuthUtil.html b/apidocs/org/apache/hadoop/hbase/AuthUtil.html
index 2e10cf7..6cd44f2 100644
--- a/apidocs/org/apache/hadoop/hbase/AuthUtil.html
+++ b/apidocs/org/apache/hadoop/hbase/AuthUtil.html
@@ -208,7 +208,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
+<td class="colFirst"><code>static org.apache.hadoop.hbase.ScheduledChore</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
 <div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be
@@ -283,8 +283,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>getAuthChore</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.223">getAuthChore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
-                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+public static&nbsp;org.apache.hadoop.hbase.ScheduledChore&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/AuthUtil.html#line.223">getAuthChore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Deprecated since 2.2.0, this method will be
    <code>InterfaceAudience.Private</code> use only after 4.0.0.</span></div>
 <div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
diff --git a/apidocs/org/apache/hadoop/hbase/CellComparator.html b/apidocs/org/apache/hadoop/hbase/CellComparator.html
index 77f019f..3d015ef 100644
--- a/apidocs/org/apache/hadoop/hbase/CellComparator.html
+++ b/apidocs/org/apache/hadoop/hbase/CellComparator.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":18,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":17,"i11":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":18,"i5":18,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":17,"i12":6};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Public
  @InterfaceStability.Evolving
-public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.32">CellComparator</a>
+public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.33">CellComparator</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;</pre>
 <div class="block">Comparator for comparing cells and has some specialized methods that allows comparing individual
  cell components like row, family, qualifier and timestamp</div>
@@ -160,10 +160,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>default int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-byte:A-byte:A-">compareRows</a></span>(byte[]&nbsp;leftRow,
+           byte[]&nbsp;rightRow)</code>
+<div class="block">Compares two row bytes</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>default int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-org.apache.hadoop.hbase.Cell-byte:A-int-int-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
            byte[]&nbsp;bytes,
@@ -173,41 +180,41 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
  stopRow in Scan.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</code>
 <div class="block">Lexographically compares the rows of two cells.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareTimestamps-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareTimestamps</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</code>
 <div class="block">Compares cell's timestamps in DESCENDING order.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareTimestamps-long-long-">compareTimestamps</a></span>(long&nbsp;leftCellts,
                  long&nbsp;rightCellts)</code>
 <div class="block">Compares cell's timestamps in DESCENDING order.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareWithoutRow-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareWithoutRow</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</code>
 <div class="block">Lexographically compares the two cells excluding the row part.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getInstance--">getInstance</a></span>()</code>
 <div class="block">A comparator for ordering cells in user-space tables.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator</a></span>()</code>&nbsp;</td>
 </tr>
@@ -239,7 +246,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.41">getInstance</a>()</pre>
+<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.42">getInstance</a>()</pre>
 <div class="block">A comparator for ordering cells in user-space tables. Useful when writing cells in sorted
  order as necessary for bulk import (i.e. via MapReduce).
  <p>
@@ -253,7 +260,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.54">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.55">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares two cells. The key part of the cell is taken for comparison which
  includes row, family, qualifier, timestamp and type</div>
@@ -275,7 +282,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.62">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.63">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell,
             boolean&nbsp;ignoreSequenceid)</pre>
 <div class="block">Compare cells.</div>
@@ -294,7 +301,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.71">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.72">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                 <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the rows of two cells.</div>
 <dl>
@@ -313,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.83">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.84">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                 byte[]&nbsp;bytes,
                 int&nbsp;offset,
                 int&nbsp;length)</pre>
@@ -331,13 +338,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 </dl>
 </li>
 </ul>
+<a name="compareRows-byte:A-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>compareRows</h4>
+<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.93">compareRows</a>(byte[]&nbsp;leftRow,
+                        byte[]&nbsp;rightRow)</pre>
+<div class="block">Compares two row bytes</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>leftRow</code> - the byte array of the left row</dd>
+<dd><code>rightRow</code> - the byte array of the right row</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>greater than 0 if leftRow is bigger, less than 0 if rightRow is bigger, 0 if both
+         rows are equal</dd>
+</dl>
+</li>
+</ul>
 <a name="compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.91">compareRows</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
+<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.103">compareRows</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
                         <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -355,7 +381,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareWithoutRow</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.111">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.123">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the two cells excluding the row part. It compares family, qualifier,
  timestamp and the type</div>
@@ -375,7 +401,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareFamilies</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.120">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.132">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                     <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the families of the two cells</div>
 <dl>
@@ -394,7 +420,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareQualifiers</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.129">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.141">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the qualifiers of the two cells</div>
 <dl>
@@ -413,7 +439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.141">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.153">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -435,7 +461,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.153">compareTimestamps</a>(long&nbsp;leftCellts,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.165">compareTimestamps</a>(long&nbsp;leftCellts,
                       long&nbsp;rightCellts)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -457,7 +483,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSimpleComparator</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.160">getSimpleComparator</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.172">getSimpleComparator</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>A dumbed-down, fast comparator for hbase2 base-type, the <code>ByteBufferKeyValue</code>.
diff --git a/apidocs/org/apache/hadoop/hbase/CellUtil.html b/apidocs/org/apache/hadoop/hbase/CellUtil.html
index f5c32b4..904d413 100644
--- a/apidocs/org/apache/hadoop/hbase/CellUtil.html
+++ b/apidocs/org/apache/hadoop/hbase/CellUtil.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/ClockOutOfSyncException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/CellUtil.html" target="_top">Frames</a></li>
@@ -1196,7 +1196,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/ClockOutOfSyncException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/CellUtil.html" target="_top">Frames</a></li>
diff --git a/apidocs/org/apache/hadoop/hbase/ChoreService.html b/apidocs/org/apache/hadoop/hbase/ChoreService.html
deleted file mode 100644
index 3ade0f4..0000000
--- a/apidocs/org/apache/hadoop/hbase/ChoreService.html
+++ /dev/null
@@ -1,407 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ChoreService (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ChoreService (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ChoreService.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../index-all.html">Index</a></li>
-<li><a href="../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ClockOutOfSyncException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../index.html?org/apache/hadoop/hbase/ChoreService.html" target="_top">Frames</a></li>
-<li><a href="ChoreService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase</div>
-<h2 title="Class ChoreService" class="title">Class ChoreService</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.ChoreService</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.54">ChoreService</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-<div class="block">ChoreService is a service that can be used to schedule instances of <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a> to run
- periodically while sharing threads. The ChoreService is backed by a
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent"><code>ScheduledThreadPoolExecutor</code></a> whose core pool size changes dynamically depending on the
- number of <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a> scheduled. All of the threads in the core thread pool of the
- underlying <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent"><code>ScheduledThreadPoolExecutor</code></a> are set to be daemon threads.
- <p>
- The ChoreService provides the ability to schedule, cancel, and trigger instances of
- <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a>. The ChoreService also provides the ability to check on the status of
- scheduled chores. The number of threads used by the ChoreService changes based on the scheduling
- load and whether or not the scheduled chores are executing on time. As more chores are scheduled,
- there may be a need to increase the number of threads if it is noticed that chores are no longer
- meeting their scheduled start times. On the other hand, as chores are cancelled, an attempt is
- made to reduce the number of running threads to see if chores can still meet their start times
- with a smaller thread pool.
- <p>
- When finished with a ChoreService it is good practice to call <a href="../../../../org/apache/hadoop/hbase/ChoreService.html#shutdown--"><code>shutdown()</code></a>.
- Calling this method ensures that all scheduled chores are cancelled and cleaned up properly.</div>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html#ChoreService-java.lang.String-">ChoreService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;coreThreadPoolPrefix)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html#ChoreService-java.lang.String-boolean-">ChoreService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;coreThreadPoolPrefix,
-            boolean&nbsp;jitter)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html#ChoreService-java.lang.String-int-boolean-">ChoreService</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;coreThreadPoolPrefix,
-            int&nbsp;corePoolSize,
-            boolean&nbsp;jitter)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html#isShutdown--">isShutdown</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html#isTerminated--">isTerminated</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html#scheduleChore-org.apache.hadoop.hbase.ScheduledChore-">scheduleChore</a></span>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html#shutdown--">shutdown</a></span>()</code>
-<div class="block">shutdown the service.</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="ChoreService-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ChoreService</h4>
-<pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.95">ChoreService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;coreThreadPoolPrefix)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>coreThreadPoolPrefix</code> - Prefix that will be applied to the Thread name of all threads
-          spawned by this service</dd>
-</dl>
-</li>
-</ul>
-<a name="ChoreService-java.lang.String-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ChoreService</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.105">ChoreService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;coreThreadPoolPrefix,
-                    boolean&nbsp;jitter)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>coreThreadPoolPrefix</code> - Prefix that will be applied to the Thread name of all threads
-          spawned by this service</dd>
-<dd><code>jitter</code> - Should chore service add some jitter for all of the scheduled chores. When set
-               to true this will add -10% to 10% jitter.</dd>
-</dl>
-</li>
-</ul>
-<a name="ChoreService-java.lang.String-int-boolean-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ChoreService</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.118">ChoreService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;coreThreadPoolPrefix,
-                    int&nbsp;corePoolSize,
-                    boolean&nbsp;jitter)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>coreThreadPoolPrefix</code> - Prefix that will be applied to the Thread name of all threads
-          spawned by this service</dd>
-<dd><code>corePoolSize</code> - The initial size to set the core pool of the ScheduledThreadPoolExecutor
-          to during initialization. The default size is 1, but specifying a larger size may be
-          beneficial if you know that 1 thread will not be enough.</dd>
-<dd><code>jitter</code> - Should chore service add some jitter for all of the scheduled chores. When set
-               to true this will add -10% to 10% jitter.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="scheduleChore-org.apache.hadoop.hbase.ScheduledChore-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>scheduleChore</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.143">scheduleChore</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>chore</code> - Chore to be scheduled. If the chore is already scheduled with another ChoreService
-          instance, that schedule will be cancelled (i.e. a Chore can only ever be scheduled
-          with a single ChoreService instance).</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true when the chore was successfully scheduled. false when the scheduling failed
-         (typically occurs when a chore is scheduled during shutdown of service)</dd>
-</dl>
-</li>
-</ul>
-<a name="shutdown--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.365">shutdown</a>()</pre>
-<div class="block">shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores
- in the middle of execution will be interrupted and shutdown. This service will be unusable
- after this method has been called (i.e. future scheduling attempts will fail).
- <p/>
- Notice that, this will only clean the chore from this ChoreService but you could still schedule
- the chore with other ChoreService.</div>
-</li>
-</ul>
-<a name="isShutdown--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isShutdown</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.380">isShutdown</a>()</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true when the service is shutdown and thus cannot be used anymore</dd>
-</dl>
-</li>
-</ul>
-<a name="isTerminated--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>isTerminated</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.387">isTerminated</a>()</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true when the service is shutdown and all threads have terminated</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ChoreService.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../index-all.html">Index</a></li>
-<li><a href="../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ClockOutOfSyncException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../index.html?org/apache/hadoop/hbase/ChoreService.html" target="_top">Frames</a></li>
-<li><a href="ChoreService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
diff --git a/apidocs/org/apache/hadoop/hbase/ClockOutOfSyncException.html b/apidocs/org/apache/hadoop/hbase/ClockOutOfSyncException.html
index 93151c5..75f6bb7 100644
--- a/apidocs/org/apache/hadoop/hbase/ClockOutOfSyncException.html
+++ b/apidocs/org/apache/hadoop/hbase/ClockOutOfSyncException.html
@@ -43,7 +43,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -225,7 +225,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/apidocs/org/apache/hadoop/hbase/RetryImmediatelyException.html b/apidocs/org/apache/hadoop/hbase/RetryImmediatelyException.html
index d9be235..b0f5a94 100644
--- a/apidocs/org/apache/hadoop/hbase/RetryImmediatelyException.html
+++ b/apidocs/org/apache/hadoop/hbase/RetryImmediatelyException.html
@@ -44,7 +44,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/ReplicationPeerNotFoundException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/RetryImmediatelyException.html" target="_top">Frames</a></li>
@@ -228,7 +228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../org/apache/hadoop/hbase/ReplicationPeerNotFoundException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?org/apache/hadoop/hbase/RetryImmediatelyException.html" target="_top">Frames</a></li>
diff --git a/apidocs/org/apache/hadoop/hbase/ScheduledChore.html b/apidocs/org/apache/hadoop/hbase/ScheduledChore.html
deleted file mode 100644
index ab0637e..0000000
--- a/apidocs/org/apache/hadoop/hbase/ScheduledChore.html
+++ /dev/null
@@ -1,621 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ScheduledChore (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ScheduledChore (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":6,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ScheduledChore.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../index-all.html">Index</a></li>
-<li><a href="../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/RetryImmediatelyException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../index.html?org/apache/hadoop/hbase/ScheduledChore.html" target="_top">Frames</a></li>
-<li><a href="ScheduledChore.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase</div>
-<h2 title="Class ScheduledChore" class="title">Class ScheduledChore</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.ScheduledChore</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></dd>
-</dl>
-<hr>
-<br>
-<pre>@InterfaceAudience.Public
-public abstract class <a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.44">ScheduledChore</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
-implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
-<div class="block">ScheduledChore is a task performed on a period in hbase. ScheduledChores become active once
- scheduled with a <a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><code>ChoreService</code></a> via <a href="../../../../org/apache/hadoop/hbase/ChoreService.html#scheduleChore-org.apache.hadoop.hbase.ScheduledChore-"><code>ChoreService.scheduleChore(ScheduledChore)</code></a>. The
- chore is run in a <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent"><code>ScheduledThreadPoolExecutor</code></a> and competes with other ScheduledChores for
- access to the threads in the core thread pool. If an unhandled exception occurs, the chore
- cancellation is logged. Implementers should consider whether or not the Chore will be able to
- execute within the defined period. It is bad practice to define a ScheduledChore whose execution
- time exceeds its period since it will try to hog one of the threads in the <a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><code>ChoreService</code></a>'s
- thread pool.
- <p/>
- Don't subclass ScheduledChore if the task relies on being woken up for something to do, such as
- an entry being added to a queue, etc.</div>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier</th>
-<th class="colLast" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore--">ScheduledChore</a></span>()</code>
-<div class="block">This constructor is for test only.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ScheduledChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-              <a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-              int&nbsp;period)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-">ScheduledChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-              <a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-              int&nbsp;period,
-              long&nbsp;initialDelay)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-java.util.concurrent.TimeUnit-">ScheduledChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-              <a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-              int&nbsp;period,
-              long&nbsp;initialDelay,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabE [...]
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#cancel--">cancel</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#cancel-boolean-">cancel</a></span>(boolean&nbsp;mayInterruptIfRunning)</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>protected abstract void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">chore</a></span>()</code>
-<div class="block">The task to execute on each scheduled execution of the Chore</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#cleanup--">cleanup</a></span>()</code>
-<div class="block">Override to run cleanup tasks when the Chore encounters an error and must stop running</div>
-</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#getInitialDelay--">getInitialDelay</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#getName--">getName</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#getPeriod--">getPeriod</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code><a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#getStopper--">getStopper</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#getTimeUnit--">getTimeUnit</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#initialChore--">initialChore</a></span>()</code>
-<div class="block">Override to run a task before we start looping.</div>
-</td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#isInitialChoreComplete--">isInitialChoreComplete</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#isScheduled--">isScheduled</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#run--">run</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#shutdown--">shutdown</a></span>()</code>
-<div class="block">Call <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#shutdown-boolean-"><code>shutdown(boolean)</code></a> with <code>true</code>.</div>
-</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#shutdown-boolean-">shutdown</a></span>(boolean&nbsp;mayInterruptIfRunning)</code>
-<div class="block">Completely shutdown the ScheduleChore, which means we will call cleanup and you should not
- schedule it again.</div>
-</td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#triggerNow--">triggerNow</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="ScheduledChore--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ScheduledChore</h4>
-<pre>@InterfaceAudience.Private
-protected&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.87">ScheduledChore</a>()</pre>
-<div class="block">This constructor is for test only. It allows us to create an object and to call chore() on it.</div>
-</li>
-</ul>
-<a name="ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ScheduledChore</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.96">ScheduledChore</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-                      <a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-                      int&nbsp;period)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>name</code> - Name assigned to Chore. Useful for identification amongst chores of the same type</dd>
-<dd><code>stopper</code> - When <a href="../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--"><code>Stoppable.isStopped()</code></a> is true, this chore will cancel and cleanup</dd>
-<dd><code>period</code> - Period in millis with which this Chore repeats execution when scheduled.</dd>
-</dl>
-</li>
-</ul>
-<a name="ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ScheduledChore</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.108">ScheduledChore</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-                      <a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-                      int&nbsp;period,
-                      long&nbsp;initialDelay)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>name</code> - Name assigned to Chore. Useful for identification amongst chores of the same type</dd>
-<dd><code>stopper</code> - When <a href="../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--"><code>Stoppable.isStopped()</code></a> is true, this chore will cancel and cleanup</dd>
-<dd><code>period</code> - Period in millis with which this Chore repeats execution when scheduled.</dd>
-<dd><code>initialDelay</code> - Delay before this Chore begins to execute once it has been scheduled. A
-          value of 0 means the chore will begin to execute immediately. Negative delays are
-          invalid and will be corrected to a value of 0.</dd>
-</dl>
-</li>
-</ul>
-<a name="ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-java.util.concurrent.TimeUnit-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ScheduledChore</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.122">ScheduledChore</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-                      <a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-                      int&nbsp;period,
-                      long&nbsp;initialDelay,
-                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>name</code> - Name assigned to Chore. Useful for identification amongst chores of the same type</dd>
-<dd><code>stopper</code> - When <a href="../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--"><code>Stoppable.isStopped()</code></a> is true, this chore will cancel and cleanup</dd>
-<dd><code>period</code> - Period in Timeunit unit with which this Chore repeats execution when scheduled.</dd>
-<dd><code>initialDelay</code> - Delay in Timeunit unit before this Chore begins to execute once it has been
-          scheduled. A value of 0 means the chore will begin to execute immediately. Negative
-          delays are invalid and will be corrected to a value of 0.</dd>
-<dd><code>unit</code> - The unit that is used to measure period and initialDelay</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="run--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.135">run</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang"><code>Runnable.run()</code></a></dd>
-</dl>
-</li>
-</ul>
-<a name="triggerNow--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>triggerNow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.226">triggerNow</a>()</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>false when the Chore is not currently scheduled with a ChoreService</dd>
-</dl>
-</li>
-</ul>
-<a name="cancel--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>cancel</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.241">cancel</a>()</pre>
-</li>
-</ul>
-<a name="cancel-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>cancel</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.245">cancel</a>(boolean&nbsp;mayInterruptIfRunning)</pre>
-</li>
-</ul>
-<a name="getName--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getName</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.252">getName</a>()</pre>
-</li>
-</ul>
-<a name="getStopper--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getStopper</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.256">getStopper</a>()</pre>
-</li>
-</ul>
-<a name="getPeriod--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getPeriod</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.263">getPeriod</a>()</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>period to execute chore in getTimeUnit() units</dd>
-</dl>
-</li>
-</ul>
-<a name="getInitialDelay--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getInitialDelay</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.270">getInitialDelay</a>()</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>initial delay before executing chore in getTimeUnit() units</dd>
-</dl>
-</li>
-</ul>
-<a name="getTimeUnit--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getTimeUnit</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.274">getTimeUnit</a>()</pre>
-</li>
-</ul>
-<a name="isInitialChoreComplete--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isInitialChoreComplete</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.278">isInitialChoreComplete</a>()</pre>
-</li>
-</ul>
-<a name="isScheduled--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isScheduled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.297">isScheduled</a>()</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true when this Chore is scheduled with a ChoreService</dd>
-</dl>
-</li>
-</ul>
-<a name="chore--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>chore</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.311">chore</a>()</pre>
-<div class="block">The task to execute on each scheduled execution of the Chore</div>
-</li>
-</ul>
-<a name="initialChore--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>initialChore</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.317">initialChore</a>()</pre>
-<div class="block">Override to run a task before we start looping.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if initial chore was successful</dd>
-</dl>
-</li>
-</ul>
-<a name="cleanup--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>cleanup</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.325">cleanup</a>()</pre>
-<div class="block">Override to run cleanup tasks when the Chore encounters an error and must stop running</div>
-</li>
-</ul>
-<a name="shutdown--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.332">shutdown</a>()</pre>
-<div class="block">Call <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#shutdown-boolean-"><code>shutdown(boolean)</code></a> with <code>true</code>.</div>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html#shutdown-boolean-"><code>shutdown(boolean)</code></a></dd>
-</dl>
-</li>
-</ul>
-<a name="shutdown-boolean-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.342">shutdown</a>(boolean&nbsp;mayInterruptIfRunning)</pre>
-<div class="block">Completely shutdown the ScheduleChore, which means we will call cleanup and you should not
- schedule it again.
- <p/>
- This is another path to cleanup the chore, comparing to stop the stopper instance passed in.</div>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ScheduledChore.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../index-all.html">Index</a></li>
-<li><a href="../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/RetryImmediatelyException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../index.html?org/apache/hadoop/hbase/ScheduledChore.html" target="_top">Frames</a></li>
-<li><a href="ScheduledChore.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
diff --git a/apidocs/org/apache/hadoop/hbase/ServerMetrics.html b/apidocs/org/apache/hadoop/hbase/ServerMetrics.html
index 5cd9c33..210312c 100644
--- a/apidocs/org/apache/hadoop/hbase/ServerMetrics.html
+++ b/apidocs/org/apache/hadoop/hbase/ServerMetrics.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/RetryImmediatelyException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -476,7 +476,7 @@ public interface <a href="../../../../src-html/org/apache/hadoop/hbase/ServerMet
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../org/apache/hadoop/hbase/RetryImmediatelyException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/apidocs/org/apache/hadoop/hbase/class-use/ChoreService.html b/apidocs/org/apache/hadoop/hbase/class-use/ChoreService.html
deleted file mode 100644
index 19a45d7..0000000
--- a/apidocs/org/apache/hadoop/hbase/class-use/ChoreService.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.ChoreService (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.ChoreService (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/class-use/ChoreService.html" target="_top">Frames</a></li>
-<li><a href="ChoreService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.ChoreService" class="title">Uses of Class<br>org.apache.hadoop.hbase.ChoreService</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.ChoreService</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/class-use/ChoreService.html" target="_top">Frames</a></li>
-<li><a href="ChoreService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
diff --git a/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html b/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
deleted file mode 100644
index cd4842c..0000000
--- a/apidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.ScheduledChore (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.ScheduledChore (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/class-use/ScheduledChore.html" target="_top">Frames</a></li>
-<li><a href="ScheduledChore.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.ScheduledChore" class="title">Uses of Class<br>org.apache.hadoop.hbase.ScheduledChore</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase">org.apache.hadoop.hbase</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> in <a href="../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a> that return <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthChore-org.apache.hadoop.conf.Configuration-">getAuthChore</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
-<div class="block"><span class="deprecationComment">Deprecated since 2.2.0, this method will be
-   <code>InterfaceAudience.Private</code> use only after 4.0.0.</span></div>
-</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AuthUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/AuthUtil.html#getAuthRenewalChore-org.apache.hadoop.security.UserGroupInformation-">getAuthRenewalChore</a></span>(org.apache.hadoop.security.UserGroupInformation&nbsp;user)</code>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
-<div class="block">Checks if security is enabled and if so, launches chore for refreshing kerberos ticket.</div>
-</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a> with parameters of type <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ChoreService.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ChoreService.html#isChoreScheduled-org.apache.hadoop.hbase.ScheduledChore-">isChoreScheduled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ChoreService.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ChoreService.html#scheduleChore-org.apache.hadoop.hbase.ScheduledChore-">scheduleChore</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/class-use/ScheduledChore.html" target="_top">Frames</a></li>
-<li><a href="ScheduledChore.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
diff --git a/apidocs/org/apache/hadoop/hbase/class-use/Stoppable.html b/apidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
index dde147e..1b6a0fb 100644
--- a/apidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
+++ b/apidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
@@ -72,73 +72,7 @@
 <div class="header">
 <h2 title="Uses of Interface org.apache.hadoop.hbase.Stoppable" class="title">Uses of Interface<br>org.apache.hadoop.hbase.Stoppable</h2>
 </div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase">org.apache.hadoop.hbase</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> in <a href="../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a> that return <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ScheduledChore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getStopper--">getStopper</a></span>()</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
-<caption><span>Constructors in <a href="../../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a> with parameters of type <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ScheduledChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-              <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-              int&nbsp;period)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-">ScheduledChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-              <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-              int&nbsp;period,
-              long&nbsp;initialDelay)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#ScheduledChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-long-java.util.concurrent.TimeUnit-">ScheduledChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
-              <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
-              int&nbsp;period,
-              long&nbsp;initialDelay,
-              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.Stoppable</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
diff --git a/apidocs/org/apache/hadoop/hbase/package-frame.html b/apidocs/org/apache/hadoop/hbase/package-frame.html
index 80be7b7..332b95e 100644
--- a/apidocs/org/apache/hadoop/hbase/package-frame.html
+++ b/apidocs/org/apache/hadoop/hbase/package-frame.html
@@ -30,7 +30,6 @@
 <li><a href="CacheEvictionStats.html" title="class in org.apache.hadoop.hbase" target="classFrame">CacheEvictionStats</a></li>
 <li><a href="CellBuilderFactory.html" title="class in org.apache.hadoop.hbase" target="classFrame">CellBuilderFactory</a></li>
 <li><a href="CellUtil.html" title="class in org.apache.hadoop.hbase" target="classFrame">CellUtil</a></li>
-<li><a href="ChoreService.html" title="class in org.apache.hadoop.hbase" target="classFrame">ChoreService</a></li>
 <li><a href="HBaseCluster.html" title="class in org.apache.hadoop.hbase" target="classFrame">HBaseCluster</a></li>
 <li><a href="HBaseCommonTestingUtility.html" title="class in org.apache.hadoop.hbase" target="classFrame">HBaseCommonTestingUtility</a></li>
 <li><a href="HBaseConfiguration.html" title="class in org.apache.hadoop.hbase" target="classFrame">HBaseConfiguration</a></li>
@@ -42,7 +41,6 @@
 <li><a href="MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase" target="classFrame">MiniHBaseCluster</a></li>
 <li><a href="NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase" target="classFrame">NamespaceDescriptor</a></li>
 <li><a href="NamespaceDescriptor.Builder.html" title="class in org.apache.hadoop.hbase" target="classFrame">NamespaceDescriptor.Builder</a></li>
-<li><a href="ScheduledChore.html" title="class in org.apache.hadoop.hbase" target="classFrame">ScheduledChore</a></li>
 <li><a href="ServerName.html" title="class in org.apache.hadoop.hbase" target="classFrame">ServerName</a></li>
 <li><a href="Size.html" title="class in org.apache.hadoop.hbase" target="classFrame">Size</a></li>
 <li><a href="StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase" target="classFrame">StartMiniClusterOption</a></li>
diff --git a/apidocs/org/apache/hadoop/hbase/package-summary.html b/apidocs/org/apache/hadoop/hbase/package-summary.html
index 302cdd7..1fe082c 100644
--- a/apidocs/org/apache/hadoop/hbase/package-summary.html
+++ b/apidocs/org/apache/hadoop/hbase/package-summary.html
@@ -179,83 +179,70 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></td>
-<td class="colLast">
-<div class="block">ChoreService is a service that can be used to schedule instances of <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a> to run
- periodically while sharing threads.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">since 3.0.0, will be removed in 4.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtility</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">since 3.0.0, will be removed in 4.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseConfiguration.html" title="class in org.apache.hadoop.hbase">HBaseConfiguration</a></td>
 <td class="colLast">
 <div class="block">Adds HBase configuration files to a Configuration</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseInterfaceAudience.html" title="class in org.apache.hadoop.hbase">HBaseInterfaceAudience</a></td>
 <td class="colLast">
 <div class="block">This class defines constants for different classes of hbase limited private apis</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">since 3.0.0, will be removed in 4.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">since 3.0.0, will be removed in 4.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></td>
 <td class="colLast">
 <div class="block">HConstants holds a bunch of HBase-related constants</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></td>
 <td class="colLast">
 <div class="block">Data structure to hold RegionInfo and the address for the hosting
  HRegionServer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">since 3.0.0, will be removed in 4.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a></td>
 <td class="colLast">
 <div class="block">Namespace POJO class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/NamespaceDescriptor.Builder.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor.Builder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></td>
-<td class="colLast">
-<div class="block">ScheduledChore is a task performed on a period in hbase.</div>
-</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></td>
 <td class="colLast">
diff --git a/apidocs/org/apache/hadoop/hbase/package-tree.html b/apidocs/org/apache/hadoop/hbase/package-tree.html
index 8734b02..dca6917 100644
--- a/apidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/apidocs/org/apache/hadoop/hbase/package-tree.html
@@ -85,7 +85,6 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">CacheEvictionStats</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderFactory.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderFactory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">CellUtil</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ChoreService</span></a></li>
 <li type="circle">org.apache.hadoop.conf.Configuration (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;T&gt;, org.apache.hadoop.io.Writable)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseConfiguration.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseConfiguration</span></a></li>
@@ -110,7 +109,6 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HRegionLocation</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">NamespaceDescriptor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/NamespaceDescriptor.Builder.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">NamespaceDescriptor.Builder</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ScheduledChore</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ServerName</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class  [...]
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Size</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">StartMiniClusterOption</span></a></li>
diff --git a/apidocs/org/apache/hadoop/hbase/package-use.html b/apidocs/org/apache/hadoop/hbase/package-use.html
index 2904fc3..845ee8a 100644
--- a/apidocs/org/apache/hadoop/hbase/package-use.html
+++ b/apidocs/org/apache/hadoop/hbase/package-use.html
@@ -300,26 +300,21 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/RetryImmediatelyException.html#org.apache.hadoop.hbase">RetryImmediatelyException</a>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ScheduledChore.html#org.apache.hadoop.hbase">ScheduledChore</a>
-<div class="block">ScheduledChore is a task performed on a period in hbase.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ServerMetrics.html#org.apache.hadoop.hbase">ServerMetrics</a>
 <div class="block">This class is used for exporting current state of load on a RegionServer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ServerName.html#org.apache.hadoop.hbase">ServerName</a>
 <div class="block">Name of a particular incarnation of an HBase Server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Size.html#org.apache.hadoop.hbase">Size</a>
 <div class="block">It is used to represent the size with different units.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/StartMiniClusterOption.html#org.apache.hadoop.hbase">StartMiniClusterOption</a>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
 <div class="block"><span class="deprecationComment">since 3.0.0, will be removed in 4.0.0. Use
@@ -327,11 +322,6 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Stoppable.html#org.apache.hadoop.hbase">Stoppable</a>
-<div class="block">Implementers are Stoppable.</div>
-</td>
-</tr>
 <tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableName.html#org.apache.hadoop.hbase">TableName</a>
 <div class="block">Immutable POJO class for representing a table name.</div>
diff --git a/apidocs/overview-tree.html b/apidocs/overview-tree.html
index 16794a8..9730d2b 100644
--- a/apidocs/overview-tree.html
+++ b/apidocs/overview-tree.html
@@ -216,7 +216,6 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/CheckAndMutate.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">CheckAndMutate</span></a> (implements org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/CheckAndMutate.Builder.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">CheckAndMutate.Builder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/CheckAndMutateResult.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">CheckAndMutateResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ChoreService</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.crypto.<a href="org/apache/hadoop/hbase/io/crypto/Cipher.html" title="class in org.apache.hadoop.hbase.io.crypto"><span class="typeNameLink">Cipher</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/Client.html" title="class in org.apache.hadoop.hbase.rest.client"><span class="typeNameLink">Client</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/Cluster.html" title="class in org.apache.hadoop.hbase.rest.client"><span class="typeNameLink">Cluster</span></a></li>
@@ -505,7 +504,6 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Result</span></a> (implements org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>, org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">RowMutations</span></a> (implements org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup"><span class="typeNameLink">RSGroupInfo</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ScheduledChore</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ServerName</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface [...]
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Size.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">Size</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotDescription</span></a></li>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html b/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
index 2a4594b..afd6a97 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
@@ -28,145 +28,157 @@
 <span class="sourceLineNo">020</span>import java.nio.ByteBuffer;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.util.Comparator;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * cell components like row, family, qualifier and timestamp<a name="line.28"></a>
-<span class="sourceLineNo">029</span> */<a name="line.29"></a>
-<span class="sourceLineNo">030</span>@InterfaceAudience.Public<a name="line.30"></a>
-<span class="sourceLineNo">031</span>@InterfaceStability.Evolving<a name="line.31"></a>
-<span class="sourceLineNo">032</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.32"></a>
-<span class="sourceLineNo">033</span>  /**<a name="line.33"></a>
-<span class="sourceLineNo">034</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.34"></a>
-<span class="sourceLineNo">035</span>   * order as necessary for bulk import (i.e. via MapReduce).<a name="line.35"></a>
-<span class="sourceLineNo">036</span>   * &lt;p&gt;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   * and should not be relied upon in that case.<a name="line.38"></a>
-<span class="sourceLineNo">039</span>   */<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  // For internal use, see CellComparatorImpl utility methods.<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  static CellComparator getInstance() {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    return CellComparatorImpl.COMPARATOR;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  }<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  /**<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * includes row, family, qualifier, timestamp and type<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   * @param leftCell the left hand side cell<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * @param rightCell the right hand side cell<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   *         cells are equal<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   */<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @Override<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Compare cells.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   *    the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  /**<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * Lexographically compares the rows of two cells.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param leftCell the left hand side cell<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * @param rightCell the right hand side cell<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   *         cells are equal<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   */<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  int compareRows(Cell leftCell, Cell rightCell);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * stopRow in Scan.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param cell the cell<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param offset the offset of the byte[]<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * @param length the length of the byte[]<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   *         cells are equal<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  /**<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param row ByteBuffer that wraps a row; will read from current position and will reading all<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   *            remaining; will not disturb the ByteBuffer internal state.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *         cells are equal<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  default int compareRows(ByteBuffer row, Cell cell) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    if (cell instanceof ByteBufferExtendedCell) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        ((ByteBufferExtendedCell) cell).getRowPosition(),<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        cell.getRowLength());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      cell.getRowArray(), cell.getRowOffset(),<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      cell.getRowLength());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * timestamp and the type<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @param leftCell the left hand side cell<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * @param rightCell the right hand side cell<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *         cells are equal<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Lexographically compares the families of the two cells<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param leftCell the left hand side cell<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param rightCell the right hand side cell<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   *         cells are equal<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  int compareFamilies(Cell leftCell, Cell rightCell);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Lexographically compares the qualifiers of the two cells<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param leftCell the left hand side cell<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param rightCell the right hand side cell<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   *         cells are equal<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * a store file.<a name="line.135"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * cell components like row, family, qualifier and timestamp<a name="line.29"></a>
+<span class="sourceLineNo">030</span> */<a name="line.30"></a>
+<span class="sourceLineNo">031</span>@InterfaceAudience.Public<a name="line.31"></a>
+<span class="sourceLineNo">032</span>@InterfaceStability.Evolving<a name="line.32"></a>
+<span class="sourceLineNo">033</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.33"></a>
+<span class="sourceLineNo">034</span>  /**<a name="line.34"></a>
+<span class="sourceLineNo">035</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * order as necessary for bulk import (i.e. via MapReduce).<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   * &lt;p&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * and should not be relied upon in that case.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  // For internal use, see CellComparatorImpl utility methods.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  static CellComparator getInstance() {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    return CellComparatorImpl.COMPARATOR;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  /**<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * includes row, family, qualifier, timestamp and type<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * @param leftCell the left hand side cell<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * @param rightCell the right hand side cell<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   *         cells are equal<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  @Override<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * Compare cells.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   *    the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  /**<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * Lexographically compares the rows of two cells.<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * @param leftCell the left hand side cell<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * @param rightCell the right hand side cell<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   *         cells are equal<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  int compareRows(Cell leftCell, Cell rightCell);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * stopRow in Scan.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param cell the cell<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * @param offset the offset of the byte[]<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param length the length of the byte[]<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   *         cells are equal<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * Compares two row bytes<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param leftRow the byte array of the left row<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * @param rightRow the byte array of the right row<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @return greater than 0 if leftRow is bigger, less than 0 if rightRow is bigger, 0 if both<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *         rows are equal<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  default int compareRows(byte[] leftRow, byte[] rightRow) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return Bytes.compareTo(leftRow, rightRow);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param row ByteBuffer that wraps a row; will read from current position and will reading all<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   *            remaining; will not disturb the ByteBuffer internal state.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   *         cells are equal<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  default int compareRows(ByteBuffer row, Cell cell) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    if (cell instanceof ByteBufferExtendedCell) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        ((ByteBufferExtendedCell) cell).getRowPosition(),<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        cell.getRowLength());<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      cell.getRowArray(), cell.getRowOffset(),<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      cell.getRowLength());<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * timestamp and the type<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @param leftCell the left hand side cell<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @param rightCell the right hand side cell<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   *         cells are equal<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * Lexographically compares the families of the two cells<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param leftCell the left hand side cell<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param rightCell the right hand side cell<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   *         cells are equal<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  int compareFamilies(Cell leftCell, Cell rightCell);<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * Lexographically compares the qualifiers of the two cells<a name="line.135"></a>
 <span class="sourceLineNo">136</span>   * @param leftCell the left hand side cell<a name="line.136"></a>
 <span class="sourceLineNo">137</span>   * @param rightCell the right hand side cell<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   *         timestamp 0 if both timestamps are equal<a name="line.139"></a>
+<span class="sourceLineNo">138</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   *         cells are equal<a name="line.139"></a>
 <span class="sourceLineNo">140</span>   */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.141"></a>
+<span class="sourceLineNo">141</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<a name="line.141"></a>
 <span class="sourceLineNo">142</span><a name="line.142"></a>
 <span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
 <span class="sourceLineNo">144</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.144"></a>
 <span class="sourceLineNo">145</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.145"></a>
 <span class="sourceLineNo">146</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.146"></a>
 <span class="sourceLineNo">147</span>   * a store file.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param leftCellts the left cell's timestamp<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param rightCellts the right cell's timestamp<a name="line.149"></a>
+<span class="sourceLineNo">148</span>   * @param leftCell the left hand side cell<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @param rightCell the right hand side cell<a name="line.149"></a>
 <span class="sourceLineNo">150</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.150"></a>
 <span class="sourceLineNo">151</span>   *         timestamp 0 if both timestamps are equal<a name="line.151"></a>
 <span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  int compareTimestamps(long leftCellts, long rightCellts);<a name="line.153"></a>
+<span class="sourceLineNo">153</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
 <span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @return A dumbed-down, fast comparator for hbase2 base-type, the {@link ByteBufferKeyValue}.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   *   Create an instance when you make a new memstore, when you know only BBKVs will be passed.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   *   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  Comparator getSimpleComparator();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>}<a name="line.161"></a>
+<span class="sourceLineNo">156</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * a store file.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @param leftCellts the left cell's timestamp<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param rightCellts the right cell's timestamp<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   *         timestamp 0 if both timestamps are equal<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  int compareTimestamps(long leftCellts, long rightCellts);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @return A dumbed-down, fast comparator for hbase2 base-type, the {@link ByteBufferKeyValue}.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   *   Create an instance when you make a new memstore, when you know only BBKVs will be passed.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   *   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  Comparator getSimpleComparator();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>}<a name="line.173"></a>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/ChoreService.html b/apidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
deleted file mode 100644
index c6ccc03..0000000
--- a/apidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
+++ /dev/null
@@ -1,510 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> *<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
-<span class="sourceLineNo">018</span> */<a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import com.google.errorprone.annotations.RestrictedApi;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.HashMap;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.LinkedHashMap;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Map.Entry;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.ScheduledFuture;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.ThreadFactory;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.slf4j.Logger;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.slf4j.LoggerFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span><a name="line.33"></a>
-<span class="sourceLineNo">034</span>/**<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * ChoreService is a service that can be used to schedule instances of {@link ScheduledChore} to run<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * periodically while sharing threads. The ChoreService is backed by a<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * {@link ScheduledThreadPoolExecutor} whose core pool size changes dynamically depending on the<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * number of {@link ScheduledChore} scheduled. All of the threads in the core thread pool of the<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * underlying {@link ScheduledThreadPoolExecutor} are set to be daemon threads.<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * &lt;p&gt;<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * The ChoreService provides the ability to schedule, cancel, and trigger instances of<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * {@link ScheduledChore}. The ChoreService also provides the ability to check on the status of<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * scheduled chores. The number of threads used by the ChoreService changes based on the scheduling<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * load and whether or not the scheduled chores are executing on time. As more chores are scheduled,<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * there may be a need to increase the number of threads if it is noticed that chores are no longer<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * meeting their scheduled start times. On the other hand, as chores are cancelled, an attempt is<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * made to reduce the number of running threads to see if chores can still meet their start times<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * with a smaller thread pool.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * &lt;p&gt;<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * When finished with a ChoreService it is good practice to call {@link ChoreService#shutdown()}.<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * Calling this method ensures that all scheduled chores are cancelled and cleaned up properly.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> */<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceAudience.Public<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public class ChoreService {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final Logger LOG = LoggerFactory.getLogger(ChoreService.class);<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * The minimum number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   */<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  @InterfaceAudience.Private<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public final static int MIN_CORE_POOL_SIZE = 1;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  /**<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * This thread pool is used to schedule all of the Chores<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final ScheduledThreadPoolExecutor scheduler;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  /**<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * Maps chores to their futures. Futures are used to control a chore's schedule<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   */<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final HashMap&lt;ScheduledChore, ScheduledFuture&lt;?&gt;&gt; scheduledChores;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * Maps chores to Booleans which indicate whether or not a chore has caused an increase in the<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * core pool size of the ScheduledThreadPoolExecutor. Each chore should only be allowed to<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * increase the core pool size by 1 (otherwise a single long running chore whose execution is<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * longer than its period would be able to spawn too many threads).<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final HashMap&lt;ScheduledChore, Boolean&gt; choresMissingStartTime;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  /**<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * The coreThreadPoolPrefix is the prefix that will be applied to all threads within the<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * ScheduledThreadPoolExecutor. The prefix is typically related to the Server that the service is<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * running on. The prefix is useful because it allows us to monitor how the thread pool of a<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * particular service changes over time VIA thread dumps.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final String coreThreadPoolPrefix;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   *<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * @param coreThreadPoolPrefix Prefix that will be applied to the Thread name of all threads<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   *          spawned by this service<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @InterfaceAudience.Private<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public ChoreService(final String coreThreadPoolPrefix) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    this(coreThreadPoolPrefix, MIN_CORE_POOL_SIZE, false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * @param coreThreadPoolPrefix Prefix that will be applied to the Thread name of all threads<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   *          spawned by this service<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param jitter Should chore service add some jitter for all of the scheduled chores. When set<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   *               to true this will add -10% to 10% jitter.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public ChoreService(final String coreThreadPoolPrefix, final boolean jitter) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    this(coreThreadPoolPrefix, MIN_CORE_POOL_SIZE, jitter);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param coreThreadPoolPrefix Prefix that will be applied to the Thread name of all threads<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   *          spawned by this service<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param corePoolSize The initial size to set the core pool of the ScheduledThreadPoolExecutor<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   *          to during initialization. The default size is 1, but specifying a larger size may be<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   *          beneficial if you know that 1 thread will not be enough.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param jitter Should chore service add some jitter for all of the scheduled chores. When set<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   *               to true this will add -10% to 10% jitter.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public ChoreService(final String coreThreadPoolPrefix, int corePoolSize, boolean jitter) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    this.coreThreadPoolPrefix = coreThreadPoolPrefix;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    if (corePoolSize &lt; MIN_CORE_POOL_SIZE)  {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      corePoolSize = MIN_CORE_POOL_SIZE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    final ThreadFactory threadFactory = new ChoreServiceThreadFactory(coreThreadPoolPrefix);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    if (jitter) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      scheduler = new JitterScheduledThreadPoolExecutorImpl(corePoolSize, threadFactory, 0.1);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    } else {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      scheduler = new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    scheduler.setRemoveOnCancelPolicy(true);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    scheduledChores = new HashMap&lt;&gt;();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    choresMissingStartTime = new HashMap&lt;&gt;();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param chore Chore to be scheduled. If the chore is already scheduled with another ChoreService<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   *          instance, that schedule will be cancelled (i.e. a Chore can only ever be scheduled<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   *          with a single ChoreService instance).<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * @return true when the chore was successfully scheduled. false when the scheduling failed<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   *         (typically occurs when a chore is scheduled during shutdown of service)<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public boolean scheduleChore(ScheduledChore chore) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (chore == null) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return false;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // always lock chore first to prevent dead lock<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    synchronized (chore) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      synchronized (this) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        try {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          // Chores should only ever be scheduled with a single ChoreService. If the choreService<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          // is changing, cancel any existing schedules of this chore.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>          if (chore.getChoreService() == this) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>            LOG.warn("Chore {} has already been scheduled with us", chore);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>            return false;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          if (chore.getPeriod() &lt;= 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>            LOG.info("Chore {} is disabled because its period is not positive.", chore);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            return false;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>          }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          LOG.info("Chore {} is enabled.", chore);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          if (chore.getChoreService() != null) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>            LOG.info("Cancel chore {} from its previous service", chore);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>            chore.getChoreService().cancelChore(chore);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          chore.setChoreService(this);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          ScheduledFuture&lt;?&gt; future = scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(),<a name="line.167"></a>
-<span class="sourceLineNo">168</span>            chore.getPeriod(), chore.getTimeUnit());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          scheduledChores.put(chore, future);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          return true;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        } catch (Exception e) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          LOG.error("Could not successfully schedule chore: {}", chore.getName(), e);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>          return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param chore The Chore to be rescheduled. If the chore is not scheduled with this ChoreService<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   *          yet then this call is equivalent to a call to scheduleChore.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  private void rescheduleChore(ScheduledChore chore) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (scheduledChores.containsKey(chore)) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      future.cancel(false);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    ScheduledFuture&lt;?&gt; future = scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(),<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      chore.getPeriod(), chore.getTimeUnit());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    scheduledChores.put(chore, future);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  /**<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   * Cancel any ongoing schedules that this chore has with the implementer of this interface.<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * &lt;p/&gt;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * Call {@link ScheduledChore#cancel()} to cancel a {@link ScheduledChore}, in<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * {@link ScheduledChore#cancel()} method we will call this method to remove the<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * {@link ScheduledChore} from this {@link ChoreService}.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  @RestrictedApi(explanation = "Should only be called in ScheduledChore", link = "",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    allowedOnPath = ".*/org/apache/hadoop/hbase/(ScheduledChore|ChoreService).java")<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  synchronized void cancelChore(ScheduledChore chore) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    cancelChore(chore, true);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  /**<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * Cancel any ongoing schedules that this chore has with the implementer of this interface.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * &lt;p/&gt;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * Call {@link ScheduledChore#cancel(boolean)} to cancel a {@link ScheduledChore}, in<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   * {@link ScheduledChore#cancel(boolean)} method we will call this method to remove the<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * {@link ScheduledChore} from this {@link ChoreService}.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  @RestrictedApi(explanation = "Should only be called in ScheduledChore", link = "",<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    allowedOnPath = ".*/org/apache/hadoop/hbase/(ScheduledChore|ChoreService).java")<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  synchronized void cancelChore(ScheduledChore chore, boolean mayInterruptIfRunning) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    if (scheduledChores.containsKey(chore)) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      future.cancel(mayInterruptIfRunning);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      scheduledChores.remove(chore);<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>      // Removing a chore that was missing its start time means it may be possible<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      // to reduce the number of threads<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      if (choresMissingStartTime.containsKey(chore)) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        choresMissingStartTime.remove(chore);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        requestCorePoolDecrease();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * @return true when the chore is scheduled with the implementer of this interface<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @InterfaceAudience.Private<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public synchronized boolean isChoreScheduled(ScheduledChore chore) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return chore != null &amp;&amp; scheduledChores.containsKey(chore)<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        &amp;&amp; !scheduledChores.get(chore).isDone();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * This method tries to execute the chore immediately. If the chore is executing at the time of<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * this call, the chore will begin another execution as soon as the current execution finishes<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  @RestrictedApi(explanation = "Should only be called in ScheduledChore", link = "",<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    allowedOnPath = ".*/org/apache/hadoop/hbase/ScheduledChore.java")<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  synchronized void triggerNow(ScheduledChore chore) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assert chore.getChoreService() == this;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    rescheduleChore(chore);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return number of chores that this service currently has scheduled<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  int getNumberOfScheduledChores() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return scheduledChores.size();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @return number of chores that this service currently has scheduled that are missing their<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   *         scheduled start time<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  int getNumberOfChoresMissingStartTime() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    return choresMissingStartTime.size();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * @return number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  int getCorePoolSize() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return scheduler.getCorePoolSize();<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * daemon threads, and thus, don't prevent the JVM from shutting down<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  static class ChoreServiceThreadFactory implements ThreadFactory {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    private final String threadPrefix;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    private final static String THREAD_NAME_SUFFIX = ".Chore.";<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    private AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>     * @param threadPrefix The prefix given to all threads created by this factory<a name="line.282"></a>
-<span class="sourceLineNo">283</span>     */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    public ChoreServiceThreadFactory(final String threadPrefix) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      this.threadPrefix = threadPrefix;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>    @Override<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    public Thread newThread(Runnable r) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      Thread thread =<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          new Thread(r, threadPrefix + THREAD_NAME_SUFFIX + threadNumber.getAndIncrement());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      thread.setDaemon(true);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return thread;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * Represents a request to increase the number of core pool threads. Typically a request<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * originates from the fact that the current core pool size is not sufficient to service all of<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * the currently running Chores<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * @return true when the request to increase the core pool size succeeds<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  private synchronized boolean requestCorePoolIncrease() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // There is no point in creating more threads than scheduledChores.size since scheduled runs<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // of the same chore cannot run concurrently (i.e. happen-before behavior is enforced<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    // amongst occurrences of the same chore).<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (scheduler.getCorePoolSize() &lt; scheduledChores.size()) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() + 1);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      printChoreServiceDetails("requestCorePoolIncrease");<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return true;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    return false;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>  /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * Represents a request to decrease the number of core pool threads. Typically a request<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * originates from the fact that the current core pool size is more than sufficient to service the<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * running Chores.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private synchronized void requestCorePoolDecrease() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    if (scheduler.getCorePoolSize() &gt; MIN_CORE_POOL_SIZE) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() - 1);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      printChoreServiceDetails("requestCorePoolDecrease");<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * A callback that tells the implementer of this interface that one of the scheduled chores is<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * missing its start time. The implication of a chore missing its start time is that the service's<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * current means of scheduling may not be sufficient to handle the number of ongoing chores (the<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * other explanation is that the chore's execution time is greater than its scheduled period). The<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * service should try to increase its concurrency when this callback is received.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * @param chore The chore that missed its start time<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @RestrictedApi(explanation = "Should only be called in ScheduledChore", link = "",<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    allowedOnPath = ".*/org/apache/hadoop/hbase/ScheduledChore.java")<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  synchronized void onChoreMissedStartTime(ScheduledChore chore) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    if (!scheduledChores.containsKey(chore)) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      return;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>    // If the chore has not caused an increase in the size of the core thread pool then request an<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    // increase. This allows each chore missing its start time to increase the core pool size by<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    // at most 1.<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    if (!choresMissingStartTime.containsKey(chore) || !choresMissingStartTime.get(chore)) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      choresMissingStartTime.put(chore, requestCorePoolIncrease());<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // Must reschedule the chore to prevent unnecessary delays of chores in the scheduler. If<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // the chore is NOT rescheduled, future executions of this chore will be delayed more and<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // more on each iteration. This hurts us because the ScheduledThreadPoolExecutor allocates<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // idle threads to chores based on how delayed they are.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    rescheduleChore(chore);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    printChoreDetails("onChoreMissedStartTime", chore);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * in the middle of execution will be interrupted and shutdown. This service will be unusable<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * after this method has been called (i.e. future scheduling attempts will fail).<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * &lt;p/&gt;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * Notice that, this will only clean the chore from this ChoreService but you could still schedule<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * the chore with other ChoreService.<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  public synchronized void shutdown() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    if (isShutdown()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    scheduler.shutdownNow();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    LOG.info("Chore service for: {} had {} on shutdown", coreThreadPoolPrefix,<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      scheduledChores.keySet());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    cancelAllChores(true);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    scheduledChores.clear();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    choresMissingStartTime.clear();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>  /**<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * @return true when the service is shutdown and thus cannot be used anymore<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public boolean isShutdown() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    return scheduler.isShutdown();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @return true when the service is shutdown and all threads have terminated<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public boolean isTerminated() {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return scheduler.isTerminated();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private void cancelAllChores(final boolean mayInterruptIfRunning) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // Build list of chores to cancel so we can iterate through a set that won't change<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // as chores are cancelled. If we tried to cancel each chore while iterating through<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    // keySet the results would be undefined because the keySet would be changing<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    ArrayList&lt;ScheduledChore&gt; choresToCancel = new ArrayList&lt;&gt;(scheduledChores.keySet());<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    for (ScheduledChore chore : choresToCancel) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      cancelChore(chore, mayInterruptIfRunning);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * Prints a summary of important details about the chore. Used for debugging purposes<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  private void printChoreDetails(final String header, ScheduledChore chore) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    if (!LOG.isTraceEnabled()) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    output.put(header, "");<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    output.put("Chore name: ", chore.getName());<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    output.put("Chore period: ", Integer.toString(chore.getPeriod()));<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    output.put("Chore timeBetweenRuns: ", Long.toString(chore.getTimeBetweenRuns()));<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      LOG.trace(entry.getKey() + entry.getValue());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  /**<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * Prints a summary of important details about the service. Used for debugging purposes<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private void printChoreServiceDetails(final String header) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    if (!LOG.isTraceEnabled()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    output.put(header, "");<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    output.put("ChoreService corePoolSize: ", Integer.toString(getCorePoolSize()));<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    output.put("ChoreService scheduledChores: ", Integer.toString(getNumberOfScheduledChores()));<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    output.put("ChoreService missingStartTimeCount: ",<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      Integer.toString(getNumberOfChoresMissingStartTime()));<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      LOG.trace(entry.getKey() + entry.getValue());<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>}<a name="line.438"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html b/apidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
deleted file mode 100644
index 10020c9..0000000
--- a/apidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
+++ /dev/null
@@ -1,430 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> *<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
-<span class="sourceLineNo">018</span> */<a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import com.google.errorprone.annotations.RestrictedApi;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.TimeUnit;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.slf4j.Logger;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.LoggerFactory;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * ScheduledChore is a task performed on a period in hbase. ScheduledChores become active once<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * scheduled with a {@link ChoreService} via {@link ChoreService#scheduleChore(ScheduledChore)}. The<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * chore is run in a {@link ScheduledThreadPoolExecutor} and competes with other ScheduledChores for<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * access to the threads in the core thread pool. If an unhandled exception occurs, the chore<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * cancellation is logged. Implementers should consider whether or not the Chore will be able to<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * execute within the defined period. It is bad practice to define a ScheduledChore whose execution<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * time exceeds its period since it will try to hog one of the threads in the {@link ChoreService}'s<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * thread pool.<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * &lt;p/&gt;<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * Don't subclass ScheduledChore if the task relies on being woken up for something to do, such as<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * an entry being added to a queue, etc.<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Public<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public abstract class ScheduledChore implements Runnable {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Logger LOG = LoggerFactory.getLogger(ScheduledChore.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private final String name;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Default values for scheduling parameters should they be excluded during construction<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private final static TimeUnit DEFAULT_TIME_UNIT = TimeUnit.MILLISECONDS;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private final static long DEFAULT_INITIAL_DELAY = 0;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  /**<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * Scheduling parameters. Used by ChoreService when scheduling the chore to run periodically<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private final int period; // in TimeUnit units<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private final TimeUnit timeUnit;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private final long initialDelay; // in TimeUnit units<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * Interface to the ChoreService that this ScheduledChore is scheduled with. null if the chore is<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * not scheduled.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private ChoreService choreService;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  /**<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * Variables that encapsulate the meaningful state information<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   */<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private long timeOfLastRun = -1; // system time millis<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private long timeOfThisRun = -1; // system time millis<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private boolean initialChoreComplete = false;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * A means by which a ScheduledChore can be stopped. Once a chore recognizes that it has been<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * stopped, it will cancel itself. This is particularly useful in the case where a single stopper<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * instance is given to multiple chores. In such a case, a single {@link Stoppable#stop(String)}<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * command can cause many chores to stop together.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final Stoppable stopper;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * This constructor is for test only. It allows us to create an object and to call chore() on it.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  @InterfaceAudience.Private<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected ScheduledChore() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    this("TestChore", null, 0, DEFAULT_INITIAL_DELAY, DEFAULT_TIME_UNIT);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  /**<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * @param name Name assigned to Chore. Useful for identification amongst chores of the same type<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param stopper When {@link Stoppable#isStopped()} is true, this chore will cancel and cleanup<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param period Period in millis with which this Chore repeats execution when scheduled.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public ScheduledChore(final String name, Stoppable stopper, final int period) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this(name, stopper, period, DEFAULT_INITIAL_DELAY);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * @param name Name assigned to Chore. Useful for identification amongst chores of the same type<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param stopper When {@link Stoppable#isStopped()} is true, this chore will cancel and cleanup<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @param period Period in millis with which this Chore repeats execution when scheduled.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @param initialDelay Delay before this Chore begins to execute once it has been scheduled. A<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *          value of 0 means the chore will begin to execute immediately. Negative delays are<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   *          invalid and will be corrected to a value of 0.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public ScheduledChore(final String name, Stoppable stopper, final int period,<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      final long initialDelay) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    this(name, stopper, period, initialDelay, DEFAULT_TIME_UNIT);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param name Name assigned to Chore. Useful for identification amongst chores of the same type<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param stopper When {@link Stoppable#isStopped()} is true, this chore will cancel and cleanup<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param period Period in Timeunit unit with which this Chore repeats execution when scheduled.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @param initialDelay Delay in Timeunit unit before this Chore begins to execute once it has been<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   *          scheduled. A value of 0 means the chore will begin to execute immediately. Negative<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   *          delays are invalid and will be corrected to a value of 0.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param unit The unit that is used to measure period and initialDelay<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public ScheduledChore(final String name, Stoppable stopper, final int period,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      final long initialDelay, final TimeUnit unit) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    this.name = name;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.stopper = stopper;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    this.period = period;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.initialDelay = initialDelay &lt; 0 ? 0 : initialDelay;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    this.timeUnit = unit;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * @see java.lang.Runnable#run()<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  @Override<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void run() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    updateTimeTrackingBeforeRun();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    if (missedStartTime() &amp;&amp; isScheduled()) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      onChoreMissedStartTime();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      LOG.info("Chore: {} missed its start time", getName());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    } else if (stopper.isStopped() || !isScheduled()) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      // call shutdown here to cleanup the ScheduledChore.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      shutdown(false);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      LOG.info("Chore: {} was stopped", getName());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    } else {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // TODO: Histogram metrics per chore name.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        // For now, just measure and log if DEBUG level logging is enabled.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        long start = 0;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        if (LOG.isDebugEnabled()) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          start = System.nanoTime();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        if (!initialChoreComplete) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>          initialChoreComplete = initialChore();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        } else {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          chore();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        if (LOG.isDebugEnabled() &amp;&amp; start &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          long end = System.nanoTime();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          LOG.debug("{} execution time: {} ms.", getName(),<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            TimeUnit.NANOSECONDS.toMillis(end - start));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      } catch (Throwable t) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        LOG.error("Caught error", t);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        if (this.stopper.isStopped()) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          cancel(false);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * Update our time tracking members. Called at the start of an execution of this chore's run()<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * method so that a correct decision can be made as to whether or not we missed the start time<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  private synchronized void updateTimeTrackingBeforeRun() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    timeOfLastRun = timeOfThisRun;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    timeOfThisRun = EnvironmentEdgeManager.currentTime();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * Notify the ChoreService that this chore has missed its start time. Allows the ChoreService to<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * make the decision as to whether or not it would be worthwhile to increase the number of core<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * pool threads<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  private synchronized void onChoreMissedStartTime() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    if (choreService != null) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      choreService.onChoreMissedStartTime(this);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return How long in millis has it been since this chore last run. Useful for checking if the<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   *         chore has missed its scheduled start time by too large of a margin<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  synchronized long getTimeBetweenRuns() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return timeOfThisRun - timeOfLastRun;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  /**<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @return true when the time between runs exceeds the acceptable threshold<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private synchronized boolean missedStartTime() {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    return isValidTime(timeOfLastRun) &amp;&amp; isValidTime(timeOfThisRun)<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        &amp;&amp; getTimeBetweenRuns() &gt; getMaximumAllowedTimeBetweenRuns();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * @return max allowed time in millis between runs.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private double getMaximumAllowedTimeBetweenRuns() {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // Threshold used to determine if the Chore's current run started too late<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    return 1.5 * timeUnit.toMillis(period);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * @param time in system millis<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * @return true if time is earlier or equal to current milli time<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  private synchronized boolean isValidTime(final long time) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    return time &gt; 0 &amp;&amp; time &lt;= EnvironmentEdgeManager.currentTime();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @return false when the Chore is not currently scheduled with a ChoreService<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public synchronized boolean triggerNow() {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (choreService == null) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      return false;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    choreService.triggerNow(this);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return true;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  @RestrictedApi(explanation = "Should only be called in ChoreService", link = "",<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    allowedOnPath = ".*/org/apache/hadoop/hbase/ChoreService.java")<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  synchronized void setChoreService(ChoreService service) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    choreService = service;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    timeOfThisRun = -1;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public synchronized void cancel() {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    cancel(true);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public synchronized void cancel(boolean mayInterruptIfRunning) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    if (isScheduled()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      choreService.cancelChore(this, mayInterruptIfRunning);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    choreService = null;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public String getName() {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    return name;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>  public Stoppable getStopper() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return stopper;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>  /**<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @return period to execute chore in getTimeUnit() units<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  public int getPeriod() {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return period;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  /**<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @return initial delay before executing chore in getTimeUnit() units<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  public long getInitialDelay() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    return initialDelay;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public TimeUnit getTimeUnit() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return timeUnit;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public synchronized boolean isInitialChoreComplete() {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    return initialChoreComplete;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  synchronized ChoreService getChoreService() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return choreService;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  synchronized long getTimeOfLastRun() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    return timeOfLastRun;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  synchronized long getTimeOfThisRun() {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    return timeOfThisRun;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @return true when this Chore is scheduled with a ChoreService<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   */<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public synchronized boolean isScheduled() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return choreService != null &amp;&amp; choreService.isChoreScheduled(this);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>  @InterfaceAudience.Private<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @RestrictedApi(explanation = "Should only be called in tests", link = "",<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    allowedOnPath = ".*/src/test/.*")<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public synchronized void choreForTesting() {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    chore();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  /**<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * The task to execute on each scheduled execution of the Chore<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   */<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  protected abstract void chore();<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * Override to run a task before we start looping.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * @return true if initial chore was successful<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected boolean initialChore() {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    // Default does nothing<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return true;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  /**<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * Override to run cleanup tasks when the Chore encounters an error and must stop running<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  protected void cleanup() {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * Call {@link #shutdown(boolean)} with {@code true}.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @see ScheduledChore#shutdown(boolean)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public synchronized void shutdown() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    shutdown(true);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  /**<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Completely shutdown the ScheduleChore, which means we will call cleanup and you should not<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * schedule it again.<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * &lt;p/&gt;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * This is another path to cleanup the chore, comparing to stop the stopper instance passed in.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public synchronized void shutdown(boolean mayInterruptIfRunning) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    cancel(mayInterruptIfRunning);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    cleanup();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * A summation of this chore in human readable format. Downstream users should not presume<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * parsing of this string can relaibly be done between versions. Instead, they should rely<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * on the public accessor methods to get the information they desire.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  @InterfaceAudience.Private<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @Override<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public String toString() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return "ScheduledChore name=" + getName() + ", period=" + getPeriod() +<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      ", unit=" + getTimeUnit();<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>}<a name="line.358"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>
diff --git a/book.html b/book.html
index 698e4d7..16d669b 100644
--- a/book.html
+++ b/book.html
@@ -46185,7 +46185,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-alpha-2-SNAPSHOT<br>
-Last updated 2021-07-21 20:04:51 UTC
+Last updated 2021-07-22 16:16:13 UTC
 </div>
 </div>
 <link rel="stylesheet" href="./coderay-asciidoctor.css">
diff --git a/bulk-loads.html b/bulk-loads.html
index 4991643..cc824df 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -161,7 +161,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 71c7491..e6ba43b 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7288,7 +7288,7 @@
 <tr class="a">
 <td>annotation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated">MissingDeprecated</a></td>
-<td>5</td>
+<td>7</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>blocks</td>
@@ -7392,7 +7392,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>2299</td>
+<td>2297</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -35873,8 +35873,8 @@
 <th>Line</th></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>annotation</td>
+<td>MissingDeprecated</td>
 <td>Javadoc comment at column 14 has parse error. Details: mismatched input ':' expecting &lt;EOF&gt; while parsing JAVADOC</td>
 <td>46</td></tr></table></div>
 <div class="section">
@@ -43052,31 +43052,31 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
-<td>147</td></tr>
+<td>148</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
-<td>152</td></tr>
+<td>153</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
-<td>155</td></tr>
+<td>156</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 6, expected level should be one of the following: 2, 4.</td>
-<td>156</td></tr>
+<td>157</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
-<td>Method length is 300 lines (max allowed is 150).</td>
-<td>298</td></tr></table></div>
+<td>Method length is 301 lines (max allowed is 150).</td>
+<td>299</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</h3>
 <table border="0" class="table table-striped">
@@ -50957,8 +50957,8 @@
 <th>Line</th></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>annotation</td>
+<td>MissingDeprecated</td>
 <td>Javadoc comment at column 54 has parse error. Details: no viable alternative at input '(' while parsing JAVADOC_INLINE_TAG</td>
 <td>59</td></tr>
 <tr class="b">
@@ -74240,7 +74240,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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/coc.html b/coc.html
index 9719838..86d078f 100644
--- a/coc.html
+++ b/coc.html
@@ -230,7 +230,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 73bc7ec..d4e71a9 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -302,7 +302,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 fbc62ea..895c4ab 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -866,7 +866,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 f904087..ca8a0cb 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -183,7 +183,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 9d109fb..5b227e0 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1190,7 +1190,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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/index-all.html b/devapidocs/index-all.html
index b0a9277..9d459f3 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -16452,6 +16452,10 @@
 <div class="block">Compares the row part of the cell with a simple plain byte[] like the
  stopRow in Scan.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#compareRows-byte:A-byte:A-">compareRows(byte[], byte[])</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
+<dd>
+<div class="block">Compares two row bytes</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows(ByteBuffer, Cell)</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellComparatorImpl.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareRows(Cell, Cell)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellComparatorImpl.html" title="class in org.apache.hadoop.hbase">CellComparatorImpl</a></dt>
@@ -16482,6 +16486,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-org.apache.hadoop.hbase.Cell-byte:A-int-int-">compareRows(Cell, byte[], int, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaCellComparator.html" title="class in org.apache.hadoop.hbase">MetaCellComparator</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-byte:A-byte:A-">compareRows(byte[], byte[])</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaCellComparator.html" title="class in org.apache.hadoop.hbase">MetaCellComparator</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-byte:A-int-int-byte:A-int-int-">compareRows(byte[], int, int, byte[], int, int)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaCellComparator.html" title="class in org.apache.hadoop.hbase">MetaCellComparator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows(ByteBuffer, Cell)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaCellComparator.html" title="class in org.apache.hadoop.hbase">MetaCellComparator</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/CellComparator.html b/devapidocs/org/apache/hadoop/hbase/CellComparator.html
index 9c406f7..592bc0d 100644
--- a/devapidocs/org/apache/hadoop/hbase/CellComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/CellComparator.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":18,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":17,"i11":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":18,"i5":18,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":17,"i12":6};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -111,7 +111,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Public
  @InterfaceStability.Evolving
-public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.32">CellComparator</a>
+public interface <a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.33">CellComparator</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;</pre>
 <div class="block">Comparator for comparing cells and has some specialized methods that allows comparing individual
  cell components like row, family, qualifier and timestamp</div>
@@ -164,10 +164,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>default int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-byte:A-byte:A-">compareRows</a></span>(byte[]&nbsp;leftRow,
+           byte[]&nbsp;rightRow)</code>
+<div class="block">Compares two row bytes</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>default int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-org.apache.hadoop.hbase.Cell-byte:A-int-int-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
            byte[]&nbsp;bytes,
@@ -177,41 +184,41 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
  stopRow in Scan.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</code>
 <div class="block">Lexographically compares the rows of two cells.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareTimestamps-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareTimestamps</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</code>
 <div class="block">Compares cell's timestamps in DESCENDING order.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareTimestamps-long-long-">compareTimestamps</a></span>(long&nbsp;leftCellts,
                  long&nbsp;rightCellts)</code>
 <div class="block">Compares cell's timestamps in DESCENDING order.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareWithoutRow-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareWithoutRow</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                  <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</code>
 <div class="block">Lexographically compares the two cells excluding the row part.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getInstance--">getInstance</a></span>()</code>
 <div class="block">A comparator for ordering cells in user-space tables.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator</a></span>()</code>&nbsp;</td>
 </tr>
@@ -243,7 +250,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.41">getInstance</a>()</pre>
+<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.42">getInstance</a>()</pre>
 <div class="block">A comparator for ordering cells in user-space tables. Useful when writing cells in sorted
  order as necessary for bulk import (i.e. via MapReduce).
  <p>
@@ -257,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.54">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.55">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares two cells. The key part of the cell is taken for comparison which
  includes row, family, qualifier, timestamp and type</div>
@@ -279,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.62">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.63">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
             <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell,
             boolean&nbsp;ignoreSequenceid)</pre>
 <div class="block">Compare cells.</div>
@@ -298,7 +305,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.71">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.72">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                 <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the rows of two cells.</div>
 <dl>
@@ -317,7 +324,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.83">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.84">compareRows</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                 byte[]&nbsp;bytes,
                 int&nbsp;offset,
                 int&nbsp;length)</pre>
@@ -335,13 +342,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 </dl>
 </li>
 </ul>
+<a name="compareRows-byte:A-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>compareRows</h4>
+<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.93">compareRows</a>(byte[]&nbsp;leftRow,
+                        byte[]&nbsp;rightRow)</pre>
+<div class="block">Compares two row bytes</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>leftRow</code> - the byte array of the left row</dd>
+<dd><code>rightRow</code> - the byte array of the right row</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>greater than 0 if leftRow is bigger, less than 0 if rightRow is bigger, 0 if both
+         rows are equal</dd>
+</dl>
+</li>
+</ul>
 <a name="compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.91">compareRows</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
+<pre>default&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.103">compareRows</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
                         <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -359,7 +385,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareWithoutRow</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.111">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.123">compareWithoutRow</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the two cells excluding the row part. It compares family, qualifier,
  timestamp and the type</div>
@@ -379,7 +405,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareFamilies</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.120">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.132">compareFamilies</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                     <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the families of the two cells</div>
 <dl>
@@ -398,7 +424,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareQualifiers</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.129">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.141">compareQualifiers</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Lexographically compares the qualifiers of the two cells</div>
 <dl>
@@ -417,7 +443,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.141">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.153">compareTimestamps</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;leftCell,
                       <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;rightCell)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -439,7 +465,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTimestamps</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.153">compareTimestamps</a>(long&nbsp;leftCellts,
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.165">compareTimestamps</a>(long&nbsp;leftCellts,
                       long&nbsp;rightCellts)</pre>
 <div class="block">Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of
  newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found
@@ -461,7 +487,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSimpleComparator</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.160">getSimpleComparator</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/CellComparator.html#line.172">getSimpleComparator</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>A dumbed-down, fast comparator for hbase2 base-type, the <a href="../../../../org/apache/hadoop/hbase/ByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase"><code>ByteBufferKeyValue</code></a>.
diff --git a/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html b/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html
index 40e3c46..f31fc3f 100644
--- a/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/CellComparatorImpl.html
@@ -357,7 +357,7 @@ implements <a href="../../../../org/apache/hadoop/hbase/CellComparator.html" tit
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows</a>, <a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getInstance--">getInstance</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-byte:A-byte:A-">compareRows</a>, <a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows</a>, <a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getInstance--">getInstance</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.util.Comparator">
diff --git a/devapidocs/org/apache/hadoop/hbase/ChoreService.html b/devapidocs/org/apache/hadoop/hbase/ChoreService.html
index dfbbb56..853bd35 100644
--- a/devapidocs/org/apache/hadoop/hbase/ChoreService.html
+++ b/devapidocs/org/apache/hadoop/hbase/ChoreService.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>@InterfaceAudience.Public
+<pre>@InterfaceAudience.Private
 public class <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.54">ChoreService</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">ChoreService is a service that can be used to schedule instances of <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><code>ScheduledChore</code></a> to run
diff --git a/devapidocs/org/apache/hadoop/hbase/MetaCellComparator.html b/devapidocs/org/apache/hadoop/hbase/MetaCellComparator.html
index 7704529..d5e87e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/MetaCellComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/MetaCellComparator.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10};
+var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":10,"i6":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -197,6 +197,13 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 </td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-byte:A-byte:A-">compareRows</a></span>(byte[]&nbsp;leftRow,
+           byte[]&nbsp;rightRow)</code>
+<div class="block">Compares two row bytes</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-byte:A-int-int-byte:A-int-int-">compareRows</a></span>(byte[]&nbsp;left,
            int&nbsp;loffset,
@@ -205,12 +212,12 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
            int&nbsp;roffset,
            int&nbsp;rlength)</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-java.nio.ByteBuffer-org.apache.hadoop.hbase.Cell-">compareRows</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-org.apache.hadoop.hbase.Cell-byte:A-int-int-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
            byte[]&nbsp;right,
@@ -220,14 +227,14 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
  stopRow in Scan.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/MetaCellComparator.html#compareRows-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">compareRows</a></span>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;left,
            <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;right)</code>
 <div class="block">Compares the rows of the left and right cell.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/MetaCellComparator.html#getSimpleComparator--">getSimpleComparator</a></span>()</code>&nbsp;</td>
 </tr>
@@ -365,13 +372,33 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 </dl>
 </li>
 </ul>
+<a name="compareRows-byte:A-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>compareRows</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.59">compareRows</a>(byte[]&nbsp;leftRow,
+                       byte[]&nbsp;rightRow)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compareRows-byte:A-byte:A-">CellComparator</a></code></span></div>
+<div class="block">Compares two row bytes</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>leftRow</code> - the byte array of the left row</dd>
+<dd><code>rightRow</code> - the byte array of the right row</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>greater than 0 if leftRow is bigger, less than 0 if rightRow is bigger, 0 if both
+         rows are equal</dd>
+</dl>
+</li>
+</ul>
 <a name="compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.59">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.64">compare</a>(<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
                    <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b,
                    boolean&nbsp;ignoreSequenceid)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#compare-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-boolean-">CellComparator</a></code></span></div>
@@ -394,7 +421,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.74">compareRows</a>(byte[]&nbsp;left,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.79">compareRows</a>(byte[]&nbsp;left,
                                int&nbsp;loffset,
                                int&nbsp;llength,
                                byte[]&nbsp;right,
@@ -408,7 +435,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>compareRows</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.127">compareRows</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.132">compareRows</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row,
                        <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -426,7 +453,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/CellComparatorImpl.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSimpleComparator</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.146">getSimpleComparator</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaCellComparator.html#line.151">getSimpleComparator</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html#getSimpleComparator--">getSimpleComparator</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html b/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
index 9c8e9f3..3b3bf89 100644
--- a/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>@InterfaceAudience.Public
+<pre>@InterfaceAudience.Private
 public abstract class <a href="../../../../src-html/org/apache/hadoop/hbase/ScheduledChore.html#line.44">ScheduledChore</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 606d724..bc46bef 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
index 9e8dcb9..12a24fd 100644
--- a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
@@ -103,8 +103,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ExecutorAction.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ExecutorAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ChaosServiceName.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ChaosServiceName</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ExecutorAction.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ExecutorAction</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/MutableRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/client/MutableRegionInfo.html
index ea12218..12a02ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/MutableRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/MutableRegionInfo.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.32">MutableRegionInfo</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.34">MutableRegionInfo</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></pre>
 <div class="block">An implementation of RegionInfo that adds mutable methods so can build a RegionInfo instance.
@@ -409,7 +409,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.33">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.35">LOG</a></pre>
 </li>
 </ul>
 <a name="MAX_REPLICA_ID">
@@ -418,7 +418,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_REPLICA_ID</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.34">MAX_REPLICA_ID</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.36">MAX_REPLICA_ID</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.MutableRegionInfo.MAX_REPLICA_ID">Constant Field Values</a></dd>
@@ -431,7 +431,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>offLine</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.64">offLine</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.66">offLine</a></pre>
 <div class="block">The new format for a region name contains its encodedName at the end.
  The encoded name also serves as the directory name for the region
  in the filesystem.
@@ -460,7 +460,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>split</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.65">split</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.67">split</a></pre>
 </li>
 </ul>
 <a name="regionId">
@@ -469,7 +469,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>regionId</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.66">regionId</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.68">regionId</a></pre>
 </li>
 </ul>
 <a name="replicaId">
@@ -478,7 +478,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>replicaId</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.67">replicaId</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.69">replicaId</a></pre>
 </li>
 </ul>
 <a name="regionName">
@@ -487,7 +487,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>regionName</h4>
-<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.68">regionName</a></pre>
+<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.70">regionName</a></pre>
 </li>
 </ul>
 <a name="startKey">
@@ -496,7 +496,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>startKey</h4>
-<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.69">startKey</a></pre>
+<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.71">startKey</a></pre>
 </li>
 </ul>
 <a name="endKey">
@@ -505,7 +505,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>endKey</h4>
-<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.70">endKey</a></pre>
+<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.72">endKey</a></pre>
 </li>
 </ul>
 <a name="hashCode">
@@ -514,7 +514,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.71">hashCode</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.73">hashCode</a></pre>
 </li>
 </ul>
 <a name="encodedName">
@@ -523,7 +523,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>encodedName</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.72">encodedName</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.74">encodedName</a></pre>
 </li>
 </ul>
 <a name="encodedNameAsBytes">
@@ -532,7 +532,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>encodedNameAsBytes</h4>
-<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.73">encodedNameAsBytes</a></pre>
+<pre>private final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.75">encodedNameAsBytes</a></pre>
 </li>
 </ul>
 <a name="tableName">
@@ -541,7 +541,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tableName</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.74">tableName</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.76">tableName</a></pre>
 </li>
 </ul>
 </li>
@@ -558,7 +558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>MutableRegionInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.114">MutableRegionInfo</a>(long&nbsp;regionId,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.116">MutableRegionInfo</a>(long&nbsp;regionId,
                   <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   int&nbsp;replicaId)</pre>
 <div class="block">Package private constructor used constructing MutableRegionInfo for the first meta regions</div>
@@ -570,7 +570,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MutableRegionInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.119">MutableRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.121">MutableRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                   byte[]&nbsp;startKey,
                   byte[]&nbsp;endKey,
                   boolean&nbsp;split,
@@ -593,7 +593,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>generateHashCode</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.76">generateHashCode</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.78">generateHashCode</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;startKey,
                                     byte[]&nbsp;endKey,
                                     long&nbsp;regionId,
@@ -608,7 +608,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>checkStartKey</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.89">checkStartKey</a>(byte[]&nbsp;startKey)</pre>
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.91">checkStartKey</a>(byte[]&nbsp;startKey)</pre>
 </li>
 </ul>
 <a name="checkEndKey-byte:A-">
@@ -617,7 +617,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>checkEndKey</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.93">checkEndKey</a>(byte[]&nbsp;endKey)</pre>
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.95">checkEndKey</a>(byte[]&nbsp;endKey)</pre>
 </li>
 </ul>
 <a name="checkTableName-org.apache.hadoop.hbase.TableName-">
@@ -626,7 +626,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTableName</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.97">checkTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.99">checkTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="checkReplicaId-int-">
@@ -635,7 +635,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReplicaId</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.104">checkReplicaId</a>(int&nbsp;regionId)</pre>
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.106">checkReplicaId</a>(int&nbsp;regionId)</pre>
 </li>
 </ul>
 <a name="getShortNameToLog--">
@@ -644,7 +644,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getShortNameToLog</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.140">getShortNameToLog</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.142">getShortNameToLog</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getShortNameToLog--">getShortNameToLog</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -659,7 +659,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.146">getRegionId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.148">getRegionId</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getRegionId--">getRegionId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -674,7 +674,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionName</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.156">getRegionName</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.158">getRegionName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getRegionName--">getRegionName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -691,7 +691,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNameAsString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.164">getRegionNameAsString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.166">getRegionNameAsString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getRegionNameAsString--">getRegionNameAsString</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -706,7 +706,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncodedName</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.170">getEncodedName</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.172">getEncodedName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getEncodedName--">getEncodedName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -721,7 +721,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncodedNameAsBytes</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.175">getEncodedNameAsBytes</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.177">getEncodedNameAsBytes</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getEncodedNameAsBytes--">getEncodedNameAsBytes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -736,7 +736,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartKey</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.181">getStartKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.183">getStartKey</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getStartKey--">getStartKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -751,7 +751,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getEndKey</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.187">getEndKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.189">getEndKey</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#getEndKey--">getEndKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -766,7 +766,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getTable</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.196">getTable</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.198">getTable</a>()</pre>
 <div class="block">Get current table name of the region</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -782,7 +782,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>containsRange</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.208">containsRange</a>(byte[]&nbsp;rangeStartKey,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.210">containsRange</a>(byte[]&nbsp;rangeStartKey,
                              byte[]&nbsp;rangeEndKey)</pre>
 <div class="block">Returns true if the given inclusive range of rows is fully contained
  by this region. For example, if the region is foo,a,g and this is
@@ -807,7 +807,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>containsRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.226">containsRow</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.229">containsRow</a>(byte[]&nbsp;row)</pre>
 <div class="block">Return true if the given row falls in this region.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -823,7 +823,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.234">isMetaRegion</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.238">isMetaRegion</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#isMetaRegion--">isMetaRegion</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -838,7 +838,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isSplit</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.242">isSplit</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.246">isSplit</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html#isSplit--">isSplit</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></dd>
@@ -853,7 +853,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>setSplit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MutableRegionInfo.html" title="class in org.apache.hadoop.hbase.client">MutableRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.250">setSplit</a>(boolean&nbsp;split)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MutableRegionInfo.html" title="class in org.apache.hadoop.hbase.client">MutableRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.254">setSplit</a>(boolean&nbsp;split)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>split</code> - set split status</dd>
@@ -869,7 +869,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.htm
 <li class="blockList">
 <h4>isOffline</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.262">isOffline</a>()</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.266">isOffline</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 3.0.0 and will be removed in 4.0.0</span></div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -887,7 +887,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>setOffline</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MutableRegionInfo.html" title="class in org.apache.hadoop.hbase.client">MutableRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.272">setOffline</a>(boolean&nbsp;offLine)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MutableRegionInfo.html" title="class in org.apache.hadoop.hbase.client">MutableRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.276">setOffline</a>(boolean&nbsp;offLine)</pre>
 <div class="block">The parent of a region split is offline while split daughters hold
  references to the parent. Offlined regions are closed.</div>
 <dl>
@@ -905,7 +905,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>isSplitParent</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.284">isSplitParent</a>()</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.288">isSplitParent</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 3.0.0 and will be removed in 4.0.0, Use <a href="../../../../../org/apache/hadoop/hbase/client/MutableRegionInfo.html#isSplit--"><code>isSplit()</code></a> instead.</span></div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -923,7 +923,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicaId</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.299">getReplicaId</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.303">getReplicaId</a>()</pre>
 <div class="block">Returns the region replica id</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -939,7 +939,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.307">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.311">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -954,7 +954,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.322">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.326">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -969,7 +969,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.339">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html#line.343">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index fd1f1b7..37dcf03 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -455,25 +455,25 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index f51af19..7cb63e4 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -105,8 +105,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 95008cb..55b5178 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index 96318e7..4245577 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 3bbcf17..cfee230 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -305,12 +305,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index e09acb7..69b502c 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -356,9 +356,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index cdf7412..84cec8e 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -300,11 +300,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index 8bede26..ba98778 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -151,8 +151,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 55e1874..56a27f7 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -212,8 +212,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerClusterState.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalancerClusterState.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalanceAction.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalanceAction.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerClusterState.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalancerClusterState.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 2532177..d9c936d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -318,13 +318,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 43232c6..5829e33 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -222,10 +222,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html b/devapidocs/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html
index cefe4b8..1192a36 100644
--- a/devapidocs/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html
+++ b/devapidocs/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html
@@ -120,7 +120,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.75">DefaultMobStoreCompactor</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.76">DefaultMobStoreCompactor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/DefaultCompactor.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">DefaultCompactor</a></pre>
 <div class="block">Compact passed set of files in the mob-enabled column family.</div>
 </li>
@@ -329,7 +329,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.77">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.78">LOG</a></pre>
 </li>
 </ul>
 <a name="mobSizeThreshold">
@@ -338,7 +338,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>mobSizeThreshold</h4>
-<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.78">mobSizeThreshold</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.79">mobSizeThreshold</a></pre>
 </li>
 </ul>
 <a name="mobStore">
@@ -347,7 +347,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>mobStore</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HMobStore.html" title="class in org.apache.hadoop.hbase.regionserver">HMobStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.79">mobStore</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HMobStore.html" title="class in org.apache.hadoop.hbase.regionserver">HMobStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.80">mobStore</a></pre>
 </li>
 </ul>
 <a name="ioOptimizedMode">
@@ -356,7 +356,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>ioOptimizedMode</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.80">ioOptimizedMode</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.81">ioOptimizedMode</a></pre>
 </li>
 </ul>
 <a name="mobRefSet">
@@ -365,7 +365,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>mobRefSet</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;org.apache.hbase.thirdparty.com.google.common.collect.SetMultimap&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">S [...]
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;org.apache.hbase.thirdparty.com.google.common.collect.SetMultimap&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">S [...]
 </li>
 </ul>
 <a name="userRequest">
@@ -374,7 +374,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>userRequest</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.95">userRequest</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.96">userRequest</a></pre>
 </li>
 </ul>
 <a name="disableIO">
@@ -383,7 +383,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>disableIO</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.111">disableIO</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.112">disableIO</a></pre>
 </li>
 </ul>
 <a name="mobLengthMap">
@@ -392,7 +392,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>mobLengthMap</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.co [...]
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.co [...]
 </li>
 </ul>
 <a name="scannerFactory">
@@ -401,7 +401,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerFactory</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.InternalScannerFactory.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">Compactor.InternalScannerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.130">scannerFactory</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.InternalScannerFactory.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">Compactor.InternalScannerFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.131">scannerFactory</a></pre>
 </li>
 </ul>
 <a name="writerFactory">
@@ -410,7 +410,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockListLast">
 <li class="blockList">
 <h4>writerFactory</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.CellSinkFactory.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">Compactor.CellSinkFactory</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.145 [...]
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.CellSinkFactory.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">Compactor.CellSinkFactory</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.146 [...]
 </li>
 </ul>
 </li>
@@ -427,7 +427,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DefaultMobStoreCompactor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.158">DefaultMobStoreCompactor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.159">DefaultMobStoreCompactor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store)</pre>
 </li>
 </ul>
@@ -445,7 +445,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.176">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequestImpl.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequestIm [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.177">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequestImpl.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequestIm [...]
                                                <a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;throughputController,
                                                <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -465,7 +465,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>calculateMobLengthMap</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.233">calculateMobLengthMap</a>(org.apache.hbase.thirdparty.com.google.common.collect.SetMultimap&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbs [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.234">calculateMobLengthMap</a>(org.apache.hbase.thirdparty.com.google.common.collect.SetMultimap&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbs [...]
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -481,7 +481,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>performCompaction</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.299">performCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.FileDetails.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">Compactor.FileDetails</a>&nbsp;fd,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.300">performCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.FileDetails.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">Compactor.FileDetails</a>&nbsp;fd,
                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a>&nbsp;scanner,
                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSink.html" title="interface in org.apache.hadoop.hbase.regionserver">CellSink</a>&nbsp;writer,
                                     long&nbsp;smallestReadPoint,
@@ -539,7 +539,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreInfo</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.602">getStoreInfo</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.604">getStoreInfo</a>()</pre>
 </li>
 </ul>
 <a name="clearThreadLocals--">
@@ -548,7 +548,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>clearThreadLocals</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.607">clearThreadLocals</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.609">clearThreadLocals</a>()</pre>
 </li>
 </ul>
 <a name="newMobWriter-org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails-boolean-">
@@ -557,7 +557,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>newMobWriter</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.615">newMobWriter</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.FileDetails.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">Compactor.FileDetails</a>&nbsp;fd,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.617">newMobWriter</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.FileDetails.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">Compactor.FileDetails</a>&nbsp;fd,
                                      boolean&nbsp;major)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -572,7 +572,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockList">
 <li class="blockList">
 <h4>commitOrAbortMobWriter</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.633">commitOrAbortMobWriter</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&nbsp;mobFileWriter,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.635">commitOrAbortMobWriter</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&nbsp;mobFileWriter,
                                     long&nbsp;maxSeqId,
                                     long&nbsp;mobCells,
                                     boolean&nbsp;major)
@@ -589,7 +589,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions
 <ul class="blockListLast">
 <li class="blockList">
 <h4>commitWriter</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.668">commitWriter</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&nbsp;writer,
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#line.670">commitWriter</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a>&nbsp;writer,
                                                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.FileDetails.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">Compactor.FileDetails</a>&nbsp;fd,
                                                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequestImpl.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequestImpl</a>&nbsp;request)
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 4b073c2..fca28c4 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -454,19 +454,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 2398d39..4f8b423 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -217,11 +217,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 8c8fce6..965557c 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index cd53958..e8dd939 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -729,20 +729,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index a7f13f5..7a0e3f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,8 +130,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index af94ffe..61f3f12 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -249,10 +249,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index 14f1f73..c0fbff3 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -172,8 +172,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 8703f65..90989fc 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 51647d3..3f4dce3 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,12 +162,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index c56a992..5c5c2f5 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -189,9 +189,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 50024bf..fba9877 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -212,8 +212,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index f7c87f1..1f0d341 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,15 +532,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
index 2a4594b..afd6a97 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/CellComparator.html
@@ -28,145 +28,157 @@
 <span class="sourceLineNo">020</span>import java.nio.ByteBuffer;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.util.Comparator;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * cell components like row, family, qualifier and timestamp<a name="line.28"></a>
-<span class="sourceLineNo">029</span> */<a name="line.29"></a>
-<span class="sourceLineNo">030</span>@InterfaceAudience.Public<a name="line.30"></a>
-<span class="sourceLineNo">031</span>@InterfaceStability.Evolving<a name="line.31"></a>
-<span class="sourceLineNo">032</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.32"></a>
-<span class="sourceLineNo">033</span>  /**<a name="line.33"></a>
-<span class="sourceLineNo">034</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.34"></a>
-<span class="sourceLineNo">035</span>   * order as necessary for bulk import (i.e. via MapReduce).<a name="line.35"></a>
-<span class="sourceLineNo">036</span>   * &lt;p&gt;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   * and should not be relied upon in that case.<a name="line.38"></a>
-<span class="sourceLineNo">039</span>   */<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  // For internal use, see CellComparatorImpl utility methods.<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  static CellComparator getInstance() {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    return CellComparatorImpl.COMPARATOR;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  }<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  /**<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * includes row, family, qualifier, timestamp and type<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   * @param leftCell the left hand side cell<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * @param rightCell the right hand side cell<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   *         cells are equal<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   */<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @Override<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Compare cells.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   *    the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  /**<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * Lexographically compares the rows of two cells.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param leftCell the left hand side cell<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * @param rightCell the right hand side cell<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   *         cells are equal<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   */<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  int compareRows(Cell leftCell, Cell rightCell);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * stopRow in Scan.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param cell the cell<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param offset the offset of the byte[]<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * @param length the length of the byte[]<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   *         cells are equal<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  /**<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param row ByteBuffer that wraps a row; will read from current position and will reading all<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   *            remaining; will not disturb the ByteBuffer internal state.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   *         cells are equal<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  default int compareRows(ByteBuffer row, Cell cell) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    if (cell instanceof ByteBufferExtendedCell) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        ((ByteBufferExtendedCell) cell).getRowPosition(),<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        cell.getRowLength());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      cell.getRowArray(), cell.getRowOffset(),<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      cell.getRowLength());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * timestamp and the type<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @param leftCell the left hand side cell<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * @param rightCell the right hand side cell<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *         cells are equal<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Lexographically compares the families of the two cells<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param leftCell the left hand side cell<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param rightCell the right hand side cell<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   *         cells are equal<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  int compareFamilies(Cell leftCell, Cell rightCell);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Lexographically compares the qualifiers of the two cells<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param leftCell the left hand side cell<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param rightCell the right hand side cell<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   *         cells are equal<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * a store file.<a name="line.135"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * Comparator for comparing cells and has some specialized methods that allows comparing individual<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * cell components like row, family, qualifier and timestamp<a name="line.29"></a>
+<span class="sourceLineNo">030</span> */<a name="line.30"></a>
+<span class="sourceLineNo">031</span>@InterfaceAudience.Public<a name="line.31"></a>
+<span class="sourceLineNo">032</span>@InterfaceStability.Evolving<a name="line.32"></a>
+<span class="sourceLineNo">033</span>public interface CellComparator extends Comparator&lt;Cell&gt; {<a name="line.33"></a>
+<span class="sourceLineNo">034</span>  /**<a name="line.34"></a>
+<span class="sourceLineNo">035</span>   * A comparator for ordering cells in user-space tables. Useful when writing cells in sorted<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * order as necessary for bulk import (i.e. via MapReduce).<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   * &lt;p&gt;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   * CAUTION: This comparator may provide inaccurate ordering for cells from system tables,<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * and should not be relied upon in that case.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  // For internal use, see CellComparatorImpl utility methods.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  static CellComparator getInstance() {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    return CellComparatorImpl.COMPARATOR;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  /**<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   * Lexographically compares two cells. The key part of the cell is taken for comparison which<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * includes row, family, qualifier, timestamp and type<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * @param leftCell the left hand side cell<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * @param rightCell the right hand side cell<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   *         cells are equal<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  @Override<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  int compare(Cell leftCell, Cell rightCell);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * Compare cells.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * @param ignoreSequenceid True if we are to compare the key portion only and ignore<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   *    the sequenceid. Set to false to compare key and consider sequenceid.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @return 0 if equal, -1 if a &amp;lt; b, and +1 if a &amp;gt; b.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  int compare(Cell leftCell, Cell rightCell, boolean ignoreSequenceid);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  /**<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * Lexographically compares the rows of two cells.<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * @param leftCell the left hand side cell<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * @param rightCell the right hand side cell<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   *         cells are equal<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  int compareRows(Cell leftCell, Cell rightCell);<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * Compares the row part of the cell with a simple plain byte[] like the<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * stopRow in Scan.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param cell the cell<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * @param bytes the byte[] representing the row to be compared with<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * @param offset the offset of the byte[]<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param length the length of the byte[]<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   *         cells are equal<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  int compareRows(Cell cell, byte[] bytes, int offset, int length);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * Compares two row bytes<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param leftRow the byte array of the left row<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * @param rightRow the byte array of the right row<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @return greater than 0 if leftRow is bigger, less than 0 if rightRow is bigger, 0 if both<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   *         rows are equal<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  default int compareRows(byte[] leftRow, byte[] rightRow) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return Bytes.compareTo(leftRow, rightRow);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param row ByteBuffer that wraps a row; will read from current position and will reading all<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   *            remaining; will not disturb the ByteBuffer internal state.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   *         cells are equal<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  default int compareRows(ByteBuffer row, Cell cell) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    if (cell instanceof ByteBufferExtendedCell) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        ((ByteBufferExtendedCell) cell).getRowPosition(),<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        cell.getRowLength());<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return ByteBufferUtils.compareTo(row, row.position(), row.remaining(),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      cell.getRowArray(), cell.getRowOffset(),<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      cell.getRowLength());<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Lexographically compares the two cells excluding the row part. It compares family, qualifier,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * timestamp and the type<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @param leftCell the left hand side cell<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @param rightCell the right hand side cell<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   *         cells are equal<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  int compareWithoutRow(Cell leftCell, Cell rightCell);<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * Lexographically compares the families of the two cells<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param leftCell the left hand side cell<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param rightCell the right hand side cell<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   *         cells are equal<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  int compareFamilies(Cell leftCell, Cell rightCell);<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * Lexographically compares the qualifiers of the two cells<a name="line.135"></a>
 <span class="sourceLineNo">136</span>   * @param leftCell the left hand side cell<a name="line.136"></a>
 <span class="sourceLineNo">137</span>   * @param rightCell the right hand side cell<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   *         timestamp 0 if both timestamps are equal<a name="line.139"></a>
+<span class="sourceLineNo">138</span>   * @return greater than 0 if leftCell is bigger, less than 0 if rightCell is bigger, 0 if both<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   *         cells are equal<a name="line.139"></a>
 <span class="sourceLineNo">140</span>   */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.141"></a>
+<span class="sourceLineNo">141</span>  int compareQualifiers(Cell leftCell, Cell rightCell);<a name="line.141"></a>
 <span class="sourceLineNo">142</span><a name="line.142"></a>
 <span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
 <span class="sourceLineNo">144</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.144"></a>
 <span class="sourceLineNo">145</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.145"></a>
 <span class="sourceLineNo">146</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.146"></a>
 <span class="sourceLineNo">147</span>   * a store file.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param leftCellts the left cell's timestamp<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param rightCellts the right cell's timestamp<a name="line.149"></a>
+<span class="sourceLineNo">148</span>   * @param leftCell the left hand side cell<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @param rightCell the right hand side cell<a name="line.149"></a>
 <span class="sourceLineNo">150</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.150"></a>
 <span class="sourceLineNo">151</span>   *         timestamp 0 if both timestamps are equal<a name="line.151"></a>
 <span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  int compareTimestamps(long leftCellts, long rightCellts);<a name="line.153"></a>
+<span class="sourceLineNo">153</span>  int compareTimestamps(Cell leftCell, Cell rightCell);<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
 <span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @return A dumbed-down, fast comparator for hbase2 base-type, the {@link ByteBufferKeyValue}.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   *   Create an instance when you make a new memstore, when you know only BBKVs will be passed.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   *   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  Comparator getSimpleComparator();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>}<a name="line.161"></a>
+<span class="sourceLineNo">156</span>   * Compares cell's timestamps in DESCENDING order. The below older timestamps sorting ahead of<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * newer timestamps looks wrong but it is intentional. This way, newer timestamps are first found<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * when we iterate over a memstore and newer versions are the first we trip over when reading from<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * a store file.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @param leftCellts the left cell's timestamp<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param rightCellts the right cell's timestamp<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @return 1 if left's timestamp &amp;lt; right's timestamp -1 if left's timestamp &amp;gt; right's<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   *         timestamp 0 if both timestamps are equal<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  int compareTimestamps(long leftCellts, long rightCellts);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @return A dumbed-down, fast comparator for hbase2 base-type, the {@link ByteBufferKeyValue}.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   *   Create an instance when you make a new memstore, when you know only BBKVs will be passed.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   *   Do not pollute with types other than BBKV if can be helped; the Comparator will slow.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  Comparator getSimpleComparator();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>}<a name="line.173"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
index c6ccc03..3b9a90e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span> * When finished with a ChoreService it is good practice to call {@link ChoreService#shutdown()}.<a name="line.50"></a>
 <span class="sourceLineNo">051</span> * Calling this method ensures that all scheduled chores are cancelled and cleaned up properly.<a name="line.51"></a>
 <span class="sourceLineNo">052</span> */<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceAudience.Public<a name="line.53"></a>
+<span class="sourceLineNo">053</span>@InterfaceAudience.Private<a name="line.53"></a>
 <span class="sourceLineNo">054</span>public class ChoreService {<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  private static final Logger LOG = LoggerFactory.getLogger(ChoreService.class);<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
index c6ccc03..3b9a90e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span> * When finished with a ChoreService it is good practice to call {@link ChoreService#shutdown()}.<a name="line.50"></a>
 <span class="sourceLineNo">051</span> * Calling this method ensures that all scheduled chores are cancelled and cleaned up properly.<a name="line.51"></a>
 <span class="sourceLineNo">052</span> */<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceAudience.Public<a name="line.53"></a>
+<span class="sourceLineNo">053</span>@InterfaceAudience.Private<a name="line.53"></a>
 <span class="sourceLineNo">054</span>public class ChoreService {<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  private static final Logger LOG = LoggerFactory.getLogger(ChoreService.class);<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaCellComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaCellComparator.html
index c3791ec..adaf339 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaCellComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaCellComparator.html
@@ -64,98 +64,103 @@
 <span class="sourceLineNo">056</span>  }<a name="line.56"></a>
 <span class="sourceLineNo">057</span><a name="line.57"></a>
 <span class="sourceLineNo">058</span>  @Override<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    int diff = compareRows(a, b);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    if (diff != 0) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      return diff;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    diff = compareWithoutRow(a, b);<a name="line.65"></a>
+<span class="sourceLineNo">059</span>  public int compareRows(byte[] leftRow, byte[] rightRow) {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    return compareRows(leftRow, 0, leftRow.length, rightRow, 0, rightRow.length);<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  @Override<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public int compare(final Cell a, final Cell b, boolean ignoreSequenceid) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    int diff = compareRows(a, b);<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    if (diff != 0) {<a name="line.66"></a>
 <span class="sourceLineNo">067</span>      return diff;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    }<a name="line.68"></a>
 <span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>    // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    return ignoreSequenceid ? diff : Longs.compare(b.getSequenceId(), a.getSequenceId());<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static int compareRows(byte[] left, int loffset, int llength, byte[] right, int roffset,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      int rlength) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    int leftDelimiter = Bytes.searchDelimiterIndex(left, loffset, llength, HConstants.DELIMITER);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    int rightDelimiter = Bytes.searchDelimiterIndex(right, roffset, rlength, HConstants.DELIMITER);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    // Compare up to the delimiter<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    int lpart = (leftDelimiter &lt; 0 ? llength : leftDelimiter - loffset);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    int rpart = (rightDelimiter &lt; 0 ? rlength : rightDelimiter - roffset);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    int result = Bytes.compareTo(left, loffset, lpart, right, roffset, rpart);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    if (result != 0) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      return result;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    } else {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        return -1;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        return 1;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      } else if (leftDelimiter &lt; 0) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        return 0;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    // Compare middle bit of the row.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    // Move past delimiter<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    leftDelimiter++;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    rightDelimiter++;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    int leftFarDelimiter = Bytes<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      .searchDelimiterIndexInReverse(left, leftDelimiter, llength - (leftDelimiter - loffset),<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        HConstants.DELIMITER);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    int rightFarDelimiter = Bytes<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      .searchDelimiterIndexInReverse(right, rightDelimiter, rlength - (rightDelimiter - roffset),<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        HConstants.DELIMITER);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    // Now compare middlesection of row.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    lpart = (leftFarDelimiter &lt; 0 ? llength + loffset : leftFarDelimiter) - leftDelimiter;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    rpart = (rightFarDelimiter &lt; 0 ? rlength + roffset : rightFarDelimiter) - rightDelimiter;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    result = Bytes.compareTo(left, leftDelimiter, lpart, right, rightDelimiter, rpart);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (result != 0) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return result;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    } else {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        return -1;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        return 1;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      } else if (leftDelimiter &lt; 0) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return 0;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    // Compare last part of row, the rowid.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    leftFarDelimiter++;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    rightFarDelimiter++;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    result = Bytes.compareTo(left, leftFarDelimiter, llength - (leftFarDelimiter - loffset), right,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      rightFarDelimiter, rlength - (rightFarDelimiter - roffset));<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    return result;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public int compareRows(ByteBuffer row, Cell cell) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    byte[] array;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    int offset;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    int len = row.remaining();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    if (row.hasArray()) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      array = row.array();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      offset = row.position() + row.arrayOffset();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    } else {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      // We copy the row array if offheap just so we can do a compare. We do this elsewhere too<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      // in BBUtils when Cell is backed by an offheap ByteBuffer. Needs fixing so no copy. TODO.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      array = new byte[len];<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      offset = 0;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      ByteBufferUtils.copyFromBufferToArray(array, row, row.position(), 0, len);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // Reverse result since we swap the order of the params we pass below.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    return -compareRows(cell, array, offset, len);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public Comparator getSimpleComparator() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return this;<a name="line.147"></a>
+<span class="sourceLineNo">070</span>    diff = compareWithoutRow(a, b);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    if (diff != 0) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      return diff;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    // Negate following comparisons so later edits show up first mvccVersion: later sorts first<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return ignoreSequenceid ? diff : Longs.compare(b.getSequenceId(), a.getSequenceId());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private static int compareRows(byte[] left, int loffset, int llength, byte[] right, int roffset,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      int rlength) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    int leftDelimiter = Bytes.searchDelimiterIndex(left, loffset, llength, HConstants.DELIMITER);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    int rightDelimiter = Bytes.searchDelimiterIndex(right, roffset, rlength, HConstants.DELIMITER);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    // Compare up to the delimiter<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    int lpart = (leftDelimiter &lt; 0 ? llength : leftDelimiter - loffset);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    int rpart = (rightDelimiter &lt; 0 ? rlength : rightDelimiter - roffset);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    int result = Bytes.compareTo(left, loffset, lpart, right, roffset, rpart);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    if (result != 0) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      return result;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    } else {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        return -1;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        return 1;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      } else if (leftDelimiter &lt; 0) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        return 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    // Compare middle bit of the row.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    // Move past delimiter<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    leftDelimiter++;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    rightDelimiter++;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    int leftFarDelimiter = Bytes<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      .searchDelimiterIndexInReverse(left, leftDelimiter, llength - (leftDelimiter - loffset),<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        HConstants.DELIMITER);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    int rightFarDelimiter = Bytes<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      .searchDelimiterIndexInReverse(right, rightDelimiter, rlength - (rightDelimiter - roffset),<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        HConstants.DELIMITER);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    // Now compare middlesection of row.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    lpart = (leftFarDelimiter &lt; 0 ? llength + loffset : leftFarDelimiter) - leftDelimiter;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    rpart = (rightFarDelimiter &lt; 0 ? rlength + roffset : rightFarDelimiter) - rightDelimiter;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    result = Bytes.compareTo(left, leftDelimiter, lpart, right, rightDelimiter, rpart);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    if (result != 0) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      return result;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    } else {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        return -1;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        return 1;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      } else if (leftDelimiter &lt; 0) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        return 0;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // Compare last part of row, the rowid.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    leftFarDelimiter++;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    rightFarDelimiter++;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    result = Bytes.compareTo(left, leftFarDelimiter, llength - (leftFarDelimiter - loffset), right,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      rightFarDelimiter, rlength - (rightFarDelimiter - roffset));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return result;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public int compareRows(ByteBuffer row, Cell cell) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] array;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    int offset;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    int len = row.remaining();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    if (row.hasArray()) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      array = row.array();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      offset = row.position() + row.arrayOffset();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    } else {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      // We copy the row array if offheap just so we can do a compare. We do this elsewhere too<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      // in BBUtils when Cell is backed by an offheap ByteBuffer. Needs fixing so no copy. TODO.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      array = new byte[len];<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      offset = 0;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      ByteBufferUtils.copyFromBufferToArray(array, row, row.position(), 0, len);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    // Reverse result since we swap the order of the params we pass below.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return -compareRows(cell, array, offset, len);<a name="line.147"></a>
 <span class="sourceLineNo">148</span>  }<a name="line.148"></a>
 <span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>}<a name="line.150"></a>
+<span class="sourceLineNo">150</span>  @Override<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public Comparator getSimpleComparator() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    return this;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>}<a name="line.155"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
index 10020c9..c1c160a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ScheduledChore.html
@@ -48,7 +48,7 @@
 <span class="sourceLineNo">040</span> * Don't subclass ScheduledChore if the task relies on being woken up for something to do, such as<a name="line.40"></a>
 <span class="sourceLineNo">041</span> * an entry being added to a queue, etc.<a name="line.41"></a>
 <span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Public<a name="line.43"></a>
+<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
 <span class="sourceLineNo">044</span>public abstract class ScheduledChore implements Runnable {<a name="line.44"></a>
 <span class="sourceLineNo">045</span>  private static final Logger LOG = LoggerFactory.getLogger(ScheduledChore.class);<a name="line.45"></a>
 <span class="sourceLineNo">046</span><a name="line.46"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html
index 15d1fa1..b19e95e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/MutableRegionInfo.html
@@ -25,329 +25,333 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span>import java.util.Arrays;<a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.HConstants;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.TableName;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.slf4j.Logger;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.slf4j.LoggerFactory;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * An implementation of RegionInfo that adds mutable methods so can build a RegionInfo instance.<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * Package private. Use {@link RegionInfoBuilder} creating instances of {@link RegionInfo}s.<a name="line.29"></a>
-<span class="sourceLineNo">030</span> */<a name="line.30"></a>
-<span class="sourceLineNo">031</span>@InterfaceAudience.Private<a name="line.31"></a>
-<span class="sourceLineNo">032</span>class MutableRegionInfo implements RegionInfo {<a name="line.32"></a>
-<span class="sourceLineNo">033</span>  private static final Logger LOG = LoggerFactory.getLogger(MutableRegionInfo.class);<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  private static final int MAX_REPLICA_ID = 0xFFFF;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * The new format for a region name contains its encodedName at the end.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   * The encoded name also serves as the directory name for the region<a name="line.38"></a>
-<span class="sourceLineNo">039</span>   * in the filesystem.<a name="line.39"></a>
-<span class="sourceLineNo">040</span>   *<a name="line.40"></a>
-<span class="sourceLineNo">041</span>   * New region name format:<a name="line.41"></a>
-<span class="sourceLineNo">042</span>   *    &amp;lt;tablename&gt;,,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt;.&amp;lt;encodedName&gt;.<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   * where,<a name="line.43"></a>
-<span class="sourceLineNo">044</span>   *    &amp;lt;encodedName&gt; is a hex version of the MD5 hash of<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   *    &amp;lt;tablename&gt;,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   *<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * The old region name format:<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   *    &amp;lt;tablename&gt;,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * For region names in the old format, the encoded name is a 32-bit<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * JenkinsHash integer value (in its decimal notation, string form).<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   *&lt;p&gt;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * **NOTE**<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   *<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * The first hbase:meta region, and regions created by an older<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * version of HBase (0.20 or prior) will continue to use the<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * old region name format.<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   */<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  // This flag is in the parent of a split while the parent is still referenced by daughter<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  // regions. We USED to set this flag when we disabled a table but now table state is kept up in<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  // zookeeper as of 0.90.0 HBase. And now in DisableTableProcedure, finally we will create bunch<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  // of UnassignProcedures and at the last of the procedure we will set the region state to<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // CLOSED, and will not change the offLine flag.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private boolean offLine;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private boolean split;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final long regionId;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final int replicaId;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final byte[] regionName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final byte[] startKey;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final byte[] endKey;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final int hashCode;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private final String encodedName;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private final byte[] encodedNameAsBytes;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private final TableName tableName;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private static int generateHashCode(final TableName tableName, final byte[] startKey,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      final byte[] endKey, final long regionId,<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      final int replicaId, boolean offLine, byte[] regionName) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    int result = Arrays.hashCode(regionName);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    result = (int) (result ^ regionId);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    result ^= Arrays.hashCode(checkStartKey(startKey));<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    result ^= Arrays.hashCode(checkEndKey(endKey));<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    result ^= Boolean.valueOf(offLine).hashCode();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    result ^= Arrays.hashCode(tableName.getName());<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    result ^= replicaId;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return result;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static byte[] checkStartKey(byte[] startKey) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    return startKey == null? HConstants.EMPTY_START_ROW: startKey;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private static byte[] checkEndKey(byte[] endKey) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    return endKey == null? HConstants.EMPTY_END_ROW: endKey;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static TableName checkTableName(TableName tableName) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    if (tableName == null) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      throw new IllegalArgumentException("TableName cannot be null");<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    return tableName;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private static int checkReplicaId(int regionId) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    if (regionId &gt; MAX_REPLICA_ID) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      throw new IllegalArgumentException("ReplicaId cannot be greater than" + MAX_REPLICA_ID);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    return regionId;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Package private constructor used constructing MutableRegionInfo for the first meta regions<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  MutableRegionInfo(long regionId, TableName tableName, int replicaId) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this(tableName, HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW, false, regionId,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      replicaId, false);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  MutableRegionInfo(final TableName tableName, final byte[] startKey, final byte[] endKey,<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      final boolean split, final long regionId, final int replicaId, boolean offLine) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    this.tableName = checkTableName(tableName);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    this.startKey = checkStartKey(startKey);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    this.endKey = checkEndKey(endKey);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    this.split = split;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.regionId = regionId;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    this.replicaId = checkReplicaId(replicaId);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.offLine = offLine;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    this.regionName = RegionInfo.createRegionName(this.tableName, this.startKey, this.regionId,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      this.replicaId, !this.tableName.equals(TableName.META_TABLE_NAME));<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.encodedName = RegionInfo.encodeRegionName(this.regionName);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.hashCode = generateHashCode(this.tableName, this.startKey, this.endKey, this.regionId,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      this.replicaId, this.offLine, this.regionName);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.encodedNameAsBytes = Bytes.toBytes(this.encodedName);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @return Return a short, printable name for this region (usually encoded name) for us logging.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @Override<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public String getShortNameToLog() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return RegionInfo.prettyPrint(this.getEncodedName());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /** @return the regionId */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public long getRegionId(){<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return regionId;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the regionName as an array of bytes.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @see #getRegionNameAsString()<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  public byte[] getRegionName() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return regionName;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @return Region name as a String for use in logging, etc.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Override<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public String getRegionNameAsString() {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return RegionInfo.getRegionNameAsString(this, this.regionName);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  /** @return the encoded region name */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  @Override<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public String getEncodedName() {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return this.encodedName;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public byte[] getEncodedNameAsBytes() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return this.encodedNameAsBytes;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  /** @return the startKey */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Override<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public byte[] getStartKey() {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    return startKey;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  /** @return the endKey */<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public byte[] getEndKey() {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    return endKey;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * Get current table name of the region<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * @return TableName<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  @Override<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public TableName getTable() {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return this.tableName;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Returns true if the given inclusive range of rows is fully contained<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * by this region. For example, if the region is foo,a,g and this is<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * passed ["b","c"] or ["a","c"] it will return true, but if this is passed<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * ["b","z"] it will return false.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @throws IllegalArgumentException if the range passed is invalid (ie. end &amp;lt; start)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @Override<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public boolean containsRange(byte[] rangeStartKey, byte[] rangeEndKey) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (Bytes.compareTo(rangeStartKey, rangeEndKey) &gt; 0) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      throw new IllegalArgumentException(<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      "Invalid range: " + Bytes.toStringBinary(rangeStartKey) +<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      " &gt; " + Bytes.toStringBinary(rangeEndKey));<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>    boolean firstKeyInRange = Bytes.compareTo(rangeStartKey, startKey) &gt;= 0;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    boolean lastKeyInRange =<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      Bytes.compareTo(rangeEndKey, endKey) &lt; 0 ||<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return firstKeyInRange &amp;&amp; lastKeyInRange;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * Return true if the given row falls in this region.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  @Override<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public boolean containsRow(byte[] row) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return Bytes.compareTo(row, startKey) &gt;= 0 &amp;&amp;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      (Bytes.compareTo(row, endKey) &lt; 0 ||<a name="line.228"></a>
-<span class="sourceLineNo">229</span>       Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY));<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  /** @return true if this region is a meta region */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public boolean isMetaRegion() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return tableName.equals(TableName.META_TABLE_NAME);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @return True if has been split and has daughters.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  @Override<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  public boolean isSplit() {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    return this.split;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>  /**<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * @param split set split status<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @return MutableRegionInfo<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public MutableRegionInfo setSplit(boolean split) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    this.split = split;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    return this;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @return True if this region is offline.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-25210"&gt;HBASE-25210&lt;/a&gt;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  @Deprecated<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  public boolean isOffline() {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return this.offLine;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * The parent of a region split is offline while split daughters hold<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * references to the parent. Offlined regions are closed.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @param offLine Set online/offline status.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @return MutableRegionInfo<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public MutableRegionInfo setOffline(boolean offLine) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    this.offLine = offLine;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    return this;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @return True if this is a split parent region.<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0, Use {@link #isSplit()} instead.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-25210"&gt;HBASE-25210&lt;/a&gt;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Deprecated<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public boolean isSplitParent() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    if (!isSplit()) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return false;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    if (!isOffline()) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      LOG.warn("Region is split but NOT offline: " + getRegionNameAsString());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    return true;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Returns the region replica id<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @return returns region replica id<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  @Override<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public int getReplicaId() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return replicaId;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @see Object#toString()<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  @Override<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  public String toString() {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    return "{ENCODED =&gt; " + getEncodedName() + ", " +<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      HConstants.NAME + " =&gt; '" + Bytes.toStringBinary(this.regionName)<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      + "', STARTKEY =&gt; '" +<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Bytes.toStringBinary(this.startKey) + "', ENDKEY =&gt; '" +<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      Bytes.toStringBinary(this.endKey) + "'" +<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      (isOffline()? ", OFFLINE =&gt; true": "") +<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      (isSplit()? ", SPLIT =&gt; true": "") +<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ((replicaId &gt; 0)? ", REPLICA_ID =&gt; " + replicaId : "") + "}";<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @see Object#equals(Object)<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  @Override<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public boolean equals(Object o) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    if (this == o) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      return true;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (o == null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return false;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    if (!(o instanceof RegionInfo)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return false;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return compareTo((RegionInfo)o) == 0;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @see Object#hashCode()<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public int hashCode() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    return this.hashCode;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>}<a name="line.342"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.CellComparatorImpl;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HConstants;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.TableName;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.slf4j.Logger;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.slf4j.LoggerFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * An implementation of RegionInfo that adds mutable methods so can build a RegionInfo instance.<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * Package private. Use {@link RegionInfoBuilder} creating instances of {@link RegionInfo}s.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> */<a name="line.32"></a>
+<span class="sourceLineNo">033</span>@InterfaceAudience.Private<a name="line.33"></a>
+<span class="sourceLineNo">034</span>class MutableRegionInfo implements RegionInfo {<a name="line.34"></a>
+<span class="sourceLineNo">035</span>  private static final Logger LOG = LoggerFactory.getLogger(MutableRegionInfo.class);<a name="line.35"></a>
+<span class="sourceLineNo">036</span>  private static final int MAX_REPLICA_ID = 0xFFFF;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * The new format for a region name contains its encodedName at the end.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   * The encoded name also serves as the directory name for the region<a name="line.40"></a>
+<span class="sourceLineNo">041</span>   * in the filesystem.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   *<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   * New region name format:<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   *    &amp;lt;tablename&gt;,,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt;.&amp;lt;encodedName&gt;.<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * where,<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   *    &amp;lt;encodedName&gt; is a hex version of the MD5 hash of<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   *    &amp;lt;tablename&gt;,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   *<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * The old region name format:<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   *    &amp;lt;tablename&gt;,&amp;lt;startkey&gt;,&amp;lt;regionIdTimestamp&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * For region names in the old format, the encoded name is a 32-bit<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * JenkinsHash integer value (in its decimal notation, string form).<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   *&lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * **NOTE**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   *<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * The first hbase:meta region, and regions created by an older<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * version of HBase (0.20 or prior) will continue to use the<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * old region name format.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   */<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // This flag is in the parent of a split while the parent is still referenced by daughter<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  // regions. We USED to set this flag when we disabled a table but now table state is kept up in<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  // zookeeper as of 0.90.0 HBase. And now in DisableTableProcedure, finally we will create bunch<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  // of UnassignProcedures and at the last of the procedure we will set the region state to<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  // CLOSED, and will not change the offLine flag.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private boolean offLine;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private boolean split;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final long regionId;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private final int replicaId;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final byte[] regionName;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final byte[] startKey;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final byte[] endKey;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private final int hashCode;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private final String encodedName;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private final byte[] encodedNameAsBytes;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final TableName tableName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private static int generateHashCode(final TableName tableName, final byte[] startKey,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      final byte[] endKey, final long regionId,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      final int replicaId, boolean offLine, byte[] regionName) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    int result = Arrays.hashCode(regionName);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    result = (int) (result ^ regionId);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    result ^= Arrays.hashCode(checkStartKey(startKey));<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    result ^= Arrays.hashCode(checkEndKey(endKey));<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    result ^= Boolean.valueOf(offLine).hashCode();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    result ^= Arrays.hashCode(tableName.getName());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    result ^= replicaId;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    return result;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static byte[] checkStartKey(byte[] startKey) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    return startKey == null? HConstants.EMPTY_START_ROW: startKey;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private static byte[] checkEndKey(byte[] endKey) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    return endKey == null? HConstants.EMPTY_END_ROW: endKey;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static TableName checkTableName(TableName tableName) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    if (tableName == null) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      throw new IllegalArgumentException("TableName cannot be null");<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    return tableName;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private static int checkReplicaId(int regionId) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    if (regionId &gt; MAX_REPLICA_ID) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      throw new IllegalArgumentException("ReplicaId cannot be greater than" + MAX_REPLICA_ID);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return regionId;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Package private constructor used constructing MutableRegionInfo for the first meta regions<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  MutableRegionInfo(long regionId, TableName tableName, int replicaId) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    this(tableName, HConstants.EMPTY_START_ROW, HConstants.EMPTY_END_ROW, false, regionId,<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      replicaId, false);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  MutableRegionInfo(final TableName tableName, final byte[] startKey, final byte[] endKey,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      final boolean split, final long regionId, final int replicaId, boolean offLine) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    this.tableName = checkTableName(tableName);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    this.startKey = checkStartKey(startKey);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    this.endKey = checkEndKey(endKey);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    this.split = split;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.regionId = regionId;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.replicaId = checkReplicaId(replicaId);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    this.offLine = offLine;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.regionName = RegionInfo.createRegionName(this.tableName, this.startKey, this.regionId,<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      this.replicaId, !this.tableName.equals(TableName.META_TABLE_NAME));<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    this.encodedName = RegionInfo.encodeRegionName(this.regionName);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.hashCode = generateHashCode(this.tableName, this.startKey, this.endKey, this.regionId,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.replicaId, this.offLine, this.regionName);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    this.encodedNameAsBytes = Bytes.toBytes(this.encodedName);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @return Return a short, printable name for this region (usually encoded name) for us logging.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public String getShortNameToLog() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    return RegionInfo.prettyPrint(this.getEncodedName());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  /** @return the regionId */<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public long getRegionId(){<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    return regionId;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @return the regionName as an array of bytes.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @see #getRegionNameAsString()<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  public byte[] getRegionName() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return regionName;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  /**<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @return Region name as a String for use in logging, etc.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  @Override<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public String getRegionNameAsString() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    return RegionInfo.getRegionNameAsString(this, this.regionName);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /** @return the encoded region name */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  @Override<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public String getEncodedName() {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    return this.encodedName;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public byte[] getEncodedNameAsBytes() {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return this.encodedNameAsBytes;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>  /** @return the startKey */<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public byte[] getStartKey() {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    return startKey;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  /** @return the endKey */<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public byte[] getEndKey() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    return endKey;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * Get current table name of the region<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * @return TableName<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public TableName getTable() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    return this.tableName;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * Returns true if the given inclusive range of rows is fully contained<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * by this region. For example, if the region is foo,a,g and this is<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * passed ["b","c"] or ["a","c"] it will return true, but if this is passed<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * ["b","z"] it will return false.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @throws IllegalArgumentException if the range passed is invalid (ie. end &amp;lt; start)<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public boolean containsRange(byte[] rangeStartKey, byte[] rangeEndKey) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    CellComparator cellComparator = CellComparatorImpl.getCellComparator(tableName);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    if (cellComparator.compareRows(rangeStartKey, rangeEndKey) &gt; 0) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      throw new IllegalArgumentException(<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "Invalid range: " + Bytes.toStringBinary(rangeStartKey) +<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      " &gt; " + Bytes.toStringBinary(rangeEndKey));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    boolean firstKeyInRange = cellComparator.compareRows(rangeStartKey, startKey) &gt;= 0;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    boolean lastKeyInRange =<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      cellComparator.compareRows(rangeEndKey, endKey) &lt; 0 ||<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    return firstKeyInRange &amp;&amp; lastKeyInRange;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * Return true if the given row falls in this region.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  @Override<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  public boolean containsRow(byte[] row) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    CellComparator cellComparator = CellComparatorImpl.getCellComparator(tableName);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    return cellComparator.compareRows(row, startKey) &gt;= 0 &amp;&amp;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      (cellComparator.compareRows(row, endKey) &lt; 0 ||<a name="line.232"></a>
+<span class="sourceLineNo">233</span>       Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /** @return true if this region is a meta region */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public boolean isMetaRegion() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return tableName.equals(TableName.META_TABLE_NAME);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * @return True if has been split and has daughters.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  @Override<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  public boolean isSplit() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return this.split;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * @param split set split status<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @return MutableRegionInfo<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public MutableRegionInfo setSplit(boolean split) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    this.split = split;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    return this;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @return True if this region is offline.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-25210"&gt;HBASE-25210&lt;/a&gt;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   */<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  @Deprecated<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  public boolean isOffline() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return this.offLine;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * The parent of a region split is offline while split daughters hold<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * references to the parent. Offlined regions are closed.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * @param offLine Set online/offline status.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * @return MutableRegionInfo<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public MutableRegionInfo setOffline(boolean offLine) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.offLine = offLine;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    return this;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * @return True if this is a split parent region.<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @deprecated since 3.0.0 and will be removed in 4.0.0, Use {@link #isSplit()} instead.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-25210"&gt;HBASE-25210&lt;/a&gt;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  @Deprecated<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  public boolean isSplitParent() {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    if (!isSplit()) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      return false;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    if (!isOffline()) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      LOG.warn("Region is split but NOT offline: " + getRegionNameAsString());<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    return true;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * Returns the region replica id<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @return returns region replica id<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  @Override<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public int getReplicaId() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return replicaId;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  /**<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * @see Object#toString()<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  @Override<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public String toString() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return "{ENCODED =&gt; " + getEncodedName() + ", " +<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      HConstants.NAME + " =&gt; '" + Bytes.toStringBinary(this.regionName)<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      + "', STARTKEY =&gt; '" +<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      Bytes.toStringBinary(this.startKey) + "', ENDKEY =&gt; '" +<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      Bytes.toStringBinary(this.endKey) + "'" +<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      (isOffline()? ", OFFLINE =&gt; true": "") +<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      (isSplit()? ", SPLIT =&gt; true": "") +<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      ((replicaId &gt; 0)? ", REPLICA_ID =&gt; " + replicaId : "") + "}";<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>  /**<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @see Object#equals(Object)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public boolean equals(Object o) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    if (this == o) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      return true;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (o == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      return false;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    if (!(o instanceof RegionInfo)) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return false;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return compareTo((RegionInfo)o) == 0;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @see Object#hashCode()<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  @Override<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  public int hashCode() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return this.hashCode;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>}<a name="line.346"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html b/devapidocs/src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html
index 8669464..ad53c54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html
@@ -43,647 +43,649 @@
 <span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.Cell;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.regionserver.CellSink;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.HMobStore;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.KeyValueScanner;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.ScanInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.ScanType;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.ScannerContext;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.ShipperListener;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.StoreFileScanner;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.StoreFileWriter;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.StoreScanner;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.compactions.CloseChecker;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequestImpl;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputControlUtil;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.security.User;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.slf4j.Logger;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.LoggerFactory;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.collect.HashMultimap;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSetMultimap;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.collect.SetMultimap;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>/**<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * Compact passed set of files in the mob-enabled column family.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> */<a name="line.73"></a>
-<span class="sourceLineNo">074</span>@InterfaceAudience.Private<a name="line.74"></a>
-<span class="sourceLineNo">075</span>public class DefaultMobStoreCompactor extends DefaultCompactor {<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(DefaultMobStoreCompactor.class);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  protected long mobSizeThreshold;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  protected HMobStore mobStore;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  protected boolean ioOptimizedMode = false;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  /*<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * MOB file reference set thread local variable. It contains set of a MOB file names, which newly<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * compacted store file has references to. This variable is populated during compaction and the<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * content of it is written into meta section of a newly created store file at the final step of<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * compaction process.<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   */<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  static ThreadLocal&lt;SetMultimap&lt;TableName,String&gt;&gt; mobRefSet =<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      ThreadLocal.withInitial(HashMultimap::create);<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  /*<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Is it user or system-originated request.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  static ThreadLocal&lt;Boolean&gt; userRequest = new ThreadLocal&lt;Boolean&gt;() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    protected Boolean initialValue() {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return Boolean.FALSE;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  };<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.TableName;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.CellSink;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.regionserver.HMobStore;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.KeyValueScanner;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.ScanInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.ScanType;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.ScannerContext;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.ShipperListener;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.StoreFileScanner;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.StoreFileWriter;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.StoreScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.compactions.CloseChecker;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequestImpl;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputControlUtil;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.security.User;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.com.google.common.collect.HashMultimap;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSetMultimap;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.collect.SetMultimap;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * Compact passed set of files in the mob-enabled column family.<a name="line.73"></a>
+<span class="sourceLineNo">074</span> */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>@InterfaceAudience.Private<a name="line.75"></a>
+<span class="sourceLineNo">076</span>public class DefaultMobStoreCompactor extends DefaultCompactor {<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private static final Logger LOG = LoggerFactory.getLogger(DefaultMobStoreCompactor.class);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected long mobSizeThreshold;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  protected HMobStore mobStore;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  protected boolean ioOptimizedMode = false;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /*<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * MOB file reference set thread local variable. It contains set of a MOB file names, which newly<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * compacted store file has references to. This variable is populated during compaction and the<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * content of it is written into meta section of a newly created store file at the final step of<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * compaction process.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   */<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  static ThreadLocal&lt;SetMultimap&lt;TableName,String&gt;&gt; mobRefSet =<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      ThreadLocal.withInitial(HashMultimap::create);<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  /*<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * Is it user or system-originated request.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  static ThreadLocal&lt;Boolean&gt; userRequest = new ThreadLocal&lt;Boolean&gt;() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    protected Boolean initialValue() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return Boolean.FALSE;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  };<a name="line.101"></a>
 <span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  /*<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * Disable IO mode. IO mode can be forcefully disabled if compactor finds<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * old MOB file (pre-distributed compaction). This means that migration has not<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * been completed yet. During data migration (upgrade) process only general compaction<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * is allowed.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  static ThreadLocal&lt;Boolean&gt; disableIO = new ThreadLocal&lt;Boolean&gt;() {<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>    @Override<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    protected Boolean initialValue() {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return Boolean.FALSE;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  };<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /*<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * Map : MOB file name - file length Can be expensive for large amount of MOB files.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  static ThreadLocal&lt;HashMap&lt;String, Long&gt;&gt; mobLengthMap =<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    new ThreadLocal&lt;HashMap&lt;String, Long&gt;&gt;() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      @Override<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      protected HashMap&lt;String, Long&gt; initialValue() {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return new HashMap&lt;String, Long&gt;();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      }<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    };<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final InternalScannerFactory scannerFactory = new InternalScannerFactory() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>    @Override<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    public ScanType getScanType(CompactionRequestImpl request) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      return request.isAllFiles() ? COMPACT_DROP_DELETES : COMPACT_RETAIN_DELETES;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    public InternalScanner createScanner(ScanInfo scanInfo, List&lt;StoreFileScanner&gt; scanners,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        ScanType scanType, FileDetails fd, long smallestReadPoint) throws IOException {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      return new StoreScanner(store, scanInfo, scanners, scanType, smallestReadPoint,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>          fd.earliestPutTs);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  };<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final CellSinkFactory&lt;StoreFileWriter&gt; writerFactory =<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      new CellSinkFactory&lt;StoreFileWriter&gt;() {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        public StoreFileWriter createWriter(InternalScanner scanner,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>            org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails fd,<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            boolean shouldDropBehind, boolean major) throws IOException {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          // make this writer with tags always because of possible new cells with tags.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          return store.createWriterInTmp(fd.maxKeyCount,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            major ? majorCompactionCompression : minorCompactionCompression,<a name="line.153"></a>
-<span class="sourceLineNo">154</span>            true, true, true, shouldDropBehind);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      };<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public DefaultMobStoreCompactor(Configuration conf, HStore store) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    super(conf, store);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    // The mob cells reside in the mob-enabled column family which is held by HMobStore.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    // During the compaction, the compactor reads the cells from the mob files and<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // probably creates new mob files. All of these operations are included in HMobStore,<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    // so we need to cast the Store to HMobStore.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    if (!(store instanceof HMobStore)) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      throw new IllegalArgumentException("The store " + store + " is not a HMobStore");<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    this.mobStore = (HMobStore) store;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    this.mobSizeThreshold = store.getColumnFamilyDescriptor().getMobThreshold();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.ioOptimizedMode = conf.get(MobConstants.MOB_COMPACTION_TYPE_KEY,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      MobConstants.DEFAULT_MOB_COMPACTION_TYPE).<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        equals(MobConstants.OPTIMIZED_MOB_COMPACTION_TYPE);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public List&lt;Path&gt; compact(CompactionRequestImpl request,<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      ThroughputController throughputController, User user) throws IOException {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    String tableName = store.getTableName().toString();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    String regionName = store.getRegionInfo().getRegionNameAsString();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    String familyName = store.getColumnFamilyName();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    LOG.info("MOB compaction: major={} isAll={} priority={} throughput controller={}" +<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      " table={} cf={} region={}",<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      request.isMajor(), request.isAllFiles(), request.getPriority(),<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      throughputController, tableName, familyName, regionName);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    if (request.getPriority() == HStore.PRIORITY_USER) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      userRequest.set(Boolean.TRUE);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    } else {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      userRequest.set(Boolean.FALSE);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    LOG.debug("MOB compaction table={} cf={} region={} files: {}", tableName, familyName,<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      regionName, request.getFiles());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // Check if I/O optimized MOB compaction<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (ioOptimizedMode) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      if (request.isMajor() &amp;&amp; request.getPriority() == HStore.PRIORITY_USER) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        try {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          final SetMultimap&lt;TableName, String&gt; mobRefs = request.getFiles().stream()<a name="line.196"></a>
-<span class="sourceLineNo">197</span>              .map(file -&gt; {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>                byte[] value = file.getMetadataValue(HStoreFile.MOB_FILE_REFS);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>                ImmutableSetMultimap.Builder&lt;TableName, String&gt; builder;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                if (value == null) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>                  builder = ImmutableSetMultimap.builder();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>                } else {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>                  try {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>                    builder = MobUtils.deserializeMobFileRefs(value);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>                  } catch (RuntimeException exception) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>                    throw new RuntimeException("failure getting mob references for hfile " + file,<a name="line.206"></a>
-<span class="sourceLineNo">207</span>                        exception);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>                  }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>                }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>                return builder;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>              }).reduce((a, b) -&gt; a.putAll(b.build())).orElseGet(ImmutableSetMultimap::builder)<a name="line.211"></a>
-<span class="sourceLineNo">212</span>              .build();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          //reset disableIO<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          disableIO.set(Boolean.FALSE);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          if (!mobRefs.isEmpty()) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>            calculateMobLengthMap(mobRefs);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          LOG.info("Table={} cf={} region={}. I/O optimized MOB compaction. "+<a name="line.218"></a>
-<span class="sourceLineNo">219</span>              "Total referenced MOB files: {}", tableName, familyName, regionName, mobRefs.size());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        } catch (RuntimeException exception) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          throw new IOException("Failed to get list of referenced hfiles for request " + request,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              exception);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return compact(request, scannerFactory, writerFactory, throughputController, user);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * @param mobRefs multimap of original table name -&gt; mob hfile<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  private void calculateMobLengthMap(SetMultimap&lt;TableName, String&gt; mobRefs) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    FileSystem fs = store.getFileSystem();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    HashMap&lt;String, Long&gt; map = mobLengthMap.get();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    map.clear();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    for (Entry&lt;TableName, String&gt; reference : mobRefs.entries()) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      final TableName table = reference.getKey();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      final String mobfile = reference.getValue();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      if (MobFileName.isOldMobFileName(mobfile)) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        disableIO.set(Boolean.TRUE);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      List&lt;Path&gt; locations = mobStore.getLocations(table);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      for (Path p : locations) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        try {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          FileStatus st = fs.getFileStatus(new Path(p, mobfile));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          long size = st.getLen();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          LOG.debug("Referenced MOB file={} size={}", mobfile, size);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          map.put(mobfile, size);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          break;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        } catch (FileNotFoundException exception) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          LOG.debug("Mob file {} was not in location {}. May have other locations to try.", mobfile,<a name="line.252"></a>
-<span class="sourceLineNo">253</span>              p);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      if (!map.containsKey(mobfile)) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        throw new FileNotFoundException("Could not find mob file " + mobfile + " in the list of " +<a name="line.257"></a>
-<span class="sourceLineNo">258</span>            "expected locations: " + locations);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  /**<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * Performs compaction on a column family with the mob flag enabled. This works only when MOB<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * compaction is explicitly requested (by User), or by Master There are two modes of a MOB<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * compaction:&lt;br&gt;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * &lt;p&gt;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * &lt;ul&gt;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * &lt;li&gt;1. Full mode - when all MOB data for a region is compacted into a single MOB file.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * &lt;li&gt;2. I/O optimized mode - for use cases with no or infrequent updates/deletes of a &lt;br&gt;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * MOB data. The main idea behind i/o optimized compaction is to limit maximum size of a MOB file<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * produced during compaction and to limit I/O write/read amplification.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * &lt;/ul&gt;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * The basic algorithm of compaction is the following: &lt;br&gt;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * 1. If the Put cell has a mob reference tag, the cell's value is the path of the mob file.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * &lt;ol&gt;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * &lt;li&gt;If the value size of a cell is larger than the threshold, this cell is regarded as a mob,<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * directly copy the (with mob tag) cell into the new store file.&lt;/li&gt;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * &lt;li&gt;Otherwise, retrieve the mob cell from the mob file, and writes a copy of the cell into the<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * new store file.&lt;/li&gt;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * &lt;/ol&gt;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * 2. If the Put cell doesn't have a reference tag.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * &lt;ol&gt;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * &lt;li&gt;If the value size of a cell is larger than the threshold, this cell is regarded as a mob,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * write this cell to a mob file, and write the path of this mob file to the store file.&lt;/li&gt;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * &lt;li&gt;Otherwise, directly write this cell into the store file.&lt;/li&gt;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * &lt;/ol&gt;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @param fd File details<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * @param scanner Where to read from.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param writer Where to write to.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param smallestReadPoint Smallest read point.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @param cleanSeqId When true, remove seqId(used to be mvcc) value which is &lt;= smallestReadPoint<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param throughputController The compaction throughput controller.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @param major Is a major compaction.<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @param numofFilesToCompact the number of files to compact<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @return Whether compaction ended; false if it was interrupted for any reason.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  @Override<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  protected boolean performCompaction(FileDetails fd, InternalScanner scanner, CellSink writer,<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      long smallestReadPoint, boolean cleanSeqId, ThroughputController throughputController,<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      boolean major, int numofFilesToCompact) throws IOException {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    long bytesWrittenProgressForLog = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    long bytesWrittenProgressForShippedCall = 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // Clear old mob references<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    mobRefSet.get().clear();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    boolean isUserRequest = userRequest.get();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    boolean compactMOBs = major &amp;&amp; isUserRequest;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    boolean discardMobMiss = conf.getBoolean(MobConstants.MOB_UNSAFE_DISCARD_MISS_KEY,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      MobConstants.DEFAULT_MOB_DISCARD_MISS);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    if (discardMobMiss) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      LOG.warn("{}=true. This is unsafe setting recommended only when first upgrading to a version"+<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        " with the distributed mob compaction feature on a cluster that has experienced MOB data " +<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        "corruption.", MobConstants.MOB_UNSAFE_DISCARD_MISS_KEY);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    long maxMobFileSize = conf.getLong(MobConstants.MOB_COMPACTION_MAX_FILE_SIZE_KEY,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      MobConstants.DEFAULT_MOB_COMPACTION_MAX_FILE_SIZE);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    boolean ioOptimizedMode = this.ioOptimizedMode &amp;&amp; !disableIO.get();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    LOG.info("Compact MOB={} optimized configured={} optimized enabled={} maximum MOB file size={}"<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      + " major={} store={}", compactMOBs,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      this.ioOptimizedMode, ioOptimizedMode, maxMobFileSize, major, getStoreInfo());<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    // Since scanner.next() can return 'false' but still be delivering data,<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    // we have to use a do/while loop.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    List&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // Limit to "hbase.hstore.compaction.kv.max" (default 10) to avoid OOME<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    long lastMillis = 0;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    if (LOG.isDebugEnabled()) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      lastMillis = currentTime;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    CloseChecker closeChecker = new CloseChecker(conf, currentTime);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    String compactionName = ThroughputControlUtil.getNameForThrottling(store, "compaction");<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    long now = 0;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    boolean hasMore;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    byte[] fileName = null;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    StoreFileWriter mobFileWriter = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    /*<a name="line.336"></a>
-<span class="sourceLineNo">337</span>     * mobCells are used only to decide if we need to commit or abort current MOB output file.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>     */<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long mobCells = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    long cellsCountCompactedToMob = 0, cellsCountCompactedFromMob = 0;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    long cellsSizeCompactedToMob = 0, cellsSizeCompactedFromMob = 0;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    boolean finished = false;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    ScannerContext scannerContext =<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        ScannerContext.newBuilder().setBatchLimit(compactionKVMax).build();<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    throughputController.start(compactionName);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    KeyValueScanner kvs = (scanner instanceof KeyValueScanner) ? (KeyValueScanner) scanner : null;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    long shippedCallSizeLimit =<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        (long) numofFilesToCompact * this.store.getColumnFamilyDescriptor().getBlocksize();<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>    Cell mobCell = null;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>      mobFileWriter = newMobWriter(fd, major);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>      do {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        hasMore = scanner.next(cells, scannerContext);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        currentTime = EnvironmentEdgeManager.currentTime();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (LOG.isDebugEnabled()) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          now = currentTime;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        if (closeChecker.isTimeLimit(store, currentTime)) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          progress.cancel();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          return false;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        for (Cell c : cells) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          if (compactMOBs) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>            if (MobUtils.isMobReferenceCell(c)) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>              String fName = MobUtils.getMobFileName(c);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>              // Added to support migration<a name="line.371"></a>
-<span class="sourceLineNo">372</span>              try {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>                mobCell = mobStore.resolve(c, true, false).getCell();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>              } catch (FileNotFoundException fnfe) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>                if (discardMobMiss) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>                  LOG.error("Missing MOB cell: file={} not found cell={}", fName, c);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>                  continue;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>                } else {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>                  throw fnfe;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>              }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>              if (discardMobMiss &amp;&amp; mobCell.getValueLength() == 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>                LOG.error("Missing MOB cell value: file={} mob cell={} cell={}", fName,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                  mobCell, c);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>                continue;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>              } else if (mobCell.getValueLength() == 0) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>                String errMsg = String.format("Found 0 length MOB cell in a file=%s mob cell=%s "<a name="line.388"></a>
-<span class="sourceLineNo">389</span>                    + " cell=%s",<a name="line.389"></a>
-<span class="sourceLineNo">390</span>                  fName, mobCell, c);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>                throw new IOException(errMsg);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>              }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>              if (mobCell.getValueLength() &gt; mobSizeThreshold) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>                // put the mob data back to the MOB store file<a name="line.395"></a>
-<span class="sourceLineNo">396</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>                if (!ioOptimizedMode) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>                  mobFileWriter.append(mobCell);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>                  mobCells++;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>                  writer.append(<a name="line.400"></a>
-<span class="sourceLineNo">401</span>                    MobUtils.createMobRefCell(mobCell, fileName, this.mobStore.getRefCellTags()));<a name="line.401"></a>
-<span class="sourceLineNo">402</span>                } else {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>                  // I/O optimized mode<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                  // Check if MOB cell origin file size is<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                  // greater than threshold<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                  Long size = mobLengthMap.get().get(fName);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>                  if (size == null) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>                    // FATAL error (we should never get here though), abort compaction<a name="line.408"></a>
-<span class="sourceLineNo">409</span>                    // This error means that meta section of store file does not contain<a name="line.409"></a>
-<span class="sourceLineNo">410</span>                    // MOB file, which has references in at least one cell from this store file<a name="line.410"></a>
-<span class="sourceLineNo">411</span>                    String msg = String.format(<a name="line.411"></a>
-<span class="sourceLineNo">412</span>                      "Found an unexpected MOB file during compaction %s, aborting compaction %s",<a name="line.412"></a>
-<span class="sourceLineNo">413</span>                      fName, getStoreInfo());<a name="line.413"></a>
-<span class="sourceLineNo">414</span>                    throw new IOException(msg);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>                  }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>                  // Can not be null<a name="line.416"></a>
-<span class="sourceLineNo">417</span>                  if (size &lt; maxMobFileSize) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>                    // If MOB cell origin file is below threshold<a name="line.418"></a>
-<span class="sourceLineNo">419</span>                    // it is get compacted<a name="line.419"></a>
-<span class="sourceLineNo">420</span>                    mobFileWriter.append(mobCell);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>                    // Update number of mobCells in a current mob writer<a name="line.421"></a>
-<span class="sourceLineNo">422</span>                    mobCells++;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>                    writer.append(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>                      MobUtils.createMobRefCell(mobCell, fileName, this.mobStore.getRefCellTags()));<a name="line.424"></a>
-<span class="sourceLineNo">425</span>                    // Update total size of the output (we do not take into account<a name="line.425"></a>
-<span class="sourceLineNo">426</span>                    // file compression yet)<a name="line.426"></a>
-<span class="sourceLineNo">427</span>                    long len = mobFileWriter.getPos();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                    if (len &gt; maxMobFileSize) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>                      LOG.debug("Closing output MOB File, length={} file={}, store={}", len,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>                        mobFileWriter.getPath().getName(), getStoreInfo());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>                      commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>                      mobFileWriter = newMobWriter(fd, major);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>                      fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.433"></a>
-<span class="sourceLineNo">434</span>                      mobCells = 0;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>                    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>                  } else {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>                    // We leave large MOB file as is (is not compacted),<a name="line.437"></a>
-<span class="sourceLineNo">438</span>                    // then we update set of MOB file references<a name="line.438"></a>
-<span class="sourceLineNo">439</span>                    // and append mob cell directly to the store's writer<a name="line.439"></a>
-<span class="sourceLineNo">440</span>                    Optional&lt;TableName&gt; refTable = MobUtils.getTableName(c);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>                    if (refTable.isPresent()) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>                      mobRefSet.get().put(refTable.get(), fName);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>                      writer.append(c);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>                    } else {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>                      throw new IOException(String.format("MOB cell did not contain a tablename " +<a name="line.445"></a>
-<span class="sourceLineNo">446</span>                          "tag. should not be possible. see ref guide on mob troubleshooting. " +<a name="line.446"></a>
-<span class="sourceLineNo">447</span>                          "store=%s cell=%s", getStoreInfo(), c));<a name="line.447"></a>
-<span class="sourceLineNo">448</span>                    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>                  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>                }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>              } else {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>                // If MOB value is less than threshold, append it directly to a store file<a name="line.452"></a>
-<span class="sourceLineNo">453</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>                writer.append(mobCell);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>                cellsCountCompactedFromMob++;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>                cellsSizeCompactedFromMob += mobCell.getValueLength();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>              }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>            } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>              // Not a MOB reference cell<a name="line.459"></a>
-<span class="sourceLineNo">460</span>              int size = c.getValueLength();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>              if (size &gt; mobSizeThreshold) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>                // This MOB cell comes from a regular store file<a name="line.462"></a>
-<span class="sourceLineNo">463</span>                // therefore we store it into original mob output<a name="line.463"></a>
-<span class="sourceLineNo">464</span>                mobFileWriter.append(c);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>                writer<a name="line.465"></a>
-<span class="sourceLineNo">466</span>                    .append(MobUtils.createMobRefCell(c, fileName, this.mobStore.getRefCellTags()));<a name="line.466"></a>
-<span class="sourceLineNo">467</span>                mobCells++;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>                cellsCountCompactedToMob++;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>                cellsSizeCompactedToMob += c.getValueLength();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>                if (ioOptimizedMode) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>                  // Update total size of the output (we do not take into account<a name="line.471"></a>
-<span class="sourceLineNo">472</span>                  // file compression yet)<a name="line.472"></a>
-<span class="sourceLineNo">473</span>                  long len = mobFileWriter.getPos();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>                  if (len &gt; maxMobFileSize) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>                    commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>                    mobFileWriter = newMobWriter(fd, major);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>                    fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.477"></a>
-<span class="sourceLineNo">478</span>                    mobCells = 0;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>                  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>                }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>              } else {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>                // Not a MOB cell, write it directly to a store file<a name="line.482"></a>
-<span class="sourceLineNo">483</span>                writer.append(c);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>              }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          } else if (c.getTypeByte() != KeyValue.Type.Put.getCode()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>            // Not a major compaction or major with MOB disabled<a name="line.487"></a>
-<span class="sourceLineNo">488</span>            // If the kv type is not put, directly write the cell<a name="line.488"></a>
-<span class="sourceLineNo">489</span>            // to the store file.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            writer.append(c);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } else if (MobUtils.isMobReferenceCell(c)) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            // Not a major MOB compaction, Put MOB reference<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            if (MobUtils.hasValidMobRefCellValue(c)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>              // We do not check mobSizeThreshold during normal compaction,<a name="line.494"></a>
-<span class="sourceLineNo">495</span>              // leaving it to a MOB compaction run<a name="line.495"></a>
-<span class="sourceLineNo">496</span>              Optional&lt;TableName&gt; refTable = MobUtils.getTableName(c);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>              if (refTable.isPresent()) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>                mobRefSet.get().put(refTable.get(), MobUtils.getMobFileName(c));<a name="line.498"></a>
-<span class="sourceLineNo">499</span>                writer.append(c);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>              } else {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>                throw new IOException(String.format("MOB cell did not contain a tablename " +<a name="line.501"></a>
-<span class="sourceLineNo">502</span>                    "tag. should not be possible. see ref guide on mob troubleshooting. " +<a name="line.502"></a>
-<span class="sourceLineNo">503</span>                    "store=%s cell=%s", getStoreInfo(), c));<a name="line.503"></a>
-<span class="sourceLineNo">504</span>              }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>            } else {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>              String errMsg = String.format("Corrupted MOB reference: %s", c.toString());<a name="line.506"></a>
-<span class="sourceLineNo">507</span>              throw new IOException(errMsg);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          } else if (c.getValueLength() &lt;= mobSizeThreshold) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>            // If the value size of a cell is not larger than the threshold, directly write it to<a name="line.510"></a>
-<span class="sourceLineNo">511</span>            // the store file.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            writer.append(c);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            // If the value size of a cell is larger than the threshold, it's regarded as a mob,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            // write this cell to a mob file, and write the path to the store file.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>            mobCells++;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>            // append the original keyValue in the mob file.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>            mobFileWriter.append(c);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>            Cell reference = MobUtils.createMobRefCell(c, fileName, this.mobStore.getRefCellTags());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            // write the cell whose value is the path of a mob file to the store file.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            writer.append(reference);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            cellsCountCompactedToMob++;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            cellsSizeCompactedToMob += c.getValueLength();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>            if (ioOptimizedMode) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>              long len = mobFileWriter.getPos();<a name="line.525"></a>
-<span class="sourceLineNo">526</span>              if (len &gt; maxMobFileSize) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>                commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>                mobFileWriter = newMobWriter(fd, major);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>                fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                mobCells = 0;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>              }<a name="line.531"></a>
-<span class="sourceLineNo">532</span>            }<a name="line.532"></a>
-<span class="sourceLineNo">533</span>          }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>          int len = c.getSerializedSize();<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          ++progress.currentCompactedKVs;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          progress.totalCompactedSize += len;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          bytesWrittenProgressForShippedCall += len;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          if (LOG.isDebugEnabled()) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>            bytesWrittenProgressForLog += len;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>          }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          throughputController.control(compactionName, len);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          if (closeChecker.isSizeLimit(store, len)) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>            progress.cancel();<a name="line.544"></a>
-<span class="sourceLineNo">545</span>            return false;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>          }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>          if (kvs != null &amp;&amp; bytesWrittenProgressForShippedCall &gt; shippedCallSizeLimit) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>            ((ShipperListener) writer).beforeShipped();<a name="line.548"></a>
-<span class="sourceLineNo">549</span>            kvs.shipped();<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            bytesWrittenProgressForShippedCall = 0;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        // Log the progress of long running compactions every minute if<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        // logging at DEBUG level<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        if (LOG.isDebugEnabled()) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>          if ((now - lastMillis) &gt;= COMPACTION_PROGRESS_LOG_INTERVAL) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            String rate = String.format("%.2f",<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              (bytesWrittenProgressForLog / 1024.0) / ((now - lastMillis) / 1000.0));<a name="line.558"></a>
-<span class="sourceLineNo">559</span>            LOG.debug("Compaction progress: {} {}, rate={} KB/sec, throughputController is {}",<a name="line.559"></a>
-<span class="sourceLineNo">560</span>              compactionName, progress, rate, throughputController);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>            lastMillis = now;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>            bytesWrittenProgressForLog = 0;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          }<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        }<a name="line.564"></a>
-<span class="sourceLineNo">565</span>        cells.clear();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      } while (hasMore);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      finished = true;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    } catch (InterruptedException e) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      progress.cancel();<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      throw new InterruptedIOException(<a name="line.570"></a>
-<span class="sourceLineNo">571</span>          "Interrupted while control throughput of compacting " + compactionName);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    } catch (IOException t) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      String msg = "Mob compaction failed for region: " +<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        store.getRegionInfo().getEncodedName();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      throw new IOException(msg, t);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    } finally {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // Clone last cell in the final because writer will append last cell when committing. If<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      // don't clone here and once the scanner get closed, then the memory of last cell will be<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      // released. (HBASE-22582)<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      ((ShipperListener) writer).beforeShipped();<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      throughputController.finish(compactionName);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      if (!finished &amp;&amp; mobFileWriter != null) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        // Remove all MOB references because compaction failed<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        clearThreadLocals();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        // Abort writer<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        LOG.debug("Aborting writer for {} because of a compaction failure, Store {}",<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          mobFileWriter.getPath(), getStoreInfo());<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        abortWriter(mobFileWriter);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>    // Commit last MOB writer<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    mobStore.updateCellsCountCompactedFromMob(cellsCountCompactedFromMob);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    mobStore.updateCellsCountCompactedToMob(cellsCountCompactedToMob);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    mobStore.updateCellsSizeCompactedFromMob(cellsSizeCompactedFromMob);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    mobStore.updateCellsSizeCompactedToMob(cellsSizeCompactedToMob);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    progress.complete();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return true;<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  protected String getStoreInfo() {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    return String.format("[table=%s family=%s region=%s]", store.getTableName().getNameAsString(),<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      store.getColumnFamilyName(), store.getRegionInfo().getEncodedName()) ;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span>  private void clearThreadLocals() {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    mobRefSet.get().clear();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    HashMap&lt;String, Long&gt; map = mobLengthMap.get();<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    if (map != null) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      map.clear();<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  private StoreFileWriter newMobWriter(FileDetails fd, boolean major)<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      throws IOException {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    try {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      StoreFileWriter mobFileWriter = mobStore.createWriterInTmp(new Date(fd.latestPutTs),<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        fd.maxKeyCount, major ? majorCompactionCompression : minorCompactionCompression,<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        store.getRegionInfo().getStartKey(), true);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      LOG.debug("New MOB writer created={} store={}", mobFileWriter.getPath().getName(),<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        getStoreInfo());<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      // Add reference we get for compact MOB<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      mobRefSet.get().put(store.getTableName(), mobFileWriter.getPath().getName());<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      return mobFileWriter;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    } catch (IOException e) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      // Bailing out<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      throw new IOException(String.format("Failed to create mob writer, store=%s",<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        getStoreInfo()), e);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>  }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>  private void commitOrAbortMobWriter(StoreFileWriter mobFileWriter, long maxSeqId, long mobCells,<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      boolean major) throws IOException {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    // Commit or abort major mob writer<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    // If IOException happens during below operation, some<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    // MOB files can be committed partially, but corresponding<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    // store file won't be committed, therefore these MOB files<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    // become orphans and will be deleted during next MOB cleaning chore cycle<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    if (mobFileWriter != null) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      LOG.debug("Commit or abort size={} mobCells={} major={} file={}, store={}",<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        mobFileWriter.getPos(), mobCells, major, mobFileWriter.getPath().getName(),<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        getStoreInfo());<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      Path path =<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          MobUtils.getMobFamilyPath(conf, store.getTableName(), store.getColumnFamilyName());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      if (mobCells &gt; 0) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        // If the mob file is not empty, commit it.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        mobFileWriter.appendMetadata(maxSeqId, major, mobCells);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        mobFileWriter.close();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        mobStore.commitFile(mobFileWriter.getPath(), path);<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      } else {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        // If the mob file is empty, delete it instead of committing.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        LOG.debug("Aborting writer for {} because there are no MOB cells, store={}",<a name="line.654"></a>
-<span class="sourceLineNo">655</span>          mobFileWriter.getPath(), getStoreInfo());<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        // Remove MOB file from reference set<a name="line.656"></a>
-<span class="sourceLineNo">657</span>        mobRefSet.get().remove(store.getTableName(), mobFileWriter.getPath().getName());<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        abortWriter(mobFileWriter);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      }<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    } else {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      LOG.debug("Mob file writer is null, skipping commit/abort, store=",<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        getStoreInfo());<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>  @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  protected List&lt;Path&gt; commitWriter(StoreFileWriter writer, FileDetails fd,<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      CompactionRequestImpl request) throws IOException {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    List&lt;Path&gt; newFiles = Lists.newArrayList(writer.getPath());<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    writer.appendMetadata(fd.maxSeqId, request.isAllFiles(), request.getFiles());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    writer.appendMobMetadata(mobRefSet.get());<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    writer.close();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    clearThreadLocals();<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    return newFiles;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>}<a name="line.678"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /*<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * Disable IO mode. IO mode can be forcefully disabled if compactor finds<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * old MOB file (pre-distributed compaction). This means that migration has not<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * been completed yet. During data migration (upgrade) process only general compaction<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * is allowed.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   *<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  static ThreadLocal&lt;Boolean&gt; disableIO = new ThreadLocal&lt;Boolean&gt;() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    protected Boolean initialValue() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return Boolean.FALSE;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  };<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  /*<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * Map : MOB file name - file length Can be expensive for large amount of MOB files.<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  static ThreadLocal&lt;HashMap&lt;String, Long&gt;&gt; mobLengthMap =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    new ThreadLocal&lt;HashMap&lt;String, Long&gt;&gt;() {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      @Override<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      protected HashMap&lt;String, Long&gt; initialValue() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        return new HashMap&lt;String, Long&gt;();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    };<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private final InternalScannerFactory scannerFactory = new InternalScannerFactory() {<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    @Override<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    public ScanType getScanType(CompactionRequestImpl request) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      return request.isAllFiles() ? COMPACT_DROP_DELETES : COMPACT_RETAIN_DELETES;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    @Override<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public InternalScanner createScanner(ScanInfo scanInfo, List&lt;StoreFileScanner&gt; scanners,<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        ScanType scanType, FileDetails fd, long smallestReadPoint) throws IOException {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return new StoreScanner(store, scanInfo, scanners, scanType, smallestReadPoint,<a name="line.141"></a>
+<span class="sourceLineNo">142</span>          fd.earliestPutTs);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  };<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private final CellSinkFactory&lt;StoreFileWriter&gt; writerFactory =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      new CellSinkFactory&lt;StoreFileWriter&gt;() {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        public StoreFileWriter createWriter(InternalScanner scanner,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>            org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails fd,<a name="line.150"></a>
+<span class="sourceLineNo">151</span>            boolean shouldDropBehind, boolean major) throws IOException {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>          // make this writer with tags always because of possible new cells with tags.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          return store.createWriterInTmp(fd.maxKeyCount,<a name="line.153"></a>
+<span class="sourceLineNo">154</span>            major ? majorCompactionCompression : minorCompactionCompression,<a name="line.154"></a>
+<span class="sourceLineNo">155</span>            true, true, true, shouldDropBehind);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      };<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public DefaultMobStoreCompactor(Configuration conf, HStore store) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    super(conf, store);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // The mob cells reside in the mob-enabled column family which is held by HMobStore.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // During the compaction, the compactor reads the cells from the mob files and<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // probably creates new mob files. All of these operations are included in HMobStore,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // so we need to cast the Store to HMobStore.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    if (!(store instanceof HMobStore)) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      throw new IllegalArgumentException("The store " + store + " is not a HMobStore");<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    this.mobStore = (HMobStore) store;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.mobSizeThreshold = store.getColumnFamilyDescriptor().getMobThreshold();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    this.ioOptimizedMode = conf.get(MobConstants.MOB_COMPACTION_TYPE_KEY,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      MobConstants.DEFAULT_MOB_COMPACTION_TYPE).<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        equals(MobConstants.OPTIMIZED_MOB_COMPACTION_TYPE);<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public List&lt;Path&gt; compact(CompactionRequestImpl request,<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      ThroughputController throughputController, User user) throws IOException {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    String tableName = store.getTableName().toString();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    String regionName = store.getRegionInfo().getRegionNameAsString();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    String familyName = store.getColumnFamilyName();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    LOG.info("MOB compaction: major={} isAll={} priority={} throughput controller={}" +<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      " table={} cf={} region={}",<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      request.isMajor(), request.isAllFiles(), request.getPriority(),<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      throughputController, tableName, familyName, regionName);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    if (request.getPriority() == HStore.PRIORITY_USER) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      userRequest.set(Boolean.TRUE);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    } else {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      userRequest.set(Boolean.FALSE);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    LOG.debug("MOB compaction table={} cf={} region={} files: {}", tableName, familyName,<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      regionName, request.getFiles());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // Check if I/O optimized MOB compaction<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (ioOptimizedMode) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (request.isMajor() &amp;&amp; request.getPriority() == HStore.PRIORITY_USER) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        try {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          final SetMultimap&lt;TableName, String&gt; mobRefs = request.getFiles().stream()<a name="line.197"></a>
+<span class="sourceLineNo">198</span>              .map(file -&gt; {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>                byte[] value = file.getMetadataValue(HStoreFile.MOB_FILE_REFS);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>                ImmutableSetMultimap.Builder&lt;TableName, String&gt; builder;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>                if (value == null) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>                  builder = ImmutableSetMultimap.builder();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>                } else {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>                  try {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>                    builder = MobUtils.deserializeMobFileRefs(value);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>                  } catch (RuntimeException exception) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>                    throw new RuntimeException("failure getting mob references for hfile " + file,<a name="line.207"></a>
+<span class="sourceLineNo">208</span>                        exception);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>                  }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>                }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>                return builder;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>              }).reduce((a, b) -&gt; a.putAll(b.build())).orElseGet(ImmutableSetMultimap::builder)<a name="line.212"></a>
+<span class="sourceLineNo">213</span>              .build();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          //reset disableIO<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          disableIO.set(Boolean.FALSE);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          if (!mobRefs.isEmpty()) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            calculateMobLengthMap(mobRefs);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.info("Table={} cf={} region={}. I/O optimized MOB compaction. "+<a name="line.219"></a>
+<span class="sourceLineNo">220</span>              "Total referenced MOB files: {}", tableName, familyName, regionName, mobRefs.size());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        } catch (RuntimeException exception) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          throw new IOException("Failed to get list of referenced hfiles for request " + request,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>              exception);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return compact(request, scannerFactory, writerFactory, throughputController, user);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param mobRefs multimap of original table name -&gt; mob hfile<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  private void calculateMobLengthMap(SetMultimap&lt;TableName, String&gt; mobRefs) throws IOException {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    FileSystem fs = store.getFileSystem();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    HashMap&lt;String, Long&gt; map = mobLengthMap.get();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    map.clear();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    for (Entry&lt;TableName, String&gt; reference : mobRefs.entries()) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      final TableName table = reference.getKey();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      final String mobfile = reference.getValue();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      if (MobFileName.isOldMobFileName(mobfile)) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        disableIO.set(Boolean.TRUE);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      List&lt;Path&gt; locations = mobStore.getLocations(table);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      for (Path p : locations) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        try {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          FileStatus st = fs.getFileStatus(new Path(p, mobfile));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          long size = st.getLen();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          LOG.debug("Referenced MOB file={} size={}", mobfile, size);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          map.put(mobfile, size);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          break;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } catch (FileNotFoundException exception) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          LOG.debug("Mob file {} was not in location {}. May have other locations to try.", mobfile,<a name="line.253"></a>
+<span class="sourceLineNo">254</span>              p);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        }<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      if (!map.containsKey(mobfile)) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        throw new FileNotFoundException("Could not find mob file " + mobfile + " in the list of " +<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            "expected locations: " + locations);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  /**<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * Performs compaction on a column family with the mob flag enabled. This works only when MOB<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * compaction is explicitly requested (by User), or by Master There are two modes of a MOB<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * compaction:&lt;br&gt;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * &lt;p&gt;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * &lt;ul&gt;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * &lt;li&gt;1. Full mode - when all MOB data for a region is compacted into a single MOB file.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * &lt;li&gt;2. I/O optimized mode - for use cases with no or infrequent updates/deletes of a &lt;br&gt;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * MOB data. The main idea behind i/o optimized compaction is to limit maximum size of a MOB file<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * produced during compaction and to limit I/O write/read amplification.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * &lt;/ul&gt;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * The basic algorithm of compaction is the following: &lt;br&gt;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * 1. If the Put cell has a mob reference tag, the cell's value is the path of the mob file.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * &lt;ol&gt;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * &lt;li&gt;If the value size of a cell is larger than the threshold, this cell is regarded as a mob,<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * directly copy the (with mob tag) cell into the new store file.&lt;/li&gt;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * &lt;li&gt;Otherwise, retrieve the mob cell from the mob file, and writes a copy of the cell into the<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * new store file.&lt;/li&gt;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * &lt;/ol&gt;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * 2. If the Put cell doesn't have a reference tag.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * &lt;ol&gt;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   * &lt;li&gt;If the value size of a cell is larger than the threshold, this cell is regarded as a mob,<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * write this cell to a mob file, and write the path of this mob file to the store file.&lt;/li&gt;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * &lt;li&gt;Otherwise, directly write this cell into the store file.&lt;/li&gt;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * &lt;/ol&gt;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * @param fd File details<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * @param scanner Where to read from.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * @param writer Where to write to.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * @param smallestReadPoint Smallest read point.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * @param cleanSeqId When true, remove seqId(used to be mvcc) value which is &lt;= smallestReadPoint<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * @param throughputController The compaction throughput controller.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * @param major Is a major compaction.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * @param numofFilesToCompact the number of files to compact<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * @return Whether compaction ended; false if it was interrupted for any reason.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  @Override<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  protected boolean performCompaction(FileDetails fd, InternalScanner scanner, CellSink writer,<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      long smallestReadPoint, boolean cleanSeqId, ThroughputController throughputController,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      boolean major, int numofFilesToCompact) throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    long bytesWrittenProgressForLog = 0;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    long bytesWrittenProgressForShippedCall = 0;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    // Clear old mob references<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    mobRefSet.get().clear();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    boolean isUserRequest = userRequest.get();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    boolean compactMOBs = major &amp;&amp; isUserRequest;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    boolean discardMobMiss = conf.getBoolean(MobConstants.MOB_UNSAFE_DISCARD_MISS_KEY,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      MobConstants.DEFAULT_MOB_DISCARD_MISS);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (discardMobMiss) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      LOG.warn("{}=true. This is unsafe setting recommended only when first upgrading to a version"+<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        " with the distributed mob compaction feature on a cluster that has experienced MOB data " +<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        "corruption.", MobConstants.MOB_UNSAFE_DISCARD_MISS_KEY);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    long maxMobFileSize = conf.getLong(MobConstants.MOB_COMPACTION_MAX_FILE_SIZE_KEY,<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      MobConstants.DEFAULT_MOB_COMPACTION_MAX_FILE_SIZE);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    boolean ioOptimizedMode = this.ioOptimizedMode &amp;&amp; !disableIO.get();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    LOG.info("Compact MOB={} optimized configured={} optimized enabled={} maximum MOB file size={}"<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      + " major={} store={}", compactMOBs,<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      this.ioOptimizedMode, ioOptimizedMode, maxMobFileSize, major, getStoreInfo());<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    // Since scanner.next() can return 'false' but still be delivering data,<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    // we have to use a do/while loop.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    List&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    // Limit to "hbase.hstore.compaction.kv.max" (default 10) to avoid OOME<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    long lastMillis = 0;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    if (LOG.isDebugEnabled()) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      lastMillis = currentTime;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    CloseChecker closeChecker = new CloseChecker(conf, currentTime);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String compactionName = ThroughputControlUtil.getNameForThrottling(store, "compaction");<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    long now = 0;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    boolean hasMore;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    byte[] fileName = null;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    StoreFileWriter mobFileWriter = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    /*<a name="line.337"></a>
+<span class="sourceLineNo">338</span>     * mobCells are used only to decide if we need to commit or abort current MOB output file.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>     */<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    long mobCells = 0;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    long cellsCountCompactedToMob = 0, cellsCountCompactedFromMob = 0;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    long cellsSizeCompactedToMob = 0, cellsSizeCompactedFromMob = 0;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    boolean finished = false;<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    ScannerContext scannerContext =<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        ScannerContext.newBuilder().setBatchLimit(compactionKVMax).build();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    throughputController.start(compactionName);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    KeyValueScanner kvs = (scanner instanceof KeyValueScanner) ? (KeyValueScanner) scanner : null;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    long shippedCallSizeLimit =<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        (long) numofFilesToCompact * this.store.getColumnFamilyDescriptor().getBlocksize();<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    Cell mobCell = null;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    try {<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>      mobFileWriter = newMobWriter(fd, major);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>      do {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        hasMore = scanner.next(cells, scannerContext);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        currentTime = EnvironmentEdgeManager.currentTime();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        if (LOG.isDebugEnabled()) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          now = currentTime;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        if (closeChecker.isTimeLimit(store, currentTime)) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          progress.cancel();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          return false;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        for (Cell c : cells) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          if (compactMOBs) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>            if (MobUtils.isMobReferenceCell(c)) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>              String fName = MobUtils.getMobFileName(c);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>              // Added to support migration<a name="line.372"></a>
+<span class="sourceLineNo">373</span>              try {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>                mobCell = mobStore.resolve(c, true, false).getCell();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>              } catch (DoNotRetryIOException e) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>                if (discardMobMiss &amp;&amp; e.getCause() != null<a name="line.376"></a>
+<span class="sourceLineNo">377</span>                  &amp;&amp; e.getCause() instanceof FileNotFoundException) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>                  LOG.error("Missing MOB cell: file={} not found cell={}", fName, c);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>                  continue;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>                } else {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>                  throw e;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>                }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>              }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>              if (discardMobMiss &amp;&amp; mobCell.getValueLength() == 0) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                LOG.error("Missing MOB cell value: file={} mob cell={} cell={}", fName,<a name="line.386"></a>
+<span class="sourceLineNo">387</span>                  mobCell, c);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>                continue;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>              } else if (mobCell.getValueLength() == 0) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                String errMsg = String.format("Found 0 length MOB cell in a file=%s mob cell=%s "<a name="line.390"></a>
+<span class="sourceLineNo">391</span>                    + " cell=%s",<a name="line.391"></a>
+<span class="sourceLineNo">392</span>                  fName, mobCell, c);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>                throw new IOException(errMsg);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>              }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>              if (mobCell.getValueLength() &gt; mobSizeThreshold) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>                // put the mob data back to the MOB store file<a name="line.397"></a>
+<span class="sourceLineNo">398</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.398"></a>
+<span class="sourceLineNo">399</span>                if (!ioOptimizedMode) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>                  mobFileWriter.append(mobCell);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>                  mobCells++;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>                  writer.append(<a name="line.402"></a>
+<span class="sourceLineNo">403</span>                    MobUtils.createMobRefCell(mobCell, fileName, this.mobStore.getRefCellTags()));<a name="line.403"></a>
+<span class="sourceLineNo">404</span>                } else {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>                  // I/O optimized mode<a name="line.405"></a>
+<span class="sourceLineNo">406</span>                  // Check if MOB cell origin file size is<a name="line.406"></a>
+<span class="sourceLineNo">407</span>                  // greater than threshold<a name="line.407"></a>
+<span class="sourceLineNo">408</span>                  Long size = mobLengthMap.get().get(fName);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>                  if (size == null) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                    // FATAL error (we should never get here though), abort compaction<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                    // This error means that meta section of store file does not contain<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                    // MOB file, which has references in at least one cell from this store file<a name="line.412"></a>
+<span class="sourceLineNo">413</span>                    String msg = String.format(<a name="line.413"></a>
+<span class="sourceLineNo">414</span>                      "Found an unexpected MOB file during compaction %s, aborting compaction %s",<a name="line.414"></a>
+<span class="sourceLineNo">415</span>                      fName, getStoreInfo());<a name="line.415"></a>
+<span class="sourceLineNo">416</span>                    throw new IOException(msg);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>                  }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>                  // Can not be null<a name="line.418"></a>
+<span class="sourceLineNo">419</span>                  if (size &lt; maxMobFileSize) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>                    // If MOB cell origin file is below threshold<a name="line.420"></a>
+<span class="sourceLineNo">421</span>                    // it is get compacted<a name="line.421"></a>
+<span class="sourceLineNo">422</span>                    mobFileWriter.append(mobCell);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>                    // Update number of mobCells in a current mob writer<a name="line.423"></a>
+<span class="sourceLineNo">424</span>                    mobCells++;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>                    writer.append(<a name="line.425"></a>
+<span class="sourceLineNo">426</span>                      MobUtils.createMobRefCell(mobCell, fileName, this.mobStore.getRefCellTags()));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>                    // Update total size of the output (we do not take into account<a name="line.427"></a>
+<span class="sourceLineNo">428</span>                    // file compression yet)<a name="line.428"></a>
+<span class="sourceLineNo">429</span>                    long len = mobFileWriter.getPos();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>                    if (len &gt; maxMobFileSize) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>                      LOG.debug("Closing output MOB File, length={} file={}, store={}", len,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>                        mobFileWriter.getPath().getName(), getStoreInfo());<a name="line.432"></a>
+<span class="sourceLineNo">433</span>                      commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>                      mobFileWriter = newMobWriter(fd, major);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>                      fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>                      mobCells = 0;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>                    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span>                  } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>                    // We leave large MOB file as is (is not compacted),<a name="line.439"></a>
+<span class="sourceLineNo">440</span>                    // then we update set of MOB file references<a name="line.440"></a>
+<span class="sourceLineNo">441</span>                    // and append mob cell directly to the store's writer<a name="line.441"></a>
+<span class="sourceLineNo">442</span>                    Optional&lt;TableName&gt; refTable = MobUtils.getTableName(c);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>                    if (refTable.isPresent()) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>                      mobRefSet.get().put(refTable.get(), fName);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>                      writer.append(c);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>                    } else {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>                      throw new IOException(String.format("MOB cell did not contain a tablename " +<a name="line.447"></a>
+<span class="sourceLineNo">448</span>                          "tag. should not be possible. see ref guide on mob troubleshooting. " +<a name="line.448"></a>
+<span class="sourceLineNo">449</span>                          "store=%s cell=%s", getStoreInfo(), c));<a name="line.449"></a>
+<span class="sourceLineNo">450</span>                    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>                  }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>                }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>              } else {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>                // If MOB value is less than threshold, append it directly to a store file<a name="line.454"></a>
+<span class="sourceLineNo">455</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.455"></a>
+<span class="sourceLineNo">456</span>                writer.append(mobCell);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>                cellsCountCompactedFromMob++;<a name="line.457"></a>
+<span class="sourceLineNo">458</span>                cellsSizeCompactedFromMob += mobCell.getValueLength();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            } else {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>              // Not a MOB reference cell<a name="line.461"></a>
+<span class="sourceLineNo">462</span>              int size = c.getValueLength();<a name="line.462"></a>
+<span class="sourceLineNo">463</span>              if (size &gt; mobSizeThreshold) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>                // This MOB cell comes from a regular store file<a name="line.464"></a>
+<span class="sourceLineNo">465</span>                // therefore we store it into original mob output<a name="line.465"></a>
+<span class="sourceLineNo">466</span>                mobFileWriter.append(c);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>                writer<a name="line.467"></a>
+<span class="sourceLineNo">468</span>                    .append(MobUtils.createMobRefCell(c, fileName, this.mobStore.getRefCellTags()));<a name="line.468"></a>
+<span class="sourceLineNo">469</span>                mobCells++;<a name="line.469"></a>
+<span class="sourceLineNo">470</span>                cellsCountCompactedToMob++;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>                cellsSizeCompactedToMob += c.getValueLength();<a name="line.471"></a>
+<span class="sourceLineNo">472</span>                if (ioOptimizedMode) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>                  // Update total size of the output (we do not take into account<a name="line.473"></a>
+<span class="sourceLineNo">474</span>                  // file compression yet)<a name="line.474"></a>
+<span class="sourceLineNo">475</span>                  long len = mobFileWriter.getPos();<a name="line.475"></a>
+<span class="sourceLineNo">476</span>                  if (len &gt; maxMobFileSize) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>                    commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>                    mobFileWriter = newMobWriter(fd, major);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>                    fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>                    mobCells = 0;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>                  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>                }<a name="line.482"></a>
+<span class="sourceLineNo">483</span>              } else {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>                // Not a MOB cell, write it directly to a store file<a name="line.484"></a>
+<span class="sourceLineNo">485</span>                writer.append(c);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>              }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>            }<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          } else if (c.getTypeByte() != KeyValue.Type.Put.getCode()) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>            // Not a major compaction or major with MOB disabled<a name="line.489"></a>
+<span class="sourceLineNo">490</span>            // If the kv type is not put, directly write the cell<a name="line.490"></a>
+<span class="sourceLineNo">491</span>            // to the store file.<a name="line.491"></a>
+<span class="sourceLineNo">492</span>            writer.append(c);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          } else if (MobUtils.isMobReferenceCell(c)) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>            // Not a major MOB compaction, Put MOB reference<a name="line.494"></a>
+<span class="sourceLineNo">495</span>            if (MobUtils.hasValidMobRefCellValue(c)) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>              // We do not check mobSizeThreshold during normal compaction,<a name="line.496"></a>
+<span class="sourceLineNo">497</span>              // leaving it to a MOB compaction run<a name="line.497"></a>
+<span class="sourceLineNo">498</span>              Optional&lt;TableName&gt; refTable = MobUtils.getTableName(c);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>              if (refTable.isPresent()) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>                mobRefSet.get().put(refTable.get(), MobUtils.getMobFileName(c));<a name="line.500"></a>
+<span class="sourceLineNo">501</span>                writer.append(c);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>              } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>                throw new IOException(String.format("MOB cell did not contain a tablename " +<a name="line.503"></a>
+<span class="sourceLineNo">504</span>                    "tag. should not be possible. see ref guide on mob troubleshooting. " +<a name="line.504"></a>
+<span class="sourceLineNo">505</span>                    "store=%s cell=%s", getStoreInfo(), c));<a name="line.505"></a>
+<span class="sourceLineNo">506</span>              }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>            } else {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>              String errMsg = String.format("Corrupted MOB reference: %s", c.toString());<a name="line.508"></a>
+<span class="sourceLineNo">509</span>              throw new IOException(errMsg);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            }<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          } else if (c.getValueLength() &lt;= mobSizeThreshold) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>            // If the value size of a cell is not larger than the threshold, directly write it to<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            // the store file.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>            writer.append(c);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          } else {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            // If the value size of a cell is larger than the threshold, it's regarded as a mob,<a name="line.516"></a>
+<span class="sourceLineNo">517</span>            // write this cell to a mob file, and write the path to the store file.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            mobCells++;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>            // append the original keyValue in the mob file.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>            mobFileWriter.append(c);<a name="line.520"></a>
+<span class="sourceLineNo">521</span>            Cell reference = MobUtils.createMobRefCell(c, fileName, this.mobStore.getRefCellTags());<a name="line.521"></a>
+<span class="sourceLineNo">522</span>            // write the cell whose value is the path of a mob file to the store file.<a name="line.522"></a>
+<span class="sourceLineNo">523</span>            writer.append(reference);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>            cellsCountCompactedToMob++;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>            cellsSizeCompactedToMob += c.getValueLength();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>            if (ioOptimizedMode) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>              long len = mobFileWriter.getPos();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>              if (len &gt; maxMobFileSize) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>                commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>                mobFileWriter = newMobWriter(fd, major);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>                fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.531"></a>
+<span class="sourceLineNo">532</span>                mobCells = 0;<a name="line.532"></a>
+<span class="sourceLineNo">533</span>              }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>            }<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>          int len = c.getSerializedSize();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          ++progress.currentCompactedKVs;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          progress.totalCompactedSize += len;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>          bytesWrittenProgressForShippedCall += len;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          if (LOG.isDebugEnabled()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>            bytesWrittenProgressForLog += len;<a name="line.542"></a>
+<span class="sourceLineNo">543</span>          }<a name="line.543"></a>
+<span class="sourceLineNo">544</span>          throughputController.control(compactionName, len);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          if (closeChecker.isSizeLimit(store, len)) {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>            progress.cancel();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>            return false;<a name="line.547"></a>
+<span class="sourceLineNo">548</span>          }<a name="line.548"></a>
+<span class="sourceLineNo">549</span>          if (kvs != null &amp;&amp; bytesWrittenProgressForShippedCall &gt; shippedCallSizeLimit) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>            ((ShipperListener) writer).beforeShipped();<a name="line.550"></a>
+<span class="sourceLineNo">551</span>            kvs.shipped();<a name="line.551"></a>
+<span class="sourceLineNo">552</span>            bytesWrittenProgressForShippedCall = 0;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>          }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>        }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>        // Log the progress of long running compactions every minute if<a name="line.555"></a>
+<span class="sourceLineNo">556</span>        // logging at DEBUG level<a name="line.556"></a>
+<span class="sourceLineNo">557</span>        if (LOG.isDebugEnabled()) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>          if ((now - lastMillis) &gt;= COMPACTION_PROGRESS_LOG_INTERVAL) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>            String rate = String.format("%.2f",<a name="line.559"></a>
+<span class="sourceLineNo">560</span>              (bytesWrittenProgressForLog / 1024.0) / ((now - lastMillis) / 1000.0));<a name="line.560"></a>
+<span class="sourceLineNo">561</span>            LOG.debug("Compaction progress: {} {}, rate={} KB/sec, throughputController is {}",<a name="line.561"></a>
+<span class="sourceLineNo">562</span>              compactionName, progress, rate, throughputController);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>            lastMillis = now;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>            bytesWrittenProgressForLog = 0;<a name="line.564"></a>
+<span class="sourceLineNo">565</span>          }<a name="line.565"></a>
+<span class="sourceLineNo">566</span>        }<a name="line.566"></a>
+<span class="sourceLineNo">567</span>        cells.clear();<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      } while (hasMore);<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      finished = true;<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    } catch (InterruptedException e) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      progress.cancel();<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      throw new InterruptedIOException(<a name="line.572"></a>
+<span class="sourceLineNo">573</span>          "Interrupted while control throughput of compacting " + compactionName);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    } catch (IOException t) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      String msg = "Mob compaction failed for region: " +<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        store.getRegionInfo().getEncodedName();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      throw new IOException(msg, t);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    } finally {<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      // Clone last cell in the final because writer will append last cell when committing. If<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      // don't clone here and once the scanner get closed, then the memory of last cell will be<a name="line.580"></a>
+<span class="sourceLineNo">581</span>      // released. (HBASE-22582)<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      ((ShipperListener) writer).beforeShipped();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      throughputController.finish(compactionName);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      if (!finished &amp;&amp; mobFileWriter != null) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        // Remove all MOB references because compaction failed<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        clearThreadLocals();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        // Abort writer<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        LOG.debug("Aborting writer for {} because of a compaction failure, Store {}",<a name="line.588"></a>
+<span class="sourceLineNo">589</span>          mobFileWriter.getPath(), getStoreInfo());<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        abortWriter(mobFileWriter);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span>    // Commit last MOB writer<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    commitOrAbortMobWriter(mobFileWriter, fd.maxSeqId, mobCells, major);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    mobStore.updateCellsCountCompactedFromMob(cellsCountCompactedFromMob);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    mobStore.updateCellsCountCompactedToMob(cellsCountCompactedToMob);<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    mobStore.updateCellsSizeCompactedFromMob(cellsSizeCompactedFromMob);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    mobStore.updateCellsSizeCompactedToMob(cellsSizeCompactedToMob);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    progress.complete();<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return true;<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  protected String getStoreInfo() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return String.format("[table=%s family=%s region=%s]", store.getTableName().getNameAsString(),<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      store.getColumnFamilyName(), store.getRegionInfo().getEncodedName()) ;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>  private void clearThreadLocals() {<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    mobRefSet.get().clear();<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    HashMap&lt;String, Long&gt; map = mobLengthMap.get();<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    if (map != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      map.clear();<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>  private StoreFileWriter newMobWriter(FileDetails fd, boolean major)<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      throws IOException {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      StoreFileWriter mobFileWriter = mobStore.createWriterInTmp(new Date(fd.latestPutTs),<a name="line.620"></a>
+<span class="sourceLineNo">621</span>        fd.maxKeyCount, major ? majorCompactionCompression : minorCompactionCompression,<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        store.getRegionInfo().getStartKey(), true);<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      LOG.debug("New MOB writer created={} store={}", mobFileWriter.getPath().getName(),<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        getStoreInfo());<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      // Add reference we get for compact MOB<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      mobRefSet.get().put(store.getTableName(), mobFileWriter.getPath().getName());<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return mobFileWriter;<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    } catch (IOException e) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      // Bailing out<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      throw new IOException(String.format("Failed to create mob writer, store=%s",<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        getStoreInfo()), e);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  private void commitOrAbortMobWriter(StoreFileWriter mobFileWriter, long maxSeqId, long mobCells,<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      boolean major) throws IOException {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    // Commit or abort major mob writer<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    // If IOException happens during below operation, some<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    // MOB files can be committed partially, but corresponding<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    // store file won't be committed, therefore these MOB files<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    // become orphans and will be deleted during next MOB cleaning chore cycle<a name="line.641"></a>
+<span class="sourceLineNo">642</span><a name="line.642"></a>
+<span class="sourceLineNo">643</span>    if (mobFileWriter != null) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      LOG.debug("Commit or abort size={} mobCells={} major={} file={}, store={}",<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        mobFileWriter.getPos(), mobCells, major, mobFileWriter.getPath().getName(),<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        getStoreInfo());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      Path path =<a name="line.647"></a>
+<span class="sourceLineNo">648</span>          MobUtils.getMobFamilyPath(conf, store.getTableName(), store.getColumnFamilyName());<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      if (mobCells &gt; 0) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        // If the mob file is not empty, commit it.<a name="line.650"></a>
+<span class="sourceLineNo">651</span>        mobFileWriter.appendMetadata(maxSeqId, major, mobCells);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        mobFileWriter.close();<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        mobStore.commitFile(mobFileWriter.getPath(), path);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>        // If the mob file is empty, delete it instead of committing.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>        LOG.debug("Aborting writer for {} because there are no MOB cells, store={}",<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          mobFileWriter.getPath(), getStoreInfo());<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        // Remove MOB file from reference set<a name="line.658"></a>
+<span class="sourceLineNo">659</span>        mobRefSet.get().remove(store.getTableName(), mobFileWriter.getPath().getName());<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        abortWriter(mobFileWriter);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    } else {<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      LOG.debug("Mob file writer is null, skipping commit/abort, store=",<a name="line.663"></a>
+<span class="sourceLineNo">664</span>        getStoreInfo());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span><a name="line.668"></a>
+<span class="sourceLineNo">669</span>  @Override<a name="line.669"></a>
+<span class="sourceLineNo">670</span>  protected List&lt;Path&gt; commitWriter(StoreFileWriter writer, FileDetails fd,<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      CompactionRequestImpl request) throws IOException {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    List&lt;Path&gt; newFiles = Lists.newArrayList(writer.getPath());<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    writer.appendMetadata(fd.maxSeqId, request.isAllFiles(), request.getFiles());<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    writer.appendMobMetadata(mobRefSet.get());<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    writer.close();<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    clearThreadLocals();<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    return newFiles;<a name="line.677"></a>
+<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span>}<a name="line.680"></a>
 
 
 
diff --git a/downloads.html b/downloads.html
index 5ae3902..c45e6fa 100644
--- a/downloads.html
+++ b/downloads.html
@@ -275,28 +275,28 @@
 <tr class="a">
       
 <td style="test-align: left">
-        1.7.0
+        1.7.1
       </td>
       
 <td style="test-align: left">
-        2021/06/12
+        2021/07/21
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://downloads.apache.org/hbase/1.7.0/compat-check-report.html">1.6.0 vs 1.7.0</a>
+        <a class="externalLink" href="https://downloads.apache.org/hbase/1.7.1/api_compare_1.7.0_to_1.7.1-RC0.html">1.7.0 vs 1.7.1</a>
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://github.com/apache/hbase/blob/rel/1.7.0/CHANGES.txt">Changes</a>
+        <a class="externalLink" href="https://github.com/apache/hbase/blob/rel/1.7.1/CHANGES.txt">Changes</a>
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://issues.apache.org/jira/projects/HBASE/versions/12346510">Release Notes</a>
+        <a class="externalLink" href="https://issues.apache.org/jira/projects/HBASE/versions/12350241">Release Notes</a>
       </td>
       
 <td style="test-align: left">
-        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/1.7.0/hbase-1.7.0-src.tar.gz">src</a> (<a class="externalLink" href="https://apache.org/dist/hbase/1.7.0/hbase-1.7.0-src.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/1.7.0/hbase-1.7.0-src.tar.gz.asc">asc</a>) <br />
-        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/1.7.0/hbase-1.7.0-bin.tar.gz">bin</a> (<a class="externalLink" href="https://apache.org/dist/hbase/1.7.0/hbase-1.7.0-bin.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/1.7.0/hbase-1.7.0-bin.tar.gz.asc">asc</a>)
+        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/1.7.1/hbase-1.7.1-src.tar.gz">src</a> (<a class="externalLink" href="https://apache.org/dist/hbase/1.7.1/hbase-1.7.1-src.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/1.7.1/hbase-1.7.1-src.tar.gz.asc">asc</a>) <br />
+        <a class="externalLink" href="https://www.apache.org/dyn/closer.lua/hbase/1.7.1/hbase-1.7.1-bin.tar.gz">bin</a> (<a class="externalLink" href="https://apache.org/dist/hbase/1.7.1/hbase-1.7.1-bin.tar.gz.sha512">sha512</a> <a class="externalLink" href="https://apache.org/dist/hbase/1.7.1/hbase-1.7.1-bin.tar.gz.asc">asc</a>)
       </td>
       
 <td></td>
@@ -457,7 +457,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 9e0a27f..e50924e 100644
--- a/export_control.html
+++ b/export_control.html
@@ -186,7 +186,7 @@ for more details.</p>
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 0920e4e..c15bf34 100644
--- a/index.html
+++ b/index.html
@@ -264,7 +264,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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-tracking.html b/issue-tracking.html
index 5d5aff2..6eaec9d 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -158,7 +158,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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/mail-lists.html b/mail-lists.html
index 91b733f..084b29f 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -204,7 +204,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 07c6f34..9fb3ef8 100644
--- a/metrics.html
+++ b/metrics.html
@@ -314,7 +314,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 c434783..4692787 100644
--- a/old_news.html
+++ b/old_news.html
@@ -305,7 +305,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 c3d2b0c..c5d9484 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -310,7 +310,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 ba4bc56..f20c460 100644
--- a/plugins.html
+++ b/plugins.html
@@ -237,7 +237,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 5376a01..bcd3347 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -639,7 +639,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 017f12a..78f67ab 100644
--- a/project-info.html
+++ b/project-info.html
@@ -199,7 +199,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 adddbf4..c091418 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -175,7 +175,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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-summary.html b/project-summary.html
index 0eac9f5..0fcad79 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -201,7 +201,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 33dceb3..2e7289a 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -163,7 +163,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 bfe9638..ece06a3 100644
--- a/replication.html
+++ b/replication.html
@@ -158,7 +158,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 a4e373e..3cda053 100644
--- a/resources.html
+++ b/resources.html
@@ -186,7 +186,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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/source-repository.html b/source-repository.html
index 5a850af..de41439 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -169,7 +169,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 deffe91..c145ab3 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -188,7 +188,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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 e366a1b..a17419a 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -379,7 +379,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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-list.html b/team-list.html
index 4ac3965..3714794 100644
--- a/team-list.html
+++ b/team-list.html
@@ -732,7 +732,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-21</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-22</li>
 </p>
         </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/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 7f8e7d5..a2b4556 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -57305,6 +57305,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testContainsRange--">testContainsRange()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testContainsRangeForMetaTable--">testContainsRangeForMetaTable()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html" title="class in org.apache.hadoop.hbase.client">TestRegionInfoBuilder</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testContainsRangeForMetaTable--">testContainsRangeForMetaTable()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionInfo</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionIncrement.html#testContendedAcrossCellsIncrement--">testContendedAcrossCellsIncrement()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionIncrement.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionIncrement</a></dt>
 <dd>
 <div class="block">Have each thread update its own Cell.</div>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html
index ab528b7..2ac273c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.48">TestRegionInfoBuilder</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.49">TestRegionInfoBuilder</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -193,34 +193,38 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testConvert--">testConvert</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testContainsRangeForMetaTable--">testContainsRangeForMetaTable</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testCreateRegionInfoName--">testCreateRegionInfoName</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testConvert--">testConvert</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testLastRegionCompare--">testLastRegionCompare</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testCreateRegionInfoName--">testCreateRegionInfoName</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testMetaTables--">testMetaTables</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testLastRegionCompare--">testLastRegionCompare</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testNewBuilderWithRegionInfo--">testNewBuilderWithRegionInfo</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testMetaTables--">testMetaTables</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testParseName--">testParseName</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testNewBuilderWithRegionInfo--">testNewBuilderWithRegionInfo</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testPb--">testPb</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testParseName--">testParseName</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testPb--">testPb</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#testRegionNameForRegionReplicas--">testRegionNameForRegionReplicas</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
@@ -251,7 +255,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.51">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.52">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -260,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableNameTestRule.html" title="class in org.apache.hadoop.hbase">TableNameTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.55">name</a></pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableNameTestRule.html" title="class in org.apache.hadoop.hbase">TableNameTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.56">name</a></pre>
 </li>
 </ul>
 </li>
@@ -277,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestRegionInfoBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.48">TestRegionInfoBuilder</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.49">TestRegionInfoBuilder</a>()</pre>
 </li>
 </ul>
 </li>
@@ -294,7 +298,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testBuilder</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.58">testBuilder</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.59">testBuilder</a>()</pre>
 </li>
 </ul>
 <a name="testPb--">
@@ -303,7 +307,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testPb</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.85">testPb</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.86">testPb</a>()
             throws org.apache.hadoop.hbase.exceptions.DeserializationException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -317,7 +321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateRegionInfoName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.93">testCreateRegionInfoName</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.94">testCreateRegionInfoName</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -331,7 +335,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testContainsRange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.113">testContainsRange</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.114">testContainsRange</a>()</pre>
+</li>
+</ul>
+<a name="testContainsRangeForMetaTable--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testContainsRangeForMetaTable</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.142">testContainsRangeForMetaTable</a>()</pre>
 </li>
 </ul>
 <a name="testLastRegionCompare--">
@@ -340,7 +353,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testLastRegionCompare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.141">testLastRegionCompare</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.175">testLastRegionCompare</a>()</pre>
 </li>
 </ul>
 <a name="testMetaTables--">
@@ -349,7 +362,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMetaTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.151">testMetaTables</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.185">testMetaTables</a>()</pre>
 </li>
 </ul>
 <a name="testComparator--">
@@ -358,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testComparator</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.156">testComparator</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.190">testComparator</a>()</pre>
 </li>
 </ul>
 <a name="testRegionNameForRegionReplicas--">
@@ -367,7 +380,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionNameForRegionReplicas</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.170">testRegionNameForRegionReplicas</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.204">testRegionNameForRegionReplicas</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -381,7 +394,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testParseName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.199">testParseName</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.233">testParseName</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -395,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testConvert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.226">testConvert</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.260">testConvert</a>()</pre>
 </li>
 </ul>
 <a name="assertRegionNameNotEquals-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -404,7 +417,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>assertRegionNameNotEquals</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.259">assertRegionNameNotEquals</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;expected,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.293">assertRegionNameNotEquals</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;expected,
                                        org.apache.hadoop.hbase.client.RegionInfo&nbsp;actual)</pre>
 </li>
 </ul>
@@ -414,7 +427,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>assertRegionNameEquals</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.264">assertRegionNameEquals</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;expected,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.298">assertRegionNameEquals</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;expected,
                                     org.apache.hadoop.hbase.client.RegionInfo&nbsp;actual)</pre>
 </li>
 </ul>
@@ -424,7 +437,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testNewBuilderWithRegionInfo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.270">testNewBuilderWithRegionInfo</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#line.304">testNewBuilderWithRegionInfo</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index c57de92..3d40d57 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -167,8 +167,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html b/testdevapidocs/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html
index 77af7fe..5cd243c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html
@@ -125,7 +125,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.73">FaultyMobStoreCompactor</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.74">FaultyMobStoreCompactor</a>
 extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <div class="block">This class is used for testing only. The main purpose is to emulate
  random failures during MOB compaction process.
@@ -313,7 +313,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.75">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.76">LOG</a></pre>
 </li>
 </ul>
 <a name="mobCounter">
@@ -322,7 +322,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCounter</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.77">mobCounter</a></pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.78">mobCounter</a></pre>
 </li>
 </ul>
 <a name="totalFailures">
@@ -331,7 +331,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>totalFailures</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.78">totalFailures</a></pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.79">totalFailures</a></pre>
 </li>
 </ul>
 <a name="totalCompactions">
@@ -340,7 +340,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>totalCompactions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.79">totalCompactions</a></pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.80">totalCompactions</a></pre>
 </li>
 </ul>
 <a name="totalMajorCompactions">
@@ -349,7 +349,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>totalMajorCompactions</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.80">totalMajorCompactions</a></pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.81">totalMajorCompactions</a></pre>
 </li>
 </ul>
 <a name="failureProb">
@@ -358,7 +358,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>failureProb</h4>
-<pre>static&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.82">failureProb</a></pre>
+<pre>static&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.83">failureProb</a></pre>
 </li>
 </ul>
 <a name="rnd">
@@ -367,7 +367,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rnd</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.83">rnd</a></pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.84">rnd</a></pre>
 </li>
 </ul>
 </li>
@@ -384,7 +384,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FaultyMobStoreCompactor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.85">FaultyMobStoreCompactor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.86">FaultyMobStoreCompactor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                org.apache.hadoop.hbase.regionserver.HStore&nbsp;store)</pre>
 </li>
 </ul>
@@ -402,7 +402,7 @@ extends org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>performCompaction</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.91">performCompaction</a>(org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails&nbsp;fd,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html#line.92">performCompaction</a>(org.apache.hadoop.hbase.regionserver.compactions.Compactor.FileDetails&nbsp;fd,
                                     org.apache.hadoop.hbase.regionserver.InternalScanner&nbsp;scanner,
                                     org.apache.hadoop.hbase.regionserver.CellSink&nbsp;writer,
                                     long&nbsp;smallestReadPoint,
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index 351f941..0cca046 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -658,19 +658,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ZNodeClusterManager.CmdType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ZNodeClusterManager.CmdType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.Signal.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.Signal</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.HealthSummary.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.HealthSummary</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ZNodeClusterManager.CmdType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ZNodeClusterManager.CmdType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index 4309238..3ce38a7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 221f972..b3d77cd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -241,10 +241,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html
index 5b00c8c..31d9556 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.60">TestRegionInfo</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.61">TestRegionInfo</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -194,59 +194,63 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testConvert--">testConvert</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testContainsRangeForMetaTable--">testContainsRangeForMetaTable</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testCreateHRegionInfoName--">testCreateHRegionInfoName</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testConvert--">testConvert</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsEnd--">testIsEnd</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testCreateHRegionInfoName--">testCreateHRegionInfoName</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsNext--">testIsNext</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsEnd--">testIsEnd</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsOverlap--">testIsOverlap</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsNext--">testIsNext</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsOverlap--">testIsOverlap</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsOverlaps--">testIsOverlaps</a></span>()</code>
 <div class="block">Tests <code>RegionInfo.isOverlap(RegionInfo)</code></div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testIsStart--">testIsStart</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testLastRegionCompare--">testLastRegionCompare</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testMetaTables--">testMetaTables</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testParseName--">testParseName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testPb--">testPb</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testReadAndWriteHRegionInfoFile--">testReadAndWriteHRegionInfoFile</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testRegionDetailsForDisplay--">testRegionDetailsForDisplay</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#testRegionNameForRegionReplicas--">testRegionNameForRegionReplicas</a></span>()</code>&nbsp;</td>
 </tr>
@@ -278,7 +282,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.63">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.64">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -287,7 +291,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.67">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.68">name</a></pre>
 </li>
 </ul>
 </li>
@@ -304,7 +308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.60">TestRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.61">TestRegionInfo</a>()</pre>
 </li>
 </ul>
 </li>
@@ -321,7 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testIsStart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.70">testIsStart</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.71">testIsStart</a>()</pre>
 </li>
 </ul>
 <a name="testIsEnd--">
@@ -330,7 +334,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testIsEnd</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.79">testIsEnd</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.80">testIsEnd</a>()</pre>
 </li>
 </ul>
 <a name="testIsNext--">
@@ -339,7 +343,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testIsNext</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.88">testIsNext</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.89">testIsNext</a>()</pre>
 </li>
 </ul>
 <a name="testIsOverlap--">
@@ -348,7 +352,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testIsOverlap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.101">testIsOverlap</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.102">testIsOverlap</a>()</pre>
 </li>
 </ul>
 <a name="testIsOverlaps--">
@@ -357,7 +361,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testIsOverlaps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.141">testIsOverlaps</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.142">testIsOverlaps</a>()</pre>
 <div class="block">Tests <code>RegionInfo.isOverlap(RegionInfo)</code></div>
 </li>
 </ul>
@@ -367,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testPb</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.170">testPb</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.171">testPb</a>()
             throws org.apache.hadoop.hbase.exceptions.DeserializationException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -381,7 +385,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReadAndWriteHRegionInfoFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.178">testReadAndWriteHRegionInfoFile</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.179">testReadAndWriteHRegionInfoFile</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -397,7 +401,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getModTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.205">getModTime</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r)
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.206">getModTime</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r)
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -411,7 +415,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateHRegionInfoName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.213">testCreateHRegionInfoName</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.214">testCreateHRegionInfoName</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -425,7 +429,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testContainsRange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.237">testContainsRange</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.238">testContainsRange</a>()</pre>
+</li>
+</ul>
+<a name="testContainsRangeForMetaTable--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testContainsRangeForMetaTable</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.267">testContainsRangeForMetaTable</a>()</pre>
 </li>
 </ul>
 <a name="testLastRegionCompare--">
@@ -434,7 +447,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testLastRegionCompare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.266">testLastRegionCompare</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.300">testLastRegionCompare</a>()</pre>
 </li>
 </ul>
 <a name="testMetaTables--">
@@ -443,7 +456,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMetaTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.277">testMetaTables</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.311">testMetaTables</a>()</pre>
 </li>
 </ul>
 <a name="testComparator--">
@@ -452,7 +465,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testComparator</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.283">testComparator</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.317">testComparator</a>()</pre>
 </li>
 </ul>
 <a name="testRegionNameForRegionReplicas--">
@@ -461,7 +474,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionNameForRegionReplicas</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.322">testRegionNameForRegionReplicas</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.356">testRegionNameForRegionReplicas</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -475,7 +488,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testParseName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.350">testParseName</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.384">testParseName</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -489,7 +502,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testConvert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.378">testConvert</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.412">testConvert</a>()</pre>
 </li>
 </ul>
 <a name="testRegionDetailsForDisplay--">
@@ -498,7 +511,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionDetailsForDisplay</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.411">testRegionDetailsForDisplay</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.445">testRegionDetailsForDisplay</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -512,7 +525,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkDescriptiveNameEquality</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.440">checkDescriptiveNameEquality</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;descriptiveNameForDisplay,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.474">checkDescriptiveNameEquality</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;descriptiveNameForDisplay,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;origDesc,
                                           byte[]&nbsp;startKey)</pre>
 </li>
@@ -523,7 +536,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>checkEquality</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.455">checkEquality</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;h,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestRegionInfo.html#line.489">checkEquality</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;h,
                            org.apache.hadoop.conf.Configuration&nbsp;conf)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index d91127c..5725176 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -730,11 +730,11 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCompactionState.StateSource.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCompactionState.StateSource</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index e93b5a6..0df6bab 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -260,11 +260,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadCommonCrawl.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadCommonCrawl.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadCommonCrawl.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadCommonCrawl.Counts</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 1ccfe6b..474e520 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -201,9 +201,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html
index 88246db..c5227e9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html
@@ -34,265 +34,299 @@
 <span class="sourceLineNo">026</span><a name="line.26"></a>
 <span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.TableName;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.TableNameTestRule;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.MD5Hash;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.ClassRule;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.Rule;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.Test;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.experimental.categories.Category;<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>@Category({ ClientTests.class, SmallTests.class })<a name="line.47"></a>
-<span class="sourceLineNo">048</span>public class TestRegionInfoBuilder {<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  @ClassRule<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    HBaseClassTestRule.forClass(TestRegionInfoBuilder.class);<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  @Rule<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  @Test<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public void testBuilder() {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    TableName tn = TableName.valueOf("test");<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    RegionInfoBuilder builder = RegionInfoBuilder.newBuilder(tn);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    byte[] startKey = Bytes.toBytes("a");<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    builder.setStartKey(startKey);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    byte[] endKey = Bytes.toBytes("z");<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    builder.setEndKey(endKey);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    int regionId = 1;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    builder.setRegionId(1);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    int replicaId = 2;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    builder.setReplicaId(replicaId);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    boolean offline = true;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    builder.setOffline(offline);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    boolean isSplit = true;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    builder.setSplit(isSplit);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    RegionInfo ri = builder.build();<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>    assertEquals(tn, ri.getTable());<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    assertArrayEquals(startKey, ri.getStartKey());<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    assertArrayEquals(endKey, ri.getEndKey());<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    assertEquals(regionId, ri.getRegionId());<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    assertEquals(replicaId, ri.getReplicaId());<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    assertEquals(offline, ri.isOffline());<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    assertEquals(isSplit, ri.isSplit());<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  @Test<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public void testPb() throws DeserializationException {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    RegionInfo ri = RegionInfoBuilder.FIRST_META_REGIONINFO;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    byte[] bytes = RegionInfo.toByteArray(ri);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    RegionInfo pbri = RegionInfo.parseFrom(bytes);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    assertTrue(RegionInfo.COMPARATOR.compare(ri, pbri) == 0);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @Test<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public void testCreateRegionInfoName() throws Exception {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    final TableName tn = name.getTableName();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    String startKey = "startkey";<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    final byte[] sk = Bytes.toBytes(startKey);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    String id = "id";<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // old format region name<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    byte[] name = RegionInfo.createRegionName(tn, sk, id, false);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    String nameStr = Bytes.toString(name);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    assertEquals(tn + "," + startKey + "," + id, nameStr);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    // new format region name.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    String md5HashInHex = MD5Hash.getMD5AsHex(name);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    assertEquals(RegionInfo.MD5_HEX_LENGTH, md5HashInHex.length());<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    name = RegionInfo.createRegionName(tn, sk, id, true);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    nameStr = Bytes.toString(name);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    assertEquals(tn + "," + startKey + "," + id + "." + md5HashInHex + ".", nameStr);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  @Test<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public void testContainsRange() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(name.getTableName()).build();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    RegionInfo ri = RegionInfoBuilder.newBuilder(tableDesc.getTableName())<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      .setStartKey(Bytes.toBytes("a")).setEndKey(Bytes.toBytes("g")).build();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    // Single row range at start of region<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    assertTrue(ri.containsRange(Bytes.toBytes("a"), Bytes.toBytes("a")));<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    // Fully contained range<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    assertTrue(ri.containsRange(Bytes.toBytes("b"), Bytes.toBytes("c")));<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // Range overlapping start of region<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    assertTrue(ri.containsRange(Bytes.toBytes("a"), Bytes.toBytes("c")));<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Fully contained single-row range<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    assertTrue(ri.containsRange(Bytes.toBytes("c"), Bytes.toBytes("c")));<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    // Range that overlaps end key and hence doesn't fit<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    assertFalse(ri.containsRange(Bytes.toBytes("a"), Bytes.toBytes("g")));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    // Single row range on end key<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    assertFalse(ri.containsRange(Bytes.toBytes("g"), Bytes.toBytes("g")));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    // Single row range entirely outside<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    assertFalse(ri.containsRange(Bytes.toBytes("z"), Bytes.toBytes("z")));<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // Degenerate range<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    try {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      ri.containsRange(Bytes.toBytes("z"), Bytes.toBytes("a"));<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      fail("Invalid range did not throw IAE");<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    } catch (IllegalArgumentException iae) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>  @Test<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public void testLastRegionCompare() {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(name.getTableName()).build();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    RegionInfo rip = RegionInfoBuilder.newBuilder(tableDesc.getTableName())<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      .setStartKey(Bytes.toBytes("a")).setEndKey(new byte[0]).build();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    RegionInfo ric = RegionInfoBuilder.newBuilder(tableDesc.getTableName())<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      .setStartKey(Bytes.toBytes("a")).setEndKey(Bytes.toBytes("b")).build();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    assertTrue(RegionInfo.COMPARATOR.compare(rip, ric) &gt; 0);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public void testMetaTables() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    assertTrue(RegionInfoBuilder.FIRST_META_REGIONINFO.isMetaRegion());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  @Test<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  public void testComparator() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    final TableName tableName = name.getTableName();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    byte[] empty = new byte[0];<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    RegionInfo older = RegionInfoBuilder.newBuilder(tableName).setStartKey(empty).setEndKey(empty)<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      .setSplit(false).setRegionId(0L).build();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    RegionInfo newer = RegionInfoBuilder.newBuilder(tableName).setStartKey(empty).setEndKey(empty)<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      .setSplit(false).setRegionId(1L).build();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    assertTrue(RegionInfo.COMPARATOR.compare(older, newer) &lt; 0);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    assertTrue(RegionInfo.COMPARATOR.compare(newer, older) &gt; 0);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    assertTrue(RegionInfo.COMPARATOR.compare(older, older) == 0);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    assertTrue(RegionInfo.COMPARATOR.compare(newer, newer) == 0);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  @Test<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public void testRegionNameForRegionReplicas() throws Exception {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    final TableName tn = name.getTableName();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    String startKey = "startkey";<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    final byte[] sk = Bytes.toBytes(startKey);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    String id = "id";<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // assert with only the region name without encoding<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    // primary, replicaId = 0<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    byte[] name = RegionInfo.createRegionName(tn, sk, Bytes.toBytes(id), 0, false);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    String nameStr = Bytes.toString(name);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    assertEquals(tn + "," + startKey + "," + id, nameStr);<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>    // replicaId = 1<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    name = RegionInfo.createRegionName(tn, sk, Bytes.toBytes(id), 1, false);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    nameStr = Bytes.toString(name);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    assertEquals(<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      tn + "," + startKey + "," + id + "_" + String.format(RegionInfo.REPLICA_ID_FORMAT, 1),<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      nameStr);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    // replicaId = max<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    name = RegionInfo.createRegionName(tn, sk, Bytes.toBytes(id), 0xFFFF, false);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    nameStr = Bytes.toString(name);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    assertEquals(<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      tn + "," + startKey + "," + id + "_" + String.format(RegionInfo.REPLICA_ID_FORMAT, 0xFFFF),<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      nameStr);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  @Test<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public void testParseName() throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    final TableName tableName = name.getTableName();<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    byte[] startKey = Bytes.toBytes("startKey");<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    long regionId = EnvironmentEdgeManager.currentTime();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    int replicaId = 42;<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // test without replicaId<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    byte[] regionName = RegionInfo.createRegionName(tableName, startKey, regionId, false);<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    byte[][] fields = RegionInfo.parseRegionName(regionName);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertArrayEquals(Bytes.toString(fields[0]), tableName.getName(), fields[0]);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    assertArrayEquals(Bytes.toString(fields[1]), startKey, fields[1]);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    assertArrayEquals(Bytes.toString(fields[2]), Bytes.toBytes(Long.toString(regionId)), fields[2]);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    assertEquals(3, fields.length);<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // test with replicaId<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    regionName = RegionInfo.createRegionName(tableName, startKey, regionId, replicaId, false);<a name="line.215"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HConstants;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.TableName;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableNameTestRule;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.MD5Hash;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.ClassRule;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Rule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>@Category({ ClientTests.class, SmallTests.class })<a name="line.48"></a>
+<span class="sourceLineNo">049</span>public class TestRegionInfoBuilder {<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  @ClassRule<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    HBaseClassTestRule.forClass(TestRegionInfoBuilder.class);<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  @Rule<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public TableNameTestRule name = new TableNameTestRule();<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @Test<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public void testBuilder() {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    TableName tn = TableName.valueOf("test");<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    RegionInfoBuilder builder = RegionInfoBuilder.newBuilder(tn);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    byte[] startKey = Bytes.toBytes("a");<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    builder.setStartKey(startKey);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    byte[] endKey = Bytes.toBytes("z");<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    builder.setEndKey(endKey);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    int regionId = 1;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    builder.setRegionId(1);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    int replicaId = 2;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    builder.setReplicaId(replicaId);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    boolean offline = true;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    builder.setOffline(offline);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    boolean isSplit = true;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    builder.setSplit(isSplit);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    RegionInfo ri = builder.build();<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>    assertEquals(tn, ri.getTable());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    assertArrayEquals(startKey, ri.getStartKey());<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    assertArrayEquals(endKey, ri.getEndKey());<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    assertEquals(regionId, ri.getRegionId());<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    assertEquals(replicaId, ri.getReplicaId());<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    assertEquals(offline, ri.isOffline());<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    assertEquals(isSplit, ri.isSplit());<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  @Test<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public void testPb() throws DeserializationException {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    RegionInfo ri = RegionInfoBuilder.FIRST_META_REGIONINFO;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    byte[] bytes = RegionInfo.toByteArray(ri);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    RegionInfo pbri = RegionInfo.parseFrom(bytes);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    assertTrue(RegionInfo.COMPARATOR.compare(ri, pbri) == 0);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  @Test<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public void testCreateRegionInfoName() throws Exception {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    final TableName tn = name.getTableName();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    String startKey = "startkey";<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    final byte[] sk = Bytes.toBytes(startKey);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    String id = "id";<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    // old format region name<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    byte[] name = RegionInfo.createRegionName(tn, sk, id, false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    String nameStr = Bytes.toString(name);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    assertEquals(tn + "," + startKey + "," + id, nameStr);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    // new format region name.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    String md5HashInHex = MD5Hash.getMD5AsHex(name);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    assertEquals(RegionInfo.MD5_HEX_LENGTH, md5HashInHex.length());<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    name = RegionInfo.createRegionName(tn, sk, id, true);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    nameStr = Bytes.toString(name);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    assertEquals(tn + "," + startKey + "," + id + "." + md5HashInHex + ".", nameStr);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Test<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public void testContainsRange() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(name.getTableName()).build();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    RegionInfo ri = RegionInfoBuilder.newBuilder(tableDesc.getTableName())<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      .setStartKey(Bytes.toBytes("a")).setEndKey(Bytes.toBytes("g")).build();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    // Single row range at start of region<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assertTrue(ri.containsRange(Bytes.toBytes("a"), Bytes.toBytes("a")));<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    // Fully contained range<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    assertTrue(ri.containsRange(Bytes.toBytes("b"), Bytes.toBytes("c")));<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // Range overlapping start of region<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    assertTrue(ri.containsRange(Bytes.toBytes("a"), Bytes.toBytes("c")));<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // Fully contained single-row range<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    assertTrue(ri.containsRange(Bytes.toBytes("c"), Bytes.toBytes("c")));<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // Range that overlaps end key and hence doesn't fit<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    assertFalse(ri.containsRange(Bytes.toBytes("a"), Bytes.toBytes("g")));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // Single row range on end key<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    assertFalse(ri.containsRange(Bytes.toBytes("g"), Bytes.toBytes("g")));<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // Single row range entirely outside<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    assertFalse(ri.containsRange(Bytes.toBytes("z"), Bytes.toBytes("z")));<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // Degenerate range<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    try {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      ri.containsRange(Bytes.toBytes("z"), Bytes.toBytes("a"));<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      fail("Invalid range did not throw IAE");<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    } catch (IllegalArgumentException iae) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  @Test<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public void testContainsRangeForMetaTable() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    TableDescriptor tableDesc =<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        TableDescriptorBuilder.newBuilder(TableName.META_TABLE_NAME).build();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(tableDesc.getTableName()).build();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    byte[] startRow = HConstants.EMPTY_START_ROW;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    byte[] row1 = Bytes.toBytes("a,a,0");<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    byte[] row2 = Bytes.toBytes("aaaaa,,1");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    byte[] row3 = Bytes.toBytes("aaaaa,\u0000\u0000,2");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    byte[] row4 = Bytes.toBytes("aaaaa,\u0001,3");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    byte[] row5 = Bytes.toBytes("aaaaa,a,4");<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    byte[] row6 = Bytes.toBytes("aaaaa,\u1000,5");<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // Single row range at start of region<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertTrue(hri.containsRange(startRow, startRow));<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    // Fully contained range<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    assertTrue(hri.containsRange(row1, row2));<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    assertTrue(hri.containsRange(row2, row3));<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertTrue(hri.containsRange(row3, row4));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertTrue(hri.containsRange(row4, row5));<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    assertTrue(hri.containsRange(row5, row6));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // Range overlapping start of region<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    assertTrue(hri.containsRange(startRow, row2));<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // Fully contained single-row range<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    assertTrue(hri.containsRange(row1, row1));<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    // Degenerate range<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    try {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      hri.containsRange(row3, row2);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      fail("Invalid range did not throw IAE");<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    } catch (IllegalArgumentException iae) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Test<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void testLastRegionCompare() {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    TableDescriptor tableDesc = TableDescriptorBuilder.newBuilder(name.getTableName()).build();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    RegionInfo rip = RegionInfoBuilder.newBuilder(tableDesc.getTableName())<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      .setStartKey(Bytes.toBytes("a")).setEndKey(new byte[0]).build();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    RegionInfo ric = RegionInfoBuilder.newBuilder(tableDesc.getTableName())<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      .setStartKey(Bytes.toBytes("a")).setEndKey(Bytes.toBytes("b")).build();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    assertTrue(RegionInfo.COMPARATOR.compare(rip, ric) &gt; 0);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Test<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void testMetaTables() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    assertTrue(RegionInfoBuilder.FIRST_META_REGIONINFO.isMetaRegion());<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  @Test<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  public void testComparator() {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    final TableName tableName = name.getTableName();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    byte[] empty = new byte[0];<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    RegionInfo older = RegionInfoBuilder.newBuilder(tableName).setStartKey(empty).setEndKey(empty)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      .setSplit(false).setRegionId(0L).build();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    RegionInfo newer = RegionInfoBuilder.newBuilder(tableName).setStartKey(empty).setEndKey(empty)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      .setSplit(false).setRegionId(1L).build();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    assertTrue(RegionInfo.COMPARATOR.compare(older, newer) &lt; 0);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    assertTrue(RegionInfo.COMPARATOR.compare(newer, older) &gt; 0);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    assertTrue(RegionInfo.COMPARATOR.compare(older, older) == 0);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    assertTrue(RegionInfo.COMPARATOR.compare(newer, newer) == 0);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  @Test<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public void testRegionNameForRegionReplicas() throws Exception {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    final TableName tn = name.getTableName();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    String startKey = "startkey";<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    final byte[] sk = Bytes.toBytes(startKey);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    String id = "id";<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    // assert with only the region name without encoding<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // primary, replicaId = 0<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    byte[] name = RegionInfo.createRegionName(tn, sk, Bytes.toBytes(id), 0, false);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    String nameStr = Bytes.toString(name);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    assertEquals(tn + "," + startKey + "," + id, nameStr);<a name="line.215"></a>
 <span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    fields = RegionInfo.parseRegionName(regionName);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    assertArrayEquals(Bytes.toString(fields[0]), tableName.getName(), fields[0]);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    assertArrayEquals(Bytes.toString(fields[1]), startKey, fields[1]);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    assertArrayEquals(Bytes.toString(fields[2]), Bytes.toBytes(Long.toString(regionId)), fields[2]);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    assertArrayEquals(Bytes.toString(fields[3]),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      Bytes.toBytes(String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId)), fields[3]);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  @Test<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  public void testConvert() {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    final TableName tableName =<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      TableName.valueOf("ns1:" + name.getTableName().getQualifierAsString());<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    byte[] startKey = Bytes.toBytes("startKey");<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    byte[] endKey = Bytes.toBytes("endKey");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    boolean split = false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    long regionId = EnvironmentEdgeManager.currentTime();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    int replicaId = 42;<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>    RegionInfo ri = RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(endKey)<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      .setSplit(split).setRegionId(regionId).setReplicaId(replicaId).build();<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // convert two times, compare<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    RegionInfo convertedRi = ProtobufUtil.toRegionInfo(ProtobufUtil.toRegionInfo(ri));<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    assertEquals(ri, convertedRi);<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // test convert RegionInfo without replicaId<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    HBaseProtos.RegionInfo info = HBaseProtos.RegionInfo.newBuilder()<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      .setTableName(HBaseProtos.TableName.newBuilder()<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        .setQualifier(UnsafeByteOperations.unsafeWrap(tableName.getQualifier()))<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        .setNamespace(UnsafeByteOperations.unsafeWrap(tableName.getNamespace())).build())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      .setStartKey(UnsafeByteOperations.unsafeWrap(startKey))<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      .setEndKey(UnsafeByteOperations.unsafeWrap(endKey)).setSplit(split).setRegionId(regionId)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      .build();<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    convertedRi = ProtobufUtil.toRegionInfo(info);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    RegionInfo expectedRi = RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey)<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      .setEndKey(endKey).setSplit(split).setRegionId(regionId).setReplicaId(0).build();<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertEquals(expectedRi, convertedRi);<a name="line.256"></a>
+<span class="sourceLineNo">217</span>    // replicaId = 1<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    name = RegionInfo.createRegionName(tn, sk, Bytes.toBytes(id), 1, false);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    nameStr = Bytes.toString(name);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    assertEquals(<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      tn + "," + startKey + "," + id + "_" + String.format(RegionInfo.REPLICA_ID_FORMAT, 1),<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      nameStr);<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    // replicaId = max<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    name = RegionInfo.createRegionName(tn, sk, Bytes.toBytes(id), 0xFFFF, false);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    nameStr = Bytes.toString(name);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    assertEquals(<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      tn + "," + startKey + "," + id + "_" + String.format(RegionInfo.REPLICA_ID_FORMAT, 0xFFFF),<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      nameStr);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  @Test<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  public void testParseName() throws IOException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    final TableName tableName = name.getTableName();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    byte[] startKey = Bytes.toBytes("startKey");<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    long regionId = EnvironmentEdgeManager.currentTime();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    int replicaId = 42;<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>    // test without replicaId<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    byte[] regionName = RegionInfo.createRegionName(tableName, startKey, regionId, false);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>    byte[][] fields = RegionInfo.parseRegionName(regionName);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertArrayEquals(Bytes.toString(fields[0]), tableName.getName(), fields[0]);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assertArrayEquals(Bytes.toString(fields[1]), startKey, fields[1]);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertArrayEquals(Bytes.toString(fields[2]), Bytes.toBytes(Long.toString(regionId)), fields[2]);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    assertEquals(3, fields.length);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // test with replicaId<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    regionName = RegionInfo.createRegionName(tableName, startKey, regionId, replicaId, false);<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>    fields = RegionInfo.parseRegionName(regionName);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    assertArrayEquals(Bytes.toString(fields[0]), tableName.getName(), fields[0]);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    assertArrayEquals(Bytes.toString(fields[1]), startKey, fields[1]);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    assertArrayEquals(Bytes.toString(fields[2]), Bytes.toBytes(Long.toString(regionId)), fields[2]);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    assertArrayEquals(Bytes.toString(fields[3]),<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      Bytes.toBytes(String.format(RegionInfo.REPLICA_ID_FORMAT, replicaId)), fields[3]);<a name="line.256"></a>
 <span class="sourceLineNo">257</span>  }<a name="line.257"></a>
 <span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private void assertRegionNameNotEquals(RegionInfo expected, RegionInfo actual) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    assertNotEquals(expected.getRegionNameAsString(), actual.getRegionNameAsString());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assertNotEquals(expected.getEncodedName(), actual.getEncodedName());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private void assertRegionNameEquals(RegionInfo expected, RegionInfo actual) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    assertEquals(expected.getRegionNameAsString(), actual.getRegionNameAsString());<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    assertEquals(expected.getEncodedName(), actual.getEncodedName());<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">259</span>  @Test<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public void testConvert() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    final TableName tableName =<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      TableName.valueOf("ns1:" + name.getTableName().getQualifierAsString());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    byte[] startKey = Bytes.toBytes("startKey");<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    byte[] endKey = Bytes.toBytes("endKey");<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    boolean split = false;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    long regionId = EnvironmentEdgeManager.currentTime();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    int replicaId = 42;<a name="line.267"></a>
 <span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  @Test<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  public void testNewBuilderWithRegionInfo() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    RegionInfo ri = RegionInfoBuilder.newBuilder(name.getTableName()).build();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    assertEquals(ri, RegionInfoBuilder.newBuilder(ri).build());<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    // make sure that the region name and encoded name are changed, see HBASE-24500 for more<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    // details.<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertRegionNameNotEquals(ri,<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      RegionInfoBuilder.newBuilder(ri).setStartKey(new byte[1]).build());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertRegionNameNotEquals(ri,<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      RegionInfoBuilder.newBuilder(ri).setRegionId(ri.getRegionId() + 1).build());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    assertRegionNameNotEquals(ri, RegionInfoBuilder.newBuilder(ri).setReplicaId(1).build());<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>    // these fields are not in region name<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    assertRegionNameEquals(ri, RegionInfoBuilder.newBuilder(ri).setEndKey(new byte[1]).build());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    assertRegionNameEquals(ri, RegionInfoBuilder.newBuilder(ri).setSplit(true).build());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    assertRegionNameEquals(ri, RegionInfoBuilder.newBuilder(ri).setOffline(true).build());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>}<a name="line.287"></a>
+<span class="sourceLineNo">269</span>    RegionInfo ri = RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(endKey)<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      .setSplit(split).setRegionId(regionId).setReplicaId(replicaId).build();<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>    // convert two times, compare<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    RegionInfo convertedRi = ProtobufUtil.toRegionInfo(ProtobufUtil.toRegionInfo(ri));<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertEquals(ri, convertedRi);<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    // test convert RegionInfo without replicaId<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    HBaseProtos.RegionInfo info = HBaseProtos.RegionInfo.newBuilder()<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      .setTableName(HBaseProtos.TableName.newBuilder()<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        .setQualifier(UnsafeByteOperations.unsafeWrap(tableName.getQualifier()))<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        .setNamespace(UnsafeByteOperations.unsafeWrap(tableName.getNamespace())).build())<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      .setStartKey(UnsafeByteOperations.unsafeWrap(startKey))<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      .setEndKey(UnsafeByteOperations.unsafeWrap(endKey)).setSplit(split).setRegionId(regionId)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      .build();<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    convertedRi = ProtobufUtil.toRegionInfo(info);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    RegionInfo expectedRi = RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey)<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      .setEndKey(endKey).setSplit(split).setRegionId(regionId).setReplicaId(0).build();<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>    assertEquals(expectedRi, convertedRi);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>  private void assertRegionNameNotEquals(RegionInfo expected, RegionInfo actual) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    assertNotEquals(expected.getRegionNameAsString(), actual.getRegionNameAsString());<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    assertNotEquals(expected.getEncodedName(), actual.getEncodedName());<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  private void assertRegionNameEquals(RegionInfo expected, RegionInfo actual) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    assertEquals(expected.getRegionNameAsString(), actual.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    assertEquals(expected.getEncodedName(), actual.getEncodedName());<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  @Test<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public void testNewBuilderWithRegionInfo() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    RegionInfo ri = RegionInfoBuilder.newBuilder(name.getTableName()).build();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    assertEquals(ri, RegionInfoBuilder.newBuilder(ri).build());<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // make sure that the region name and encoded name are changed, see HBASE-24500 for more<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    // details.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    assertRegionNameNotEquals(ri,<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfoBuilder.newBuilder(ri).setStartKey(new byte[1]).build());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    assertRegionNameNotEquals(ri,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      RegionInfoBuilder.newBuilder(ri).setRegionId(ri.getRegionId() + 1).build());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    assertRegionNameNotEquals(ri, RegionInfoBuilder.newBuilder(ri).setReplicaId(1).build());<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>    // these fields are not in region name<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    assertRegionNameEquals(ri, RegionInfoBuilder.newBuilder(ri).setEndKey(new byte[1]).build());<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    assertRegionNameEquals(ri, RegionInfoBuilder.newBuilder(ri).setSplit(true).build());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    assertRegionNameEquals(ri, RegionInfoBuilder.newBuilder(ri).setOffline(true).build());<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>}<a name="line.321"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html
index 570a66a..feb2b31 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/mob/FaultyMobStoreCompactor.html
@@ -40,356 +40,358 @@
 <span class="sourceLineNo">032</span>import org.apache.hadoop.fs.FileSystem;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>import org.apache.hadoop.fs.Path;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Cell;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.TableName;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.hfile.CorruptHFileException;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.CellSink;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.KeyValueScanner;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.regionserver.ScannerContext;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.ShipperListener;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.StoreFileWriter;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.compactions.CloseChecker;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputControlUtil;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This class is used for testing only. The main purpose is to emulate<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * random failures during MOB compaction process.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Example of usage:<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;pre&gt;{@code<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * public class SomeTest {<a name="line.59"></a>
-<span class="sourceLineNo">060</span> *<a name="line.60"></a>
-<span class="sourceLineNo">061</span> *   public void initConfiguration(Configuration conf){<a name="line.61"></a>
-<span class="sourceLineNo">062</span> *     conf.set(MobStoreEngine.DEFAULT_MOB_COMPACTOR_CLASS_KEY,<a name="line.62"></a>
-<span class="sourceLineNo">063</span>         FaultyMobStoreCompactor.class.getName());<a name="line.63"></a>
-<span class="sourceLineNo">064</span>       conf.setDouble("hbase.mob.compaction.fault.probability", 0.1);<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *   }<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * }<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * }&lt;/pre&gt;<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * @see org.apache.hadoop.hbase.mob.MobStressToolRunner on how to use and configure<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *   this class.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> *<a name="line.70"></a>
-<span class="sourceLineNo">071</span> */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
-<span class="sourceLineNo">073</span>public class FaultyMobStoreCompactor extends DefaultMobStoreCompactor {<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(FaultyMobStoreCompactor.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public static AtomicLong mobCounter = new AtomicLong();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static AtomicLong totalFailures = new AtomicLong();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public static AtomicLong totalCompactions = new AtomicLong();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public static AtomicLong totalMajorCompactions = new AtomicLong();<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  static double failureProb = 0.1d;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  static Random rnd = new Random();<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public FaultyMobStoreCompactor(Configuration conf, HStore store) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    super(conf, store);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    failureProb = conf.getDouble("hbase.mob.compaction.fault.probability", 0.1);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  @Override<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected boolean performCompaction(FileDetails fd, InternalScanner scanner, CellSink writer,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      long smallestReadPoint, boolean cleanSeqId, ThroughputController throughputController,<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      boolean major, int numofFilesToCompact) throws IOException {<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    totalCompactions.incrementAndGet();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    if (major) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      totalMajorCompactions.incrementAndGet();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    long bytesWrittenProgressForLog = 0;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    long bytesWrittenProgressForShippedCall = 0;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    // Clear old mob references<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    mobRefSet.get().clear();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    boolean isUserRequest = userRequest.get();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    boolean compactMOBs = major &amp;&amp; isUserRequest;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    boolean discardMobMiss = conf.getBoolean(MobConstants.MOB_UNSAFE_DISCARD_MISS_KEY,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      MobConstants.DEFAULT_MOB_DISCARD_MISS);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    boolean mustFail = false;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (compactMOBs) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      mobCounter.incrementAndGet();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      double dv = rnd.nextDouble();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      if (dv &lt; failureProb) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        mustFail = true;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        totalFailures.incrementAndGet();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    FileSystem fs = store.getFileSystem();<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>    // Since scanner.next() can return 'false' but still be delivering data,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    // we have to use a do/while loop.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    List&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Limit to "hbase.hstore.compaction.kv.max" (default 10) to avoid OOME<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    long lastMillis = 0;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (LOG.isDebugEnabled()) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      lastMillis = currentTime;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    CloseChecker closeChecker = new CloseChecker(conf, currentTime);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    String compactionName = ThroughputControlUtil.getNameForThrottling(store, "compaction");<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    long now = 0;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    boolean hasMore;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    Path path = MobUtils.getMobFamilyPath(conf, store.getTableName(), store.getColumnFamilyName());<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] fileName = null;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    StoreFileWriter mobFileWriter = null;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    long mobCells = 0;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    long cellsCountCompactedToMob = 0, cellsCountCompactedFromMob = 0;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    long cellsSizeCompactedToMob = 0, cellsSizeCompactedFromMob = 0;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    boolean finished = false;<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>    ScannerContext scannerContext =<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        ScannerContext.newBuilder().setBatchLimit(compactionKVMax).build();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    throughputController.start(compactionName);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    KeyValueScanner kvs = (scanner instanceof KeyValueScanner) ? (KeyValueScanner) scanner : null;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    long shippedCallSizeLimit =<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        (long) numofFilesToCompact * this.store.getColumnFamilyDescriptor().getBlocksize();<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    Cell mobCell = null;<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>    long counter = 0;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    long countFailAt = -1;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    if (mustFail) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      countFailAt = rnd.nextInt(100); // randomly fail fast<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>    try {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      try {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        mobFileWriter = mobStore.createWriterInTmp(new Date(fd.latestPutTs), fd.maxKeyCount,<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          major ? majorCompactionCompression : minorCompactionCompression,<a name="line.159"></a>
-<span class="sourceLineNo">160</span>          store.getRegionInfo().getStartKey(), true);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      } catch (IOException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        // Bailing out<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        LOG.error("Failed to create mob writer, ", e);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        throw e;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      if (compactMOBs) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        // Add the only reference we get for compact MOB case<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        // because new store file will have only one MOB reference<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        // in this case - of newly compacted MOB file<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        mobRefSet.get().put(store.getTableName(), mobFileWriter.getPath().getName());<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      do {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        hasMore = scanner.next(cells, scannerContext);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        currentTime = EnvironmentEdgeManager.currentTime();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        if (LOG.isDebugEnabled()) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          now = currentTime;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        if (closeChecker.isTimeLimit(store, currentTime)) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          progress.cancel();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          return false;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        for (Cell c : cells) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          counter++;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          if (compactMOBs) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>            if (MobUtils.isMobReferenceCell(c)) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>              if (counter == countFailAt) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>                LOG.warn("INJECTED FAULT mobCounter={}", mobCounter.get());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>                throw new CorruptHFileException("injected fault");<a name="line.189"></a>
-<span class="sourceLineNo">190</span>              }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>              String fName = MobUtils.getMobFileName(c);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>              // Added to support migration<a name="line.192"></a>
-<span class="sourceLineNo">193</span>              try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>                mobCell = mobStore.resolve(c, true, false).getCell();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>              } catch (FileNotFoundException fnfe) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>                if (discardMobMiss) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>                  LOG.error("Missing MOB cell: file={} not found", fName);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>                  continue;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>                } else {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>                  throw fnfe;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>                }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>              }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>              if (discardMobMiss &amp;&amp; mobCell.getValueLength() == 0) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>                LOG.error("Missing MOB cell value: file={} cell={}", fName, mobCell);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>                continue;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>              }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>              if (mobCell.getValueLength() &gt; mobSizeThreshold) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>                // put the mob data back to the store file<a name="line.210"></a>
-<span class="sourceLineNo">211</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>                mobFileWriter.append(mobCell);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>                writer.append(<a name="line.213"></a>
-<span class="sourceLineNo">214</span>                  MobUtils.createMobRefCell(mobCell, fileName, this.mobStore.getRefCellTags()));<a name="line.214"></a>
-<span class="sourceLineNo">215</span>                mobCells++;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>              } else {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>                // If MOB value is less than threshold, append it directly to a store file<a name="line.217"></a>
-<span class="sourceLineNo">218</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.218"></a>
-<span class="sourceLineNo">219</span>                writer.append(mobCell);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>                cellsCountCompactedFromMob++;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>                cellsSizeCompactedFromMob += mobCell.getValueLength();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>            } else {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              // Not a MOB reference cell<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              int size = c.getValueLength();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>              if (size &gt; mobSizeThreshold) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>                mobFileWriter.append(c);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>                writer<a name="line.228"></a>
-<span class="sourceLineNo">229</span>                    .append(MobUtils.createMobRefCell(c, fileName, this.mobStore.getRefCellTags()));<a name="line.229"></a>
-<span class="sourceLineNo">230</span>                mobCells++;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>                cellsCountCompactedToMob++;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>                cellsSizeCompactedToMob += c.getValueLength();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>              } else {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>                writer.append(c);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>              }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>            }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          } else if (c.getTypeByte() != KeyValue.Type.Put.getCode()) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>            // Not a major compaction or major with MOB disabled<a name="line.238"></a>
-<span class="sourceLineNo">239</span>            // If the kv type is not put, directly write the cell<a name="line.239"></a>
-<span class="sourceLineNo">240</span>            // to the store file.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>            writer.append(c);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          } else if (MobUtils.isMobReferenceCell(c)) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            // Not a major MOB compaction, Put MOB reference<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            if (MobUtils.hasValidMobRefCellValue(c)) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>              int size = MobUtils.getMobValueLength(c);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>              if (size &gt; mobSizeThreshold) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>                // If the value size is larger than the threshold, it's regarded as a mob. Since<a name="line.247"></a>
-<span class="sourceLineNo">248</span>                // its value is already in the mob file, directly write this cell to the store file<a name="line.248"></a>
-<span class="sourceLineNo">249</span>                Optional&lt;TableName&gt; refTable = MobUtils.getTableName(c);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>                if (refTable.isPresent()) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>                  mobRefSet.get().put(refTable.get(), MobUtils.getMobFileName(c));<a name="line.251"></a>
-<span class="sourceLineNo">252</span>                  writer.append(c);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>                } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>                  throw new IOException(String.format("MOB cell did not contain a tablename " +<a name="line.254"></a>
-<span class="sourceLineNo">255</span>                      "tag. should not be possible. see ref guide on mob troubleshooting. " +<a name="line.255"></a>
-<span class="sourceLineNo">256</span>                      "store=%s cell=%s", getStoreInfo(), c));<a name="line.256"></a>
-<span class="sourceLineNo">257</span>                }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>              } else {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>                // If the value is not larger than the threshold, it's not regarded a mob. Retrieve<a name="line.259"></a>
-<span class="sourceLineNo">260</span>                // the mob cell from the mob file, and write it back to the store file.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>                mobCell = mobStore.resolve(c, true, false).getCell();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>                if (mobCell.getValueLength() != 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>                  // put the mob data back to the store file<a name="line.263"></a>
-<span class="sourceLineNo">264</span>                  PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>                  writer.append(mobCell);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>                  cellsCountCompactedFromMob++;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>                  cellsSizeCompactedFromMob += mobCell.getValueLength();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>                } else {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>                  // If the value of a file is empty, there might be issues when retrieving,<a name="line.269"></a>
-<span class="sourceLineNo">270</span>                  // directly write the cell to the store file, and leave it to be handled by the<a name="line.270"></a>
-<span class="sourceLineNo">271</span>                  // next compaction.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>                  LOG.error("Empty value for: " + c);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>                  Optional&lt;TableName&gt; refTable = MobUtils.getTableName(c);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>                  if (refTable.isPresent()) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>                    mobRefSet.get().put(refTable.get(), MobUtils.getMobFileName(c));<a name="line.275"></a>
-<span class="sourceLineNo">276</span>                    writer.append(c);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>                  } else {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>                    throw new IOException(String.format("MOB cell did not contain a tablename " +<a name="line.278"></a>
-<span class="sourceLineNo">279</span>                        "tag. should not be possible. see ref guide on mob troubleshooting. " +<a name="line.279"></a>
-<span class="sourceLineNo">280</span>                        "store=%s cell=%s", getStoreInfo(), c));<a name="line.280"></a>
-<span class="sourceLineNo">281</span>                  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>                }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>              }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            } else {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>              LOG.error("Corrupted MOB reference: {}", c);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>              writer.append(c);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>            }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          } else if (c.getValueLength() &lt;= mobSizeThreshold) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>            // If the value size of a cell is not larger than the threshold, directly write it to<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            // the store file.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            writer.append(c);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            // If the value size of a cell is larger than the threshold, it's regarded as a mob,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            // write this cell to a mob file, and write the path to the store file.<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            mobCells++;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            // append the original keyValue in the mob file.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>            mobFileWriter.append(c);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>            Cell reference = MobUtils.createMobRefCell(c, fileName, this.mobStore.getRefCellTags());<a name="line.298"></a>
-<span class="sourceLineNo">299</span>            // write the cell whose value is the path of a mob file to the store file.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            writer.append(reference);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>            cellsCountCompactedToMob++;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>            cellsSizeCompactedToMob += c.getValueLength();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>            // Add ref we get for compact MOB case<a name="line.303"></a>
-<span class="sourceLineNo">304</span>            mobRefSet.get().put(store.getTableName(), mobFileWriter.getPath().getName());<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>          int len = c.getSerializedSize();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          ++progress.currentCompactedKVs;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          progress.totalCompactedSize += len;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          bytesWrittenProgressForShippedCall += len;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          if (LOG.isDebugEnabled()) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>            bytesWrittenProgressForLog += len;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          throughputController.control(compactionName, len);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          if (closeChecker.isSizeLimit(store, len)) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            progress.cancel();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            return false;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          if (kvs != null &amp;&amp; bytesWrittenProgressForShippedCall &gt; shippedCallSizeLimit) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>            ((ShipperListener) writer).beforeShipped();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>            kvs.shipped();<a name="line.321"></a>
-<span class="sourceLineNo">322</span>            bytesWrittenProgressForShippedCall = 0;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          }<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        }<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        // Log the progress of long running compactions every minute if<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        // logging at DEBUG level<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        if (LOG.isDebugEnabled()) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          if ((now - lastMillis) &gt;= COMPACTION_PROGRESS_LOG_INTERVAL) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            String rate = String.format("%.2f",<a name="line.329"></a>
-<span class="sourceLineNo">330</span>              (bytesWrittenProgressForLog / 1024.0) / ((now - lastMillis) / 1000.0));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>            LOG.debug("Compaction progress: {} {}, rate={} KB/sec, throughputController is {}",<a name="line.331"></a>
-<span class="sourceLineNo">332</span>              compactionName, progress, rate, throughputController);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            lastMillis = now;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            bytesWrittenProgressForLog = 0;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        cells.clear();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      } while (hasMore);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      finished = true;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } catch (InterruptedException e) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      progress.cancel();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      throw new InterruptedIOException(<a name="line.342"></a>
-<span class="sourceLineNo">343</span>          "Interrupted while control throughput of compacting " + compactionName);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    } catch (FileNotFoundException e) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      LOG.error("MOB Stress Test FAILED, region: " + store.getRegionInfo().getEncodedName(), e);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      System.exit(-1);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    } catch (IOException t) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      LOG.error("Mob compaction failed for region: " + store.getRegionInfo().getEncodedName());<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      throw t;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    } finally {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      // Clone last cell in the final because writer will append last cell when committing. If<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // don't clone here and once the scanner get closed, then the memory of last cell will be<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // released. (HBASE-22582)<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      ((ShipperListener) writer).beforeShipped();<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      throughputController.finish(compactionName);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      if (!finished &amp;&amp; mobFileWriter != null) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        // Remove all MOB references because compaction failed<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        mobRefSet.get().clear();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // Abort writer<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        abortWriter(mobFileWriter);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    if (mobFileWriter != null) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      if (mobCells &gt; 0) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        // If the mob file is not empty, commit it.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        mobFileWriter.appendMetadata(fd.maxSeqId, major, mobCells);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>        mobFileWriter.close();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        mobStore.commitFile(mobFileWriter.getPath(), path);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      } else {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        // If the mob file is empty, delete it instead of committing.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        abortWriter(mobFileWriter);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    mobStore.updateCellsCountCompactedFromMob(cellsCountCompactedFromMob);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    mobStore.updateCellsCountCompactedToMob(cellsCountCompactedToMob);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    mobStore.updateCellsSizeCompactedFromMob(cellsSizeCompactedFromMob);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    mobStore.updateCellsSizeCompactedToMob(cellsSizeCompactedToMob);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    progress.complete();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.hfile.CorruptHFileException;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.CellSink;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.regionserver.KeyValueScanner;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.ScannerContext;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.ShipperListener;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.regionserver.StoreFileWriter;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.compactions.CloseChecker;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputControlUtil;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.slf4j.Logger;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.slf4j.LoggerFactory;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>/**<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * This class is used for testing only. The main purpose is to emulate<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * random failures during MOB compaction process.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * Example of usage:<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * &lt;pre&gt;{@code<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * public class SomeTest {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> *<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *   public void initConfiguration(Configuration conf){<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *     conf.set(MobStoreEngine.DEFAULT_MOB_COMPACTOR_CLASS_KEY,<a name="line.63"></a>
+<span class="sourceLineNo">064</span>         FaultyMobStoreCompactor.class.getName());<a name="line.64"></a>
+<span class="sourceLineNo">065</span>       conf.setDouble("hbase.mob.compaction.fault.probability", 0.1);<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *   }<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * }<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * }&lt;/pre&gt;<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * @see org.apache.hadoop.hbase.mob.MobStressToolRunner on how to use and configure<a name="line.69"></a>
+<span class="sourceLineNo">070</span> *   this class.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>@InterfaceAudience.Private<a name="line.73"></a>
+<span class="sourceLineNo">074</span>public class FaultyMobStoreCompactor extends DefaultMobStoreCompactor {<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private static final Logger LOG = LoggerFactory.getLogger(FaultyMobStoreCompactor.class);<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public static AtomicLong mobCounter = new AtomicLong();<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public static AtomicLong totalFailures = new AtomicLong();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public static AtomicLong totalCompactions = new AtomicLong();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static AtomicLong totalMajorCompactions = new AtomicLong();<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  static double failureProb = 0.1d;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  static Random rnd = new Random();<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public FaultyMobStoreCompactor(Configuration conf, HStore store) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    super(conf, store);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    failureProb = conf.getDouble("hbase.mob.compaction.fault.probability", 0.1);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected boolean performCompaction(FileDetails fd, InternalScanner scanner, CellSink writer,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      long smallestReadPoint, boolean cleanSeqId, ThroughputController throughputController,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      boolean major, int numofFilesToCompact) throws IOException {<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    totalCompactions.incrementAndGet();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    if (major) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      totalMajorCompactions.incrementAndGet();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    long bytesWrittenProgressForLog = 0;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    long bytesWrittenProgressForShippedCall = 0;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    // Clear old mob references<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    mobRefSet.get().clear();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    boolean isUserRequest = userRequest.get();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    boolean compactMOBs = major &amp;&amp; isUserRequest;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    boolean discardMobMiss = conf.getBoolean(MobConstants.MOB_UNSAFE_DISCARD_MISS_KEY,<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      MobConstants.DEFAULT_MOB_DISCARD_MISS);<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    boolean mustFail = false;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    if (compactMOBs) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      mobCounter.incrementAndGet();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      double dv = rnd.nextDouble();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      if (dv &lt; failureProb) {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        mustFail = true;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        totalFailures.incrementAndGet();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>    FileSystem fs = store.getFileSystem();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>    // Since scanner.next() can return 'false' but still be delivering data,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // we have to use a do/while loop.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    List&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // Limit to "hbase.hstore.compaction.kv.max" (default 10) to avoid OOME<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    long lastMillis = 0;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (LOG.isDebugEnabled()) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      lastMillis = currentTime;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    CloseChecker closeChecker = new CloseChecker(conf, currentTime);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    String compactionName = ThroughputControlUtil.getNameForThrottling(store, "compaction");<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    long now = 0;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    boolean hasMore;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    Path path = MobUtils.getMobFamilyPath(conf, store.getTableName(), store.getColumnFamilyName());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    byte[] fileName = null;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    StoreFileWriter mobFileWriter = null;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    long mobCells = 0;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    long cellsCountCompactedToMob = 0, cellsCountCompactedFromMob = 0;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    long cellsSizeCompactedToMob = 0, cellsSizeCompactedFromMob = 0;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    boolean finished = false;<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    ScannerContext scannerContext =<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        ScannerContext.newBuilder().setBatchLimit(compactionKVMax).build();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    throughputController.start(compactionName);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    KeyValueScanner kvs = (scanner instanceof KeyValueScanner) ? (KeyValueScanner) scanner : null;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    long shippedCallSizeLimit =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        (long) numofFilesToCompact * this.store.getColumnFamilyDescriptor().getBlocksize();<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    Cell mobCell = null;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>    long counter = 0;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    long countFailAt = -1;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (mustFail) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      countFailAt = rnd.nextInt(100); // randomly fail fast<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    try {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      try {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        mobFileWriter = mobStore.createWriterInTmp(new Date(fd.latestPutTs), fd.maxKeyCount,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>          major ? majorCompactionCompression : minorCompactionCompression,<a name="line.160"></a>
+<span class="sourceLineNo">161</span>          store.getRegionInfo().getStartKey(), true);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        fileName = Bytes.toBytes(mobFileWriter.getPath().getName());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      } catch (IOException e) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        // Bailing out<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        LOG.error("Failed to create mob writer, ", e);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        throw e;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      if (compactMOBs) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        // Add the only reference we get for compact MOB case<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        // because new store file will have only one MOB reference<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        // in this case - of newly compacted MOB file<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        mobRefSet.get().put(store.getTableName(), mobFileWriter.getPath().getName());<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      do {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        hasMore = scanner.next(cells, scannerContext);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        currentTime = EnvironmentEdgeManager.currentTime();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        if (LOG.isDebugEnabled()) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          now = currentTime;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        if (closeChecker.isTimeLimit(store, currentTime)) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          progress.cancel();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          return false;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        for (Cell c : cells) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          counter++;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          if (compactMOBs) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>            if (MobUtils.isMobReferenceCell(c)) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>              if (counter == countFailAt) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>                LOG.warn("INJECTED FAULT mobCounter={}", mobCounter.get());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>                throw new CorruptHFileException("injected fault");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>              }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>              String fName = MobUtils.getMobFileName(c);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>              // Added to support migration<a name="line.193"></a>
+<span class="sourceLineNo">194</span>              try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>                mobCell = mobStore.resolve(c, true, false).getCell();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>              } catch (DoNotRetryIOException e) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>                if (discardMobMiss &amp;&amp; e.getCause() != null<a name="line.197"></a>
+<span class="sourceLineNo">198</span>                  &amp;&amp; e.getCause() instanceof FileNotFoundException) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>                  LOG.error("Missing MOB cell: file={} not found cell={}", fName, c);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>                  continue;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>                } else {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>                  throw e;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>                }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>              }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>              if (discardMobMiss &amp;&amp; mobCell.getValueLength() == 0) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>                LOG.error("Missing MOB cell value: file={} cell={}", fName, mobCell);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>                continue;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>              }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>              if (mobCell.getValueLength() &gt; mobSizeThreshold) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>                // put the mob data back to the store file<a name="line.212"></a>
+<span class="sourceLineNo">213</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>                mobFileWriter.append(mobCell);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>                writer.append(<a name="line.215"></a>
+<span class="sourceLineNo">216</span>                  MobUtils.createMobRefCell(mobCell, fileName, this.mobStore.getRefCellTags()));<a name="line.216"></a>
+<span class="sourceLineNo">217</span>                mobCells++;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>              } else {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>                // If MOB value is less than threshold, append it directly to a store file<a name="line.219"></a>
+<span class="sourceLineNo">220</span>                PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>                writer.append(mobCell);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>                cellsCountCompactedFromMob++;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>                cellsSizeCompactedFromMob += mobCell.getValueLength();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>              }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>            } else {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>              // Not a MOB reference cell<a name="line.226"></a>
+<span class="sourceLineNo">227</span>              int size = c.getValueLength();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>              if (size &gt; mobSizeThreshold) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>                mobFileWriter.append(c);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>                writer<a name="line.230"></a>
+<span class="sourceLineNo">231</span>                    .append(MobUtils.createMobRefCell(c, fileName, this.mobStore.getRefCellTags()));<a name="line.231"></a>
+<span class="sourceLineNo">232</span>                mobCells++;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>                cellsCountCompactedToMob++;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>                cellsSizeCompactedToMob += c.getValueLength();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>              } else {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>                writer.append(c);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>              }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          } else if (c.getTypeByte() != KeyValue.Type.Put.getCode()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>            // Not a major compaction or major with MOB disabled<a name="line.240"></a>
+<span class="sourceLineNo">241</span>            // If the kv type is not put, directly write the cell<a name="line.241"></a>
+<span class="sourceLineNo">242</span>            // to the store file.<a name="line.242"></a>
+<span class="sourceLineNo">243</span>            writer.append(c);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          } else if (MobUtils.isMobReferenceCell(c)) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>            // Not a major MOB compaction, Put MOB reference<a name="line.245"></a>
+<span class="sourceLineNo">246</span>            if (MobUtils.hasValidMobRefCellValue(c)) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>              int size = MobUtils.getMobValueLength(c);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>              if (size &gt; mobSizeThreshold) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>                // If the value size is larger than the threshold, it's regarded as a mob. Since<a name="line.249"></a>
+<span class="sourceLineNo">250</span>                // its value is already in the mob file, directly write this cell to the store file<a name="line.250"></a>
+<span class="sourceLineNo">251</span>                Optional&lt;TableName&gt; refTable = MobUtils.getTableName(c);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>                if (refTable.isPresent()) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>                  mobRefSet.get().put(refTable.get(), MobUtils.getMobFileName(c));<a name="line.253"></a>
+<span class="sourceLineNo">254</span>                  writer.append(c);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>                } else {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>                  throw new IOException(String.format("MOB cell did not contain a tablename " +<a name="line.256"></a>
+<span class="sourceLineNo">257</span>                      "tag. should not be possible. see ref guide on mob troubleshooting. " +<a name="line.257"></a>
+<span class="sourceLineNo">258</span>                      "store=%s cell=%s", getStoreInfo(), c));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>                }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>              } else {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>                // If the value is not larger than the threshold, it's not regarded a mob. Retrieve<a name="line.261"></a>
+<span class="sourceLineNo">262</span>                // the mob cell from the mob file, and write it back to the store file.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>                mobCell = mobStore.resolve(c, true, false).getCell();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>                if (mobCell.getValueLength() != 0) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>                  // put the mob data back to the store file<a name="line.265"></a>
+<span class="sourceLineNo">266</span>                  PrivateCellUtil.setSequenceId(mobCell, c.getSequenceId());<a name="line.266"></a>
+<span class="sourceLineNo">267</span>                  writer.append(mobCell);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>                  cellsCountCompactedFromMob++;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>                  cellsSizeCompactedFromMob += mobCell.getValueLength();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>                } else {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>                  // If the value of a file is empty, there might be issues when retrieving,<a name="line.271"></a>
+<span class="sourceLineNo">272</span>                  // directly write the cell to the store file, and leave it to be handled by the<a name="line.272"></a>
... 1045 lines suppressed ...