hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From git-site-r...@apache.org
Subject [hbase-site] branch asf-site updated: Published site at 499ff32f00d8518a5c770fae9799b5f8e643c795.
Date Tue, 14 Jan 2020 14:43:14 GMT
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 c4a0b93  Published site at 499ff32f00d8518a5c770fae9799b5f8e643c795.
c4a0b93 is described below

commit c4a0b93934d4479f656d54e15e780c2496178970
Author: jenkins <builds@apache.org>
AuthorDate: Tue Jan 14 14:42:53 2020 +0000

    Published site at 499ff32f00d8518a5c770fae9799b5f8e643c795.
---
 acid-semantics.html                                |   2 +-
 apache_hbase_reference_guide.pdf                   |   4 +-
 book.html                                          |   2 +-
 bulk-loads.html                                    |   2 +-
 checkstyle-aggregate.html                          |   8 +-
 coc.html                                           |   2 +-
 dependencies.html                                  |   2 +-
 dependency-convergence.html                        |   2 +-
 dependency-info.html                               |   2 +-
 dependency-management.html                         |   2 +-
 devapidocs/allclasses-frame.html                   |   1 +
 devapidocs/allclasses-noframe.html                 |   1 +
 devapidocs/constant-values.html                    |   4 +-
 devapidocs/index-all.html                          |  34 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |   4 +-
 .../apache/hadoop/hbase/class-use/TableName.html   |   2 +-
 .../hadoop/hbase/client/class-use/RegionInfo.html  |  98 ++--
 .../apache/hadoop/hbase/client/package-tree.html   |  14 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |   8 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |   2 +-
 .../hadoop/hbase/hbtop/terminal/package-tree.html  |   2 +-
 .../org/apache/hadoop/hbase/http/package-tree.html |   4 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |   6 +-
 .../hadoop/hbase/mapreduce/package-tree.html       |   2 +-
 .../hadoop/hbase/master/MetaFixer.Either.html      | 205 +++----
 .../org/apache/hadoop/hbase/master/MetaFixer.html  | 129 +++--
 .../hbase/master/MetricsAssignmentManager.html     |   4 +-
 .../hbase/master/assignment/package-tree.html      |   2 +-
 .../hbase/master/class-use/MasterServices.html     |   9 +-
 .../hbase/master/class-use/MetaFixer.Either.html   | 169 ++++++
 .../apache/hadoop/hbase/master/package-frame.html  |   1 +
 .../hadoop/hbase/master/package-summary.html       |  76 +--
 .../apache/hadoop/hbase/master/package-tree.html   |   7 +-
 .../apache/hadoop/hbase/master/package-use.html    |  79 +--
 .../hbase/master/procedure/package-tree.html       |   4 +-
 .../org/apache/hadoop/hbase/package-tree.html      |  16 +-
 .../hadoop/hbase/procedure2/package-tree.html      |   4 +-
 .../hbase/procedure2/store/wal/package-tree.html   |   2 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |   6 +-
 ...cureBulkLoadManager.SecureBulkLoadListener.html |  24 +-
 .../hbase/regionserver/SecureBulkLoadManager.html  |  20 +-
 .../hadoop/hbase/regionserver/package-tree.html    |  18 +-
 .../regionserver/querymatcher/package-tree.html    |   2 +-
 .../hbase/regionserver/wal/package-tree.html       |   2 +-
 .../hadoop/hbase/rest/model/package-tree.html      |   2 +-
 .../hadoop/hbase/security/access/package-tree.html |   2 +-
 .../apache/hadoop/hbase/security/package-tree.html |   2 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |   2 +-
 .../apache/hadoop/hbase/util/class-use/Pair.html   |   8 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |   8 +-
 devapidocs/overview-tree.html                      |   1 +
 .../src-html/org/apache/hadoop/hbase/Version.html  |   4 +-
 .../hadoop/hbase/master/MetaFixer.Either.html      | 419 ++++++++++++++
 .../org/apache/hadoop/hbase/master/MetaFixer.html  | 528 +++++++++++-------
 ...cureBulkLoadManager.SecureBulkLoadListener.html | 615 +++++++++++----------
 .../hbase/regionserver/SecureBulkLoadManager.html  | 615 +++++++++++----------
 downloads.html                                     |   2 +-
 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                      |   5 +
 .../apache/hadoop/hbase/backup/package-tree.html   |   2 +-
 .../hadoop/hbase/chaos/actions/package-tree.html   |   2 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |   2 +-
 .../apache/hadoop/hbase/master/TestMetaFixer.html  |  73 ++-
 .../org/apache/hadoop/hbase/package-tree.html      |  12 +-
 .../hadoop/hbase/procedure/package-tree.html       |   8 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   6 +-
 .../org/apache/hadoop/hbase/test/package-tree.html |   2 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |   4 +-
 .../apache/hadoop/hbase/master/TestMetaFixer.html  | 307 +++++-----
 87 files changed, 2245 insertions(+), 1413 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index d199e33..a2c1cbf 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -450,7 +450,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 89fa9f0..5a4e8dd 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20200113144043+00'00')
-/CreationDate (D:20200113144043+00'00')
+/ModDate (D:20200114143947+00'00')
+/CreationDate (D:20200114143947+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index 05d0a46..46cbcff 100644
--- a/book.html
+++ b/book.html
@@ -44220,7 +44220,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2020-01-13 14:30:13 UTC
+Last updated 2020-01-14 14:30:10 UTC
 </div>
 </div>
 </body>
diff --git a/bulk-loads.html b/bulk-loads.html
index 71d2c36..a9974ac 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -155,7 +155,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 2bdee28..b44e2e6 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -60807,19 +60807,19 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>454</td></tr>
+<td>457</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>456</td></tr>
+<td>459</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>462</td></tr></table></div>
+<td>465</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Segment.java">org/apache/hadoop/hbase/regionserver/Segment.java</h3>
 <table border="0" class="table table-striped">
@@ -86925,7 +86925,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 a6ada54..96029d6 100644
--- a/coc.html
+++ b/coc.html
@@ -224,7 +224,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 441ed8c..ef3e4e8 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -296,7 +296,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 c57e40d..83db7c9 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -541,7 +541,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 baeb281..c81564b 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -177,7 +177,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 58d2501..31385c9 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -905,7 +905,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 07db131..12ac810 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -1527,6 +1527,7 @@
 <li><a href="org/apache/hadoop/hbase/hbtop/screen/top/MessageModeScreenPresenter.html" title="class in org.apache.hadoop.hbase.hbtop.screen.top" target="classFrame">MessageModeScreenPresenter</a></li>
 <li><a href="org/apache/hadoop/hbase/hbtop/screen/top/MessageModeScreenView.html" title="class in org.apache.hadoop.hbase.hbtop.screen.top" target="classFrame">MessageModeScreenView</a></li>
 <li><a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MetaFixer</a></li>
+<li><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MetaFixer.Either</a></li>
 <li><a href="org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer" target="classFrame">MetaLocationSyncer</a></li>
 <li><a href="org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase" target="classFrame">MetaMutationAnnotation</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure" target="classFrame"><span class="interfaceName">MetaProcedureInterface</span></a></li>
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index 0b9259c..221423b 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -1527,6 +1527,7 @@
 <li><a href="org/apache/hadoop/hbase/hbtop/screen/top/MessageModeScreenPresenter.html" title="class in org.apache.hadoop.hbase.hbtop.screen.top">MessageModeScreenPresenter</a></li>
 <li><a href="org/apache/hadoop/hbase/hbtop/screen/top/MessageModeScreenView.html" title="class in org.apache.hadoop.hbase.hbtop.screen.top">MessageModeScreenView</a></li>
 <li><a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></li>
+<li><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></li>
 <li><a href="org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a></li>
 <li><a href="org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase">MetaMutationAnnotation</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure"><span class="interfaceName">MetaProcedureInterface</span></a></li>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 7f8e409..82c9b5f 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -4102,14 +4102,14 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;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></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Mon Jan 13 14:36:27 UTC 2020"</code></td>
+<td class="colLast"><code>"Tue Jan 14 14:35:57 UTC 2020"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="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><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"0bf933b0686c78601f95c580ff7436918c4efcfe"</code></td>
+<td class="colLast"><code>"499ff32f00d8518a5c770fae9799b5f8e643c795"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index e185d7f..dde15fe 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -7721,7 +7721,7 @@
 <dd>
 <div class="block">Builds a <code>QuotaProtos.SpaceQuota</code> protobuf object to remove a quota.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.html#buildRegionInfo-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">buildRegionInfo(TableName, byte[], byte[])</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.html#buildRegionInfo-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">buildRegionInfo(TableName, byte[], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOpenOperation.html#buildRegionOpenInfoRequest-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">buildRegionOpenInfoRequest(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOpenOperation.html" title="class in org.apache.hadoop.hbase.master.procedure"> [...]
 <dd>&nbsp;</dd>
@@ -20642,6 +20642,10 @@
 <div class="block">
  Create a <a href="org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master"><code>MasterMetaBootstrap</code></a> instance.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.html#createMetaEntries-org.apache.hadoop.hbase.master.MasterServices-java.util.List-">createMetaEntries(MasterServices, List&lt;RegionInfo&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dt>
+<dd>
+<div class="block">Create entries in the <code>hbase:meta</code> for each provided <a href="org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSTableDescriptors.html#createMetaTableDescriptor-org.apache.hadoop.conf.Configuration-">createMetaTableDescriptor(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">FSTableDescriptors</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSTableDescriptors.html#createMetaTableDescriptorBuilder-org.apache.hadoop.conf.Configuration-">createMetaTableDescriptorBuilder(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">FSTableDescriptors</a></dt>
@@ -21095,6 +21099,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ModifyRegionUtils.html#createRegionInfos-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-">createRegionInfos(TableDescriptor, byte[][])</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ModifyRegionUtils.html" title="class in org.apache.hadoop.hbase.util">ModifyRegionUtils</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.html#createRegionInfosForHoles-java.util.List-">createRegionInfosForHoles(List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dt>
+<dd>
+<div class="block">Create a new <a href="org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> corresponding to each provided "hole" pair.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionLoad-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder-">createRegionLoad(HRegion, ClusterStatusProtos.RegionLoad.Builder, HBaseProtos.RegionSpecifier.Builder)</a></span> - Method in class org.apache.hadoop.hbase [...]
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionLoad-java.lang.String-">createRegionLoad(String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
@@ -27908,6 +27916,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ConnectionCache.html#effectiveUserNames">effectiveUserNames</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ConnectionCache.html" title="class in org.apache.hadoop.hbase.util">ConnectionCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#Either-L-R-">Either(L, R)</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.html#elapsedMs--">elapsedMs()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCaller</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#elapsedMs--">elapsedMs()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller</a></dt>
@@ -41852,7 +41862,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/crypto/aes/CryptoAES.Integrity.html#getHMAC-byte:A-int-int-">getHMAC(byte[], int, int)</a></span> - Method in class org.apache.hadoop.hbase.io.crypto.aes.<a href="org/apache/hadoop/hbase/io/crypto/aes/CryptoAES.Integrity.html" title="class in org.apache.hadoop.hbase.io.crypto.aes">CryptoAES.Integrity</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover(Pair&lt;RegionInfo, RegionInfo&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover(Pair&lt;RegionInfo, RegionInfo&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/CatalogJanitor.Report.html#getHoles--">getHoles()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/CatalogJanitor.Report.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.Report</a></dt>
 <dd>&nbsp;</dd>
@@ -42970,6 +42980,8 @@
  BucketSizes where everything is empty and they only have one
  completely free bucket as a reserved</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#getLeft--">getLeft()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html#getLeftoverRegions--">getLeftoverRegions()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html" title="class in org.apache.hadoop.hbase.quotas">FileSystemUtilizationChore</a></dt>
 <dd>
 <div class="block">Returns an <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><code>Iterator</code></a> over the Regions which were skipped last invocation of the chore.</div>
@@ -49808,6 +49820,8 @@
 <dd>
 <div class="block">Get the subversion revision number for the root directory</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#getRight--">getRight()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/hbtop/screen/top/Summary.html#getRitCount--">getRitCount()</a></span> - Method in class org.apache.hadoop.hbase.hbtop.screen.top.<a href="org/apache/hadoop/hbase/hbtop/screen/top/Summary.html" title="class in org.apache.hadoop.hbase.hbtop.screen.top">Summary</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionState.html#getRitDuration--">getRitDuration()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a></dt>
@@ -57537,6 +57551,8 @@
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 &nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#hasLeft--">hasLeft()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock--">hasLock()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
 <div class="block">This is used in conjunction with <a href="org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>.</div>
@@ -57775,6 +57791,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.ProcedureFuture.html#hasResult">hasResult</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.ProcedureFuture.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedureSyncWait.ProcedureFuture</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#hasRight--">hasRight()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/FairQueue.html#hasRunnables--">hasRunnables()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/FairQueue.html" title="class in org.apache.hadoop.hbase.master.procedure">FairQueue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html#hasRunnables--">hasRunnables()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html" title="class in org.apache.hadoop.hbase.procedure2">AbstractProcedureScheduler</a></dt>
@@ -69169,6 +69187,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#leastLoadedRSSet">leastLoadedRSSet</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/AssignmentVerificationReport.html" title="class in org.apache.hadoop.hbase.master">AssignmentVerificationReport</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#left">left</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.html#left--">left()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">StripeCompactionScanQueryMatcher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.SizeMultiWriter.html#left">left</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.SizeMultiWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StripeMultiFileWriter.SizeMultiWriter</a></dt>
@@ -76068,6 +76088,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.html#MetaFixer-org.apache.hadoop.hbase.master.MasterServices-">MetaFixer(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaFixer.Either</span></a>&lt;<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a>,<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a>&gt; - Class in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop. [...]
+<dd>
+<div class="block">A union over <code>L</code> and <code>R</code>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheStats.html#metaHitCount">metaHitCount</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html#metaIndexCount">metaIndexCount</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">FixedFileTrailer</a></dt>
@@ -82166,6 +82190,10 @@
 <div class="block">A "sparse lock" implementation allowing to lock on a particular block
  identified by offset.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#ofLeft-L-">ofLeft(L)</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#ofRight-R-">ofRight(R)</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/mapreduce/MobRefReporter.MobRefReducer.html#OK_HLINK_CLONE">OK_HLINK_CLONE</a></span> - Variable in class org.apache.hadoop.hbase.mob.mapreduce.<a href="org/apache/hadoop/hbase/mob/mapreduce/MobRefReporter.MobRefReducer.html" title="class in org.apache.hadoop.hbase.mob.mapreduce">MobRefReporter.MobRefReducer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/mapreduce/MobRefReporter.MobRefReducer.html#OK_HLINK_RESTORE">OK_HLINK_RESTORE</a></span> - Variable in class org.apache.hadoop.hbase.mob.mapreduce.<a href="org/apache/hadoop/hbase/mob/mapreduce/MobRefReporter.MobRefReducer.html" title="class in org.apache.hadoop.hbase.mob.mapreduce">MobRefReporter.MobRefReducer</a></dt>
@@ -99615,6 +99643,8 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html#riComparator">riComparator</a></span> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">SimpleLoadBalancer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html#right">right</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.SizeMultiWriter.html#right">right</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.SizeMultiWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StripeMultiFileWriter.SizeMultiWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#RING_BUFFER_SLOT_COUNT">RING_BUFFER_SLOT_COUNT</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index d123a50..6433922 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,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/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 25e2a2c..10daa02 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -5606,7 +5606,7 @@ service.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#buildRegionInfo-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">buildRegionInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn,
                byte[]&nbsp;start,
                byte[]&nbsp;end)</code>&nbsp;</td>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
index 8c7bf9d..d37472e 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
@@ -2205,35 +2205,31 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#buildRegionInfo-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">buildRegionInfo</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn,
                byte[]&nbsp;start,
                byte[]&nbsp;end)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.cl [...]
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RegionState.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html#getRegion--">getRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RegionPlan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html#getRegionInfo--">getRegionInfo</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MasterRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html#getRegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier-">getRegionInfo</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;rs)</code>
 <div class="block">Get RegionInfo from Master using content of RegionSpecifier as key.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getRegionInfoWithLargestEndKey-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">getRegionInfoWithLargestEndKey</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;a,
                               <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;b)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">CatalogJanitor.ReportMakingVisitor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.ReportMakingVisitor.html#metaTableConsistencyCheck-org.apache.hadoop.hbase.client.Result-">metaTableConsistencyCheck</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;metaTableRow)</code>
 <div class="block">Check row.</div>
@@ -2256,87 +2252,104 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/client [...]
-<td class="colLast"><span class="typeNameLabel">CatalogJanitor.Report.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html#getHoles--">getHoles</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>private static <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createMetaEntries-org.apache.hadoop.hbase.master.MasterServices-java.util.List-">createMetaEntries</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                 <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegionInfos)</code>
+<div class="block">Create entries in the <code>hbase:meta</code> for each provided <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createRegionInfosForHoles-java.util.List-">createRegionInfosForHoles</a></span>(<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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hado [...]
+<div class="block">Create a new <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> corresponding to each provided "hole" pair.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.cl [...]
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/client [...]
 <td class="colLast"><span class="typeNameLabel">CatalogJanitor.Report.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html#getHoles--">getHoles</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/client [...]
+<td class="colLast"><span class="typeNameLabel">CatalogJanitor.Report.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html#getHoles--">getHoles</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentVerificationReport.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#getNonFavoredAssignedRegions--">getNonFavoredAssignedRegions</a></span>()</code>
 <div class="block">Return the regions not assigned to its favored nodes</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/client [...]
 <td class="colLast"><span class="typeNameLabel">CatalogJanitor.Report.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html#getOverlaps--">getOverlaps</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/client [...]
 <td class="colLast"><span class="typeNameLabel">CatalogJanitor.Report.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html#getOverlaps--">getOverlaps</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getPrimaryToRegionInfoMap--">getPrimaryToRegionInfoMap</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="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="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getRegionNameToRegionInfoMap--">getRegionNameToRegionInfoMap</a></span>()</code>
 <div class="block">Get the regioninfo for a region</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getRegionServerToRegionMap--">getRegionServerToRegionMap</a></span>()</code>
 <div class="block">Get regionserver to region map</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentVerificationReport.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#getRegionsWithoutValidFavoredNodes--">getRegionsWithoutValidFavoredNodes</a></span>()</code>
 <div class="block">Return the regions without favored nodes</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getRegionToRegionServerMap--">getRegionToRegionServerMap</a></span>()</code>
 <div class="block">Get region to region server map</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getSecondaryToRegionInfoMap--">getSecondaryToRegionInfoMap</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../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/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Regio [...]
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getTableToRegionMap--">getTableToRegionMap</a></span>()</code>
 <div class="block">Get regions for tables</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getTertiaryToRegionInfoMap--">getTertiaryToRegionInfoMap</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentVerificationReport.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#getUnassignedRegions--">getUnassignedRegions</a></span>()</code>
 <div class="block">Return the unassigned regions</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/Server [...]
 <td class="colLast"><span class="typeNameLabel">CatalogJanitor.Report.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html#getUnknownServers--">getUnknownServers</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#retainAssignment-java.util.Map-java.util.List-">retainAssignment</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org [...]
                 <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;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>
 <div class="block">Assign regions to the previously hosting region server</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">roundRobinAssignment</a></span>(<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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="inter [...]
                     <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;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>
@@ -2730,44 +2743,63 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.cl [...]
+<td class="colFirst"><code>private static <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createMetaEntries-org.apache.hadoop.hbase.master.MasterServices-java.util.List-">createMetaEntries</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                 <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegionInfos)</code>
+<div class="block">Create entries in the <code>hbase:meta</code> for each provided <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>.</div>
+</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<td class="colFirst"><code>private static <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createRegionInfosForHoles-java.util.List-">createRegionInfosForHoles</a></span>(<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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hado [...]
+<div class="block">Create a new <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> corresponding to each provided "hole" pair.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createRegionInfosForHoles-java.util.List-">createRegionInfosForHoles</a></span>(<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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hado [...]
+<div class="block">Create a new <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> corresponding to each provided "hole" pair.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.cl [...]
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.cl [...]
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#isOverlap-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.util.Pair-">isOverlap</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri,
          <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;pair)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#isOverlap-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.util.Pair-">isOverlap</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri,
          <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;pair)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html#removeRegions-java.util.List-">removeRegions</a></span>(<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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.h [...]
 <div class="block">Called by delete table and similar to notify the ServerManager that a region was removed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#retainAssignment-java.util.Map-java.util.List-">retainAssignment</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org [...]
                 <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;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>
 <div class="block">Assign regions to the previously hosting region server</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<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;<a href="../../../../../../org/apache/hadoop/hbase/client/Reg [...]
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">roundRobinAssignment</a></span>(<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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="inter [...]
                     <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;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>
 <div class="block">Perform a Round Robin assignment of regions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setClusterLoad-java.util.Map-">setClusterLoad</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName [...]
 <div class="block">Pass RegionStates and allow balancer to set the current cluster load.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index cc44884..eeae076 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -426,20 +426,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.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/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/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/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/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/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/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/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/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/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<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/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/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/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/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 70b04d6..d6d8cf6 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/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/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/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/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</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 d9bf09d..cd793c2 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/hbtop/terminal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
index 007e90f..b8f3866 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
@@ -107,8 +107,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.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/KeyPress.Type.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">KeyPress.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/Color.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">Color</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/KeyPress.Type.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">KeyPress.Type</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index 0cfb404..cdd6240 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -139,9 +139,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.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</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 35e8a2d..f83e4e3 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/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/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/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/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>
 <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/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>
 </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 a069ef9..f91d9af 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -298,8 +298,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/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/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaFixer.html b/devapidocs/org/apache/hadoop/hbase/master/MetaFixer.Either.html
similarity index 51%
copy from testdevapidocs/org/apache/hadoop/hbase/master/TestMetaFixer.html
copy to devapidocs/org/apache/hadoop/hbase/master/MetaFixer.Either.html
index 8a445c0..9d629a3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaFixer.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/MetaFixer.Either.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestMetaFixer (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<title>MetaFixer.Either (Apache HBase 3.0.0-SNAPSHOT API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,13 +12,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestMetaFixer (Apache HBase 3.0.0-SNAPSHOT Test API)";
+            parent.document.title="MetaFixer.Either (Apache HBase 3.0.0-SNAPSHOT API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":9,"i4":10,"i5":10,"i6":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -40,7 +40,7 @@ var activeTableTab = "activeTableTab";
 <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/TestMetaFixer.html">Use</a></li>
+<li><a href="class-use/MetaFixer.Either.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>
@@ -49,12 +49,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixerNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestMetaFixer.html" target="_top">Frames</a></li>
-<li><a href="TestMetaFixer.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/MetaFixer.Either.html" target="_top">Frames</a></li>
+<li><a href="MetaFixer.Either.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>
@@ -93,24 +93,29 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">org.apache.hadoop.hbase.master</div>
-<h2 title="Class TestMetaFixer" class="title">Class TestMetaFixer</h2>
+<h2 title="Class MetaFixer.Either" class="title">Class MetaFixer.Either&lt;L,R&gt;</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.master.TestMetaFixer</li>
+<li>org.apache.hadoop.hbase.master.MetaFixer.Either&lt;L,R&gt;</li>
 </ul>
 </li>
 </ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master">MetaFixer</a></dd>
+</dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.47">TestMetaFixer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.308">MetaFixer.Either</a>&lt;L,R&gt;
 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">A union over <code>L</code> and <code>R</code>.</div>
 </li>
 </ul>
 </div>
@@ -130,16 +135,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#left">left</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>org.junit.rules.TestName</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#name">name</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#right">right</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -156,7 +157,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#TestMetaFixer--">TestMetaFixer</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#Either-L-R-">Either</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a>&nbsp;left,
+      <a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a>&nbsp;right)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -174,38 +176,28 @@ 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>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#deleteRegion-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.hbase.client.RegionInfo-">deleteRegion</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
-            org.apache.hadoop.hbase.client.RegionInfo&nbsp;ri)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#getLeft--">getLeft</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>private static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#makeOverlap-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">makeOverlap</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
-           org.apache.hadoop.hbase.client.RegionInfo&nbsp;a,
-           org.apache.hadoop.hbase.client.RegionInfo&nbsp;b)</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#getRight--">getRight</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#setupBeforeClass--">setupBeforeClass</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#hasLeft--">hasLeft</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#hasRight--">hasRight</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#testOneRegionTable--">testOneRegionTable</a></span>()</code>
-<div class="block">Just make sure running fixMeta does right thing for the case
- of a single-region Table where the region gets dropped.</div>
-</td>
+<td class="colFirst"><code>static &lt;L,R&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;L,R&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#ofLeft-L-">ofLeft</a></span>(L&nbsp;left)</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#testOverlap--">testOverlap</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/master/TestMetaFixer.html#testPlugsHoles--">testPlugsHoles</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>static &lt;L,R&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;L,R&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#ofRight-R-">ofRight</a></span>(R&nbsp;right)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -229,31 +221,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="CLASS_RULE">
-<!--   -->
-</a>
-<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/master/TestMetaFixer.html#line.49">CLASS_RULE</a></pre>
-</li>
-</ul>
-<a name="name">
+<a name="left">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.52">name</a></pre>
+<h4>left</h4>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.309">left</a></pre>
 </li>
 </ul>
-<a name="TEST_UTIL">
+<a name="right">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.54">TEST_UTIL</a></pre>
+<h4>right</h4>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.310">right</a></pre>
 </li>
 </ul>
 </li>
@@ -264,13 +247,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="TestMetaFixer--">
+<a name="Either-java.lang.Object-java.lang.Object-">
+<!--   -->
+</a><a name="Either-L-R-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>TestMetaFixer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.47">TestMetaFixer</a>()</pre>
+<h4>Either</h4>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.320">Either</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a>&nbsp;left,
+       <a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a>&nbsp;right)</pre>
 </li>
 </ul>
 </li>
@@ -281,109 +267,62 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="setupBeforeClass--">
+<a name="ofLeft-java.lang.Object-">
 <!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setupBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.57">setupBeforeClass</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>
-<dd><code><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></code></dd>
-</dl>
-</li>
-</ul>
-<a name="tearDownAfterClass--">
+</a><a name="ofLeft-L-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.62">tearDownAfterClass</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>
-<dd><code><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></code></dd>
-</dl>
+<h4>ofLeft</h4>
+<pre>public static&nbsp;&lt;L,R&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;L,R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.312">ofLeft</a>(L&nbsp;left)</pre>
 </li>
 </ul>
-<a name="deleteRegion-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.hbase.client.RegionInfo-">
+<a name="ofRight-java.lang.Object-">
+<!--   -->
+</a><a name="ofRight-R-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deleteRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.66">deleteRegion</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
-                          org.apache.hadoop.hbase.client.RegionInfo&nbsp;ri)
-                   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>
-<dd><code><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></code></dd>
-</dl>
+<h4>ofRight</h4>
+<pre>public static&nbsp;&lt;L,R&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;L,R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.316">ofRight</a>(R&nbsp;right)</pre>
 </li>
 </ul>
-<a name="testPlugsHoles--">
+<a name="hasLeft--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>testPlugsHoles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.73">testPlugsHoles</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>
-<dd><code><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></code></dd>
-</dl>
+<h4>hasLeft</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.325">hasLeft</a>()</pre>
 </li>
 </ul>
-<a name="testOneRegionTable--">
+<a name="getLeft--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>testOneRegionTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.113">testOneRegionTable</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>
-<div class="block">Just make sure running fixMeta does right thing for the case
- of a single-region Table where the region gets dropped.
- There is nothing much we can do. We can't restore what
- we don't know about (at least from a read of hbase:meta).</div>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><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></code></dd>
-</dl>
+<h4>getLeft</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.329">getLeft</a>()</pre>
 </li>
 </ul>
-<a name="makeOverlap-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">
+<a name="hasRight--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>makeOverlap</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.132">makeOverlap</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
-                                org.apache.hadoop.hbase.client.RegionInfo&nbsp;a,
-                                org.apache.hadoop.hbase.client.RegionInfo&nbsp;b)
-                         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>
-<dd><code><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></code></dd>
-</dl>
+<h4>hasRight</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.336">hasRight</a>()</pre>
 </li>
 </ul>
-<a name="testOverlap--">
+<a name="getRight--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>testOverlap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.146">testOverlap</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>
-<dd><code><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></code></dd>
-</dl>
+<h4>getRight</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html#line.340">getRight</a>()</pre>
 </li>
 </ul>
 </li>
@@ -405,7 +344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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/TestMetaFixer.html">Use</a></li>
+<li><a href="class-use/MetaFixer.Either.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>
@@ -414,12 +353,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixerNoCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestMetaFixer.html" target="_top">Frames</a></li>
-<li><a href="TestMetaFixer.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/MetaFixer.Either.html" target="_top">Frames</a></li>
+<li><a href="MetaFixer.Either.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>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/MetaFixer.html b/devapidocs/org/apache/hadoop/hbase/master/MetaFixer.html
index 19a7f3c..bad046f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/MetaFixer.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/MetaFixer.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":9,"i7":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":10,"i5":10,"i6":10,"i7":9,"i8":9,"i9":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/MetaFixer.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.55">MetaFixer</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.52">MetaFixer</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">Server-side fixing of bad or inconsistent state in hbase:meta.
  Distinct from MetaTableAccessor because <a href="../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html" title="class in org.apache.hadoop.hbase"><code>MetaTableAccessor</code></a> is about low-level
@@ -123,6 +123,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">L</a>,<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="type parameter in MetaFixer.Either">R</a>&gt;</span></code>
+<div class="block">A union over <code>L</code> and <code>R</code>.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- =========== FIELD SUMMARY =========== -->
 <ul class="blockList">
 <li class="blockList"><a name="field.summary">
@@ -190,7 +211,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>private <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#buildRegionInfo-org.apache.hadoop.hbase.TableName-byte:A-byte:A-">buildRegionInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn,
                byte[]&nbsp;start,
                byte[]&nbsp;end)</code>&nbsp;</td>
@@ -203,31 +224,44 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i2" class="altColor">
+<td class="colFirst"><code>private static <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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createMetaEntries-org.apache.hadoop.hbase.master.MasterServices-java.util.List-">createMetaEntries</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                 <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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegionInfos)</code>
+<div class="block">Create entries in the <code>hbase:meta</code> for each provided <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private static <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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createRegionInfosForHoles-java.util.List-">createRegionInfosForHoles</a></span>(<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;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../ [...]
+<div class="block">Create a new <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> corresponding to each provided "hole" pair.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#fix--">fix</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#fixHoles-org.apache.hadoop.hbase.master.CatalogJanitor.Report-">fixHoles</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.Report</a>&nbsp;report)</code>
 <div class="block">If hole, it papers it over by adding a region in the filesystem and to hbase:meta.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#fixOverlaps-org.apache.hadoop.hbase.master.CatalogJanitor.Report-">fixOverlaps</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.Report</a>&nbsp;report)</code>
 <div class="block">Fix overlaps noted in CJ consistency report.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apach [...]
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getRegionInfoWithLargestEndKey-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">getRegionInfoWithLargestEndKey</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;a,
                               <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;b)</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>(package private) static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#isOverlap-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.util.Pair-">isOverlap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri,
          <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;pair)</code>&nbsp;</td>
@@ -260,7 +294,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.56">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.53">LOG</a></pre>
 </li>
 </ul>
 <a name="MAX_MERGE_COUNT_KEY">
@@ -269,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_MERGE_COUNT_KEY</h4>
-<pre>private static 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/master/MetaFixer.html#line.57">MAX_MERGE_COUNT_KEY</a></pre>
+<pre>private static 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/master/MetaFixer.html#line.54">MAX_MERGE_COUNT_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.MetaFixer.MAX_MERGE_COUNT_KEY">Constant Field Values</a></dd>
@@ -282,7 +316,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_MERGE_COUNT_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.58">MAX_MERGE_COUNT_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.55">MAX_MERGE_COUNT_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.MetaFixer.MAX_MERGE_COUNT_DEFAULT">Constant Field Values</a></dd>
@@ -295,7 +329,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>masterServices</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.59">masterServices</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.57">masterServices</a></pre>
 </li>
 </ul>
 <a name="maxMergeCount">
@@ -304,7 +338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>maxMergeCount</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.63">maxMergeCount</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.61">maxMergeCount</a></pre>
 <div class="block">Maximum for many regions to merge at a time.</div>
 </li>
 </ul>
@@ -322,7 +356,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetaFixer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.65">MetaFixer</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.63">MetaFixer</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
 </li>
 </ul>
 </li>
@@ -339,7 +373,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fix</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.71">fix</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.69">fix</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>
@@ -353,14 +387,19 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fixHoles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.89">fixHoles</a>(<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.Report</a>&nbsp;report)
-       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>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.87">fixHoles</a>(<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.Report</a>&nbsp;report)</pre>
 <div class="block">If hole, it papers it over by adding a region in the filesystem and to hbase:meta.
  Does not assign.</div>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><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></code></dd>
-</dl>
+</li>
+</ul>
+<a name="createRegionInfosForHoles-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createRegionInfosForHoles</h4>
+<pre>private static&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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.111">createRegionInfosForHoles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/uti [...]
+<div class="block">Create a new <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> corresponding to each provided "hole" pair.</div>
 </li>
 </ul>
 <a name="getHoleCover-org.apache.hadoop.hbase.util.Pair-">
@@ -369,10 +408,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getHoleCover</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.117">getHoleCover</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache [...]
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.127">getHoleCover</a>(<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html"  [...]
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Calculated RegionInfo that covers the hole <code>hole</code></dd>
+<dd>Attempts to calculate a new <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> that covers the region range described
+   in <code>hole</code>.</dd>
 </dl>
 </li>
 </ul>
@@ -382,9 +422,28 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildRegionInfo</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.153">buildRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn,
-                                   byte[]&nbsp;start,
-                                   byte[]&nbsp;end)</pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.162">buildRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn,
+                                          byte[]&nbsp;start,
+                                          byte[]&nbsp;end)</pre>
+</li>
+</ul>
+<a name="createMetaEntries-org.apache.hadoop.hbase.master.MasterServices-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createMetaEntries</h4>
+<pre>private static&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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.173">createMetaEntries</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServic [...]
+                                                  <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;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegionInfos)</pre>
+<div class="block">Create entries in the <code>hbase:meta</code> for each provided <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>. Best effort.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>masterServices</code> - used to connect to <code>hbase:meta</code></dd>
+<dd><code>newRegionInfos</code> - the new <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> entries to add to the filesystem</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>a list of <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> entries for which <code>hbase:meta</code> entries were
+   successfully created</dd>
+</dl>
 </li>
 </ul>
 <a name="fixOverlaps-org.apache.hadoop.hbase.master.CatalogJanitor.Report-">
@@ -393,7 +452,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fixOverlaps</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.160">fixOverlaps</a>(<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.Report</a>&nbsp;report)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.217">fixOverlaps</a>(<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.Report.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor.Report</a>&nbsp;report)
           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">Fix overlaps noted in CJ consistency report.</div>
 <dl>
@@ -408,7 +467,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>calculateMerges</h4>
-<pre>static&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;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-htm [...]
+<pre>static&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;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-htm [...]
                                                    <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;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hado [...]
 <div class="block">Run through <code>overlaps</code> and return a list of merges to run.
  Presumes overlaps are ordered (which they are coming out of the CatalogJanitor
@@ -426,7 +485,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfoWithLargestEndKey</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.212">getRegionInfoWithLargestEndKey</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;a,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.269">getRegionInfoWithLargestEndKey</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;a,
                                                  <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;b)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -441,7 +500,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isOverlap</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.240">isOverlap</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri,
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/MetaFixer.html#line.297">isOverlap</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri,
                          <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;pair)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -479,7 +538,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/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/MetaFixer.html" target="_top">Frames</a></li>
@@ -503,7 +562,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/MetricsAssignmentManager.html b/devapidocs/org/apache/hadoop/hbase/master/MetricsAssignmentManager.html
index 35b910b..1aa0089 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/MetricsAssignmentManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/MetricsAssignmentManager.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManagerSource.html" title="interface in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -624,7 +624,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManagerSource.html" title="interface in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
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 f8add9f..5c89e3f 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/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>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html b/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
index eeff966..f7cd0e1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/class-use/MasterServices.html
@@ -403,13 +403,20 @@
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createMetaEntries-org.apache.hadoop.hbase.master.MasterServices-java.util.List-">createMetaEntries</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices,
+                 <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegionInfos)</code>
+<div class="block">Create entries in the <code>hbase:meta</code> for each provided <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)</code>
 <div class="block">
  Create a <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setMasterServices-org.apache.hadoop.hbase.master.MasterServices-">setMasterServices</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</code>
 <div class="block">Set the master service.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/class-use/MetaFixer.Either.html b/devapidocs/org/apache/hadoop/hbase/master/class-use/MetaFixer.Either.html
new file mode 100644
index 0000000..49bb7ad
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/master/class-use/MetaFixer.Either.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.MetaFixer.Either (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.MetaFixer.Either (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/class-use/MetaFixer.Either.html" target="_top">Frames</a></li>
+<li><a href="MetaFixer.Either.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.master.MetaFixer.Either" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.MetaFixer.Either</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/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</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.master">org.apache.hadoop.hbase.master</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.master">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</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/master/package-summary.html">org.apache.hadoop.hbase.master</a> that return <a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</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 &lt;L,R&gt;&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;L,R&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.Either.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#ofLeft-L-">ofLeft</a></span>(L&nbsp;left)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static &lt;L,R&gt;&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;L,R&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.Either.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html#ofRight-R-">ofRight</a></span>(R&nbsp;right)</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/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/class-use/MetaFixer.Either.html" target="_top">Frames</a></li>
+<li><a href="MetaFixer.Either.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;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-frame.html b/devapidocs/org/apache/hadoop/hbase/master/package-frame.html
index 6f53abb..09df6ab 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-frame.html
@@ -69,6 +69,7 @@
 <li><a href="MasterStatusServlet.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MasterStatusServlet</a></li>
 <li><a href="MasterWalManager.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MasterWalManager</a></li>
 <li><a href="MetaFixer.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MetaFixer</a></li>
+<li><a href="MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MetaFixer.Either</a></li>
 <li><a href="MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MetricsAssignmentManager</a></li>
 <li><a href="MetricsAssignmentManagerSourceImpl.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MetricsAssignmentManagerSourceImpl</a></li>
 <li><a href="MetricsMaster.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">MetricsMaster</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-summary.html b/devapidocs/org/apache/hadoop/hbase/master/package-summary.html
index 1269e16..d277590 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-summary.html
@@ -397,105 +397,111 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master">MetaFixer.Either</a>&lt;L,R&gt;</td>
+<td class="colLast">
+<div class="block">A union over <code>L</code> and <code>R</code>.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master">MetricsAssignmentManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsAssignmentManagerSourceImpl</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a></td>
 <td class="colLast">
 <div class="block">This class is for maintaining the various master statistics
  and publishing them through the metrics interfaces.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterFileSystem</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterFilesystemSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterFilesystemSourceImpl</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterProcSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterProcSourceFactoryImpl</a></td>
 <td class="colLast">
 <div class="block">Factory to create MetricsMasterProcSource when given a MetricsMasterWrapper</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterProcSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterProcSourceImpl</a></td>
 <td class="colLast">
 <div class="block">Hadoop2 implementation of MetricsMasterSource.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterQuotaSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterQuotaSourceFactoryImpl</a></td>
 <td class="colLast">
 <div class="block">Factory to create MetricsMasterQuotaSource instances when given a MetricsMasterWrapper.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterQuotaSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterQuotaSourceImpl</a></td>
 <td class="colLast">
 <div class="block">Implementation of <a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterQuotaSource.html" title="interface in org.apache.hadoop.hbase.master"><code>MetricsMasterQuotaSource</code></a> which writes the values passed in via the
  interface to the metrics backend.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterSourceFactoryImpl</a></td>
 <td class="colLast">
 <div class="block">Factory to create MetricsMasterSource when given a  MetricsMasterWrapper</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterSourceImpl</a></td>
 <td class="colLast">
 <div class="block">Hadoop2 implementation of MetricsMasterSource.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsMasterWrapperImpl</a></td>
 <td class="colLast">
 <div class="block">Impl for exposing HMaster Information through JMX</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsSnapshot.html" title="class in org.apache.hadoop.hbase.master">MetricsSnapshot</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MetricsSnapshotSourceImpl.html" title="class in org.apache.hadoop.hbase.master">MetricsSnapshotSourceImpl</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MirroringTableStateManager.html" title="class in org.apache.hadoop.hbase.master">MirroringTableStateManager</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">Since 2.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/MobCompactionChore.html" title="class in org.apache.hadoop.hbase.master">MobCompactionChore</a></td>
 <td class="colLast">
 <div class="block">The Class MobCompactChore for running compaction regularly to merge small mob files.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a></td>
 <td class="colLast">
 <div class="block">Wrapper over the rack resolution utility in Hadoop.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionPlacementMaintainer.html" title="class in org.apache.hadoop.hbase.master">RegionPlacementMaintainer</a></td>
 <td class="colLast">
 <div class="block">A tool that is used for manipulating and viewing favored nodes information
  for regions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionPlacementMaintainer.RandomizedMatrix.html" title="class in org.apache.hadoop.hbase.master">RegionPlacementMaintainer.RandomizedMatrix</a></td>
 <td class="colLast">
 <div class="block">Some algorithms for solving the assignment problem may traverse workers or
@@ -504,90 +510,90 @@
  costs are uniform.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a></td>
 <td class="colLast">
 <div class="block">Stores the plan for the move of an individual region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.RegionPlanComparator.html" title="class in org.apache.hadoop.hbase.master">RegionPlan.RegionPlanComparator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></td>
 <td class="colLast">
 <div class="block">Tracks the online region servers via ZK.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionsRecoveryChore.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryChore</a></td>
 <td class="colLast">
 <div class="block">This chore, every time it runs, will try to recover regions with high store ref count
  by reopening them</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionsRecoveryConfigManager.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryConfigManager</a></td>
 <td class="colLast">
 <div class="block">Config manager for RegionsRecovery Chore - Dynamically reload config and update chore
  accordingly</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a></td>
 <td class="colLast">
 <div class="block">State of a Region while undergoing transitions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a></td>
 <td class="colLast">
 <div class="block">The ServerManager class manages info about region servers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html" title="class in org.apache.hadoop.hbase.master">SnapshotOfRegionAssignmentFromMeta</a></td>
 <td class="colLast">
 <div class="block">Used internally for reading meta and constructing datastructures that are
  then queried, for things like regions to regionservers, table to regions, etc.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager</a></td>
 <td class="colLast">
 <div class="block">Distributes the task of log splitting to the available region servers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.Task.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager.Task</a></td>
 <td class="colLast">
 <div class="block">in memory state of an active task.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TaskBatch.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager.TaskBatch</a></td>
 <td class="colLast">
 <div class="block">Keeps track of the batch of tasks submitted together by a caller in splitLogDistributed().</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a></td>
 <td class="colLast">
 <div class="block">Tracks the switch of split and merge states in ZK</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.SwitchStateTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker.SwitchStateTracker</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SplitWALManager.html" title="class in org.apache.hadoop.hbase.master">SplitWALManager</a></td>
 <td class="colLast">
 <div class="block">Create <a href="../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>SplitWALProcedure</code></a> for each WAL which need to split.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/SplitWALManager.SplitWorkerAssigner.html" title="class in org.apache.hadoop.hbase.master">SplitWALManager.SplitWorkerAssigner</a></td>
 <td class="colLast">
 <div class="block">help assign and release a worker for each WAL splitting task
@@ -595,14 +601,14 @@
  If a task failed to acquire a worker, it will suspend and wait for workers available</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TableNamespaceManager.html" title="class in org.apache.hadoop.hbase.master">TableNamespaceManager</a></td>
 <td class="colLast">
 <div class="block">This is a helper class used internally to manage the namespace metadata that is stored in the ns
  family in meta table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a></td>
 <td class="colLast">
 <div class="block">This is a helper class used to manage table states.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 5bc120d..4dd252d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -181,6 +181,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServicesVersionWrapper.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServicesVersionWrapper</span></a> (implements org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface)</li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterWalManager</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaFixer</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaFixer.Either</span></a>&lt;L,R&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsAssignmentManager.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsAssignmentManager</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterFileSystem.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterFileSystem</span></a></li>
@@ -363,11 +364,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.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/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/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/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.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>
+<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/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-use.html b/devapidocs/org/apache/hadoop/hbase/master/package-use.html
index b0690d8..8adfd92 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-use.html
@@ -483,177 +483,182 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsAssignmentManagerSource.html#org.apache.hadoop.hbase.master">MetricsAssignmentManagerSource</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetaFixer.Either.html#org.apache.hadoop.hbase.master">MetaFixer.Either</a>
+<div class="block">A union over <code>L</code> and <code>R</code>.</div>
+</td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsAssignmentManagerSource.html#org.apache.hadoop.hbase.master">MetricsAssignmentManagerSource</a>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMaster.html#org.apache.hadoop.hbase.master">MetricsMaster</a>
 <div class="block">This class is for maintaining the various master statistics
  and publishing them through the metrics interfaces.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterFileSystem.html#org.apache.hadoop.hbase.master">MetricsMasterFileSystem</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterFileSystemSource.html#org.apache.hadoop.hbase.master">MetricsMasterFileSystemSource</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterProcSource.html#org.apache.hadoop.hbase.master">MetricsMasterProcSource</a>
 <div class="block">Interface that classes that expose metrics about the master will implement.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterProcSourceFactory.html#org.apache.hadoop.hbase.master">MetricsMasterProcSourceFactory</a>
 <div class="block">Interface of a factory to create MetricsMasterSource when given a MetricsMasterWrapper</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterQuotaSource.html#org.apache.hadoop.hbase.master">MetricsMasterQuotaSource</a>
 <div class="block">A collection of exposed metrics for space quotas from the HBase Master.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterQuotaSourceFactory.html#org.apache.hadoop.hbase.master">MetricsMasterQuotaSourceFactory</a>
 <div class="block">Interface of a factory to create MetricsMasterQuotaSource when given a MetricsMasterWrapper.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterSource.html#org.apache.hadoop.hbase.master">MetricsMasterSource</a>
 <div class="block">Interface that classes that expose metrics about the master will implement.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterSourceFactory.html#org.apache.hadoop.hbase.master">MetricsMasterSourceFactory</a>
 <div class="block">Interface of a factory to create MetricsMasterSource when given a MetricsMasterWrapper</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterSourceFactoryImpl.FactoryStorage.html#org.apache.hadoop.hbase.master">MetricsMasterSourceFactoryImpl.FactoryStorage</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsMasterWrapper.html#org.apache.hadoop.hbase.master">MetricsMasterWrapper</a>
 <div class="block">This is the interface that will expose information to hadoop1/hadoop2 implementations of the
  MetricsMasterSource.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MetricsSnapshotSource.html#org.apache.hadoop.hbase.master">MetricsSnapshotSource</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/MobCompactionChore.html#org.apache.hadoop.hbase.master">MobCompactionChore</a>
 <div class="block">The Class MobCompactChore for running compaction regularly to merge small mob files.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RackManager.html#org.apache.hadoop.hbase.master">RackManager</a>
 <div class="block">Wrapper over the rack resolution utility in Hadoop.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RegionPlan.html#org.apache.hadoop.hbase.master">RegionPlan</a>
 <div class="block">Stores the plan for the move of an individual region.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RegionServerTracker.html#org.apache.hadoop.hbase.master">RegionServerTracker</a>
 <div class="block">Tracks the online region servers via ZK.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RegionsRecoveryChore.html#org.apache.hadoop.hbase.master">RegionsRecoveryChore</a>
 <div class="block">This chore, every time it runs, will try to recover regions with high store ref count
  by reopening them</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RegionsRecoveryConfigManager.html#org.apache.hadoop.hbase.master">RegionsRecoveryConfigManager</a>
 <div class="block">Config manager for RegionsRecovery Chore - Dynamically reload config and update chore
  accordingly</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RegionState.html#org.apache.hadoop.hbase.master">RegionState</a>
 <div class="block">State of a Region while undergoing transitions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/RegionState.State.html#org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/ServerListener.html#org.apache.hadoop.hbase.master">ServerListener</a>
 <div class="block">Get notification of server registration events.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/ServerManager.html#org.apache.hadoop.hbase.master">ServerManager</a>
 <div class="block">The ServerManager class manages info about region servers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/ServerManager.FlushedSequenceIdFlusher.html#org.apache.hadoop.hbase.master">ServerManager.FlushedSequenceIdFlusher</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/ServerManager.ServerLiveState.html#org.apache.hadoop.hbase.master">ServerManager.ServerLiveState</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SnapshotOfRegionAssignmentFromMeta.html#org.apache.hadoop.hbase.master">SnapshotOfRegionAssignmentFromMeta</a>
 <div class="block">Used internally for reading meta and constructing datastructures that are
  then queried, for things like regions to regionservers, table to regions, etc.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitLogManager.html#org.apache.hadoop.hbase.master">SplitLogManager</a>
 <div class="block">Distributes the task of log splitting to the available region servers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitLogManager.ResubmitDirective.html#org.apache.hadoop.hbase.master">SplitLogManager.ResubmitDirective</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitLogManager.Task.html#org.apache.hadoop.hbase.master">SplitLogManager.Task</a>
 <div class="block">in memory state of an active task.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitLogManager.TaskBatch.html#org.apache.hadoop.hbase.master">SplitLogManager.TaskBatch</a>
 <div class="block">Keeps track of the batch of tasks submitted together by a caller in splitLogDistributed().</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitLogManager.TerminationStatus.html#org.apache.hadoop.hbase.master">SplitLogManager.TerminationStatus</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitLogManager.TimeoutMonitor.html#org.apache.hadoop.hbase.master">SplitLogManager.TimeoutMonitor</a>
 <div class="block">Periodically checks all active tasks and resubmits the ones that have timed out</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitOrMergeTracker.html#org.apache.hadoop.hbase.master">SplitOrMergeTracker</a>
 <div class="block">Tracks the switch of split and merge states in ZK</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitOrMergeTracker.SwitchStateTracker.html#org.apache.hadoop.hbase.master">SplitOrMergeTracker.SwitchStateTracker</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitWALManager.html#org.apache.hadoop.hbase.master">SplitWALManager</a>
 <div class="block">Create <a href="../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><code>SplitWALProcedure</code></a> for each WAL which need to split.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/SplitWALManager.SplitWorkerAssigner.html#org.apache.hadoop.hbase.master">SplitWALManager.SplitWorkerAssigner</a>
 <div class="block">help assign and release a worker for each WAL splitting task
  For each worker, concurrent running splitting task should be no more than maxSplitTasks
  If a task failed to acquire a worker, it will suspend and wait for workers available</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/TableNamespaceManager.html#org.apache.hadoop.hbase.master">TableNamespaceManager</a>
 <div class="block">This is a helper class used internally to manage the namespace metadata that is stored in the ns
  family in meta table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/master/class-use/TableStateManager.html#org.apache.hadoop.hbase.master">TableStateManager</a>
 <div class="block">This is a helper class used to manage table states.</div>
 </td>
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 084b9ad..17cc11e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -221,10 +221,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/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/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/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/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index b08c210..2f47eed 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -430,19 +430,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/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/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/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/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/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/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/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/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</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 14956c4..8947aa3 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,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/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/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/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/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/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/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
index 2525a0e..7b64815 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
@@ -133,8 +133,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.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureStoreTracker.DeleteState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</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 c59f77b..835b833 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/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/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/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/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/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/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html b/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html
index 7617d11..1548182 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.345">SecureBulkLoadManager.SecureBulkLoadListener</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.348">SecureBulkLoadManager.SecureBulkLoadListener</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/regionserver/HRegion.BulkLoadListener.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.BulkLoadListener</a></pre>
 </li>
@@ -252,7 +252,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.347">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.350">fs</a></pre>
 </li>
 </ul>
 <a name="stagingDir">
@@ -261,7 +261,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>stagingDir</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/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.348">stagingDir</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/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.351">stagingDir</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -270,7 +270,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.349">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.352">conf</a></pre>
 </li>
 </ul>
 <a name="srcFs">
@@ -279,7 +279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>srcFs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.351">srcFs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.354">srcFs</a></pre>
 </li>
 </ul>
 <a name="origPermissions">
@@ -288,7 +288,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>origPermissions</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.fs.permission.FsPermission&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.352">origPermission [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.fs.permission.FsPermission&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.355">origPermission [...]
 </li>
 </ul>
 </li>
@@ -305,7 +305,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SecureBulkLoadListener</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.354">SecureBulkLoadListener</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.357">SecureBulkLoadListener</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                               <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;stagingDir,
                               org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
@@ -324,7 +324,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareBulkLoad</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/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.362">prepareBulkLoad</a>(byte[]&nbsp;family,
+<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/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.365">prepareBulkLoad</a>(byte[]&nbsp;family,
                               <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;srcPath,
                               boolean&nbsp;copyFile)
                        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>
@@ -349,7 +349,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>doneBulkLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.403">doneBulkLoad</a>(byte[]&nbsp;family,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.406">doneBulkLoad</a>(byte[]&nbsp;family,
                          <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;srcPath)
                   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="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#doneBulkLoad-byte:A-java.lang.String-">HRegion.BulkLoadListener</a></code></span></div>
@@ -371,7 +371,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>closeSrcFs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.408">closeSrcFs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.411">closeSrcFs</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>
@@ -385,7 +385,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockList">
 <li class="blockList">
 <h4>failedBulkLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.416">failedBulkLoad</a>(byte[]&nbsp;family,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.419">failedBulkLoad</a>(byte[]&nbsp;family,
                            <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;srcPath)
                     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="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#failedBulkLoad-byte:A-java.lang.String-">HRegion.BulkLoadListener</a></code></span></div>
@@ -407,7 +407,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isFile</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.458">isFile</a>(org.apache.hadoop.fs.Path&nbsp;p)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html#line.461">isFile</a>(org.apache.hadoop.fs.Path&nbsp;p)
                 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">Check if the path is referencing a file.
  This is mainly needed to avoid symlinks.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html b/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html
index d49d1a0..f26a56e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html
@@ -479,7 +479,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fsCreatedListener</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function">Consumer</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.178">fsCreatedListener</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function">Consumer</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.167">fsCreatedListener</a></pre>
 </li>
 </ul>
 </li>
@@ -572,7 +572,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setFsCreatedListener</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.181">setFsCreatedListener</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function">Consumer</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;fsCreatedListener)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.170">setFsCreatedListener</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html?is-external=true" title="class or interface in java.util.function">Consumer</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;fsCreatedListener)</pre>
 </li>
 </ul>
 <a name="incrementUgiReference-org.apache.hadoop.security.UserGroupInformation-">
@@ -581,7 +581,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementUgiReference</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.186">incrementUgiReference</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.175">incrementUgiReference</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
 </li>
 </ul>
 <a name="decrementUgiReference-org.apache.hadoop.security.UserGroupInformation-">
@@ -590,7 +590,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>decrementUgiReference</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.198">decrementUgiReference</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.187">decrementUgiReference</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
 </li>
 </ul>
 <a name="isUserReferenced-org.apache.hadoop.security.UserGroupInformation-">
@@ -599,7 +599,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isUserReferenced</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.210">isUserReferenced</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.199">isUserReferenced</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;ugi)</pre>
 </li>
 </ul>
 <a name="secureBulkLoadHFiles-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest-">
@@ -608,7 +608,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>secureBulkLoadHFiles</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<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;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.216">secureBulkLoadHFiles</a>(<a href="../../.. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<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;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.205">secureBulkLoadHFiles</a>(<a href="../../.. [...]
                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest&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>
 <dl>
@@ -623,7 +623,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>secureBulkLoadHFiles</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<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;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.221">secureBulkLoadHFiles</a>(<a href="../../.. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<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;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.210">secureBulkLoadHFiles</a>(<a href="../../.. [...]
                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest&nbsp;request,
                                                                         <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;<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;&nbsp;clusterIds)
                                                                  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>
@@ -639,7 +639,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createStagingDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.315">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.318">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
                                                    <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                                                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                             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>
@@ -655,7 +655,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createStagingDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.324">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.327">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
                                                    <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                                                    <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;randomDir)
                                             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>
@@ -671,7 +671,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getActiveUser</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.333">getActiveUser</a>()
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#line.336">getActiveUser</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>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 7b72a34..3101ec2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -735,20 +735,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/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/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/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/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/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.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/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/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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</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 e1c6d6d..dd8850d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,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.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>
 </ul>
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 e39e381..ed22a14 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,9 +248,9 @@
 <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/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/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/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/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/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 795500d..b47c8cc 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 4d7170b..2155150 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -163,9 +163,9 @@
 <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/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>
 <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/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/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></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 8fdccaa..d2656d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -193,8 +193,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.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <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 6d46ba3..d07f5b8 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/class-use/Pair.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
index a7e11bd..7589b8e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
@@ -1167,7 +1167,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#getHoleCover-org.apache.hadoop.hbase.util.Pair-">getHoleCover</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.cl [...]
 </tr>
 <tr class="rowColor">
@@ -1195,6 +1195,12 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">Run through <code>overlaps</code> and return a list of merges to run.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <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;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetaFixer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/MetaFixer.html#createRegionInfosForHoles-java.util.List-">createRegionInfosForHoles</a></span>(<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;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hado [...]
+<div class="block">Create a new <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> corresponding to each provided "hole" pair.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index da6e9aa..24503c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -559,14 +559,14 @@
 <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/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/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/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/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/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/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/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/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/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/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/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index 9b7794b..c79d27b 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -2327,6 +2327,7 @@
 <li type="circle">org.apache.hadoop.hbase.codec.<a href="org/apache/hadoop/hbase/codec/MessageCodec.html" title="class in org.apache.hadoop.hbase.codec"><span class="typeNameLink">MessageCodec</span></a> (implements org.apache.hadoop.hbase.codec.<a href="org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.screen.top.<a href="org/apache/hadoop/hbase/hbtop/screen/top/MessageModeScreenPresenter.html" title="class in org.apache.hadoop.hbase.hbtop.screen.top"><span class="typeNameLink">MessageModeScreenPresenter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaFixer</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MetaFixer.Either.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaFixer.Either</span></a>&lt;L,R&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaTableAccessor.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaTableAccessor.CollectingVisitor.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.CollectingVisitor</span></a>&lt;T&gt; (implements org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html" title="interface in org.apache.hadoop.hbase">MetaTableAccessor.Visitor</a>)
 <ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index ac6ebdd..7c2f73a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  justification="Intentional; to be modified in test")<a name="line.10"></a>
 <span class="sourceLineNo">011</span>public class Version {<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String version = new String("3.0.0-SNAPSHOT");<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String revision = "0bf933b0686c78601f95c580ff7436918c4efcfe";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String revision = "499ff32f00d8518a5c770fae9799b5f8e643c795";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String user = "jenkins";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String date = "Mon Jan 13 14:36:27 UTC 2020";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String date = "Tue Jan 14 14:35:57 UTC 2020";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>  public static final String url = "git://jenkins-websites-he-de.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.16"></a>
 <span class="sourceLineNo">017</span>  public static final String srcChecksum = "(stdin)=";<a name="line.17"></a>
 <span class="sourceLineNo">018</span>}<a name="line.18"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html
new file mode 100644
index 0000000..f9d46e9
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/MetaFixer.Either.html
@@ -0,0 +1,419 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.Collections;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Optional;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.Set;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.SortedSet;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.TreeSet;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.stream.Collectors;<a name="line.28"></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.MetaTableAccessor;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.Logger;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.slf4j.LoggerFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><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> * Server-side fixing of bad or inconsistent state in hbase:meta.<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * Distinct from MetaTableAccessor because {@link MetaTableAccessor} is about low-level<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * manipulations driven by the Master. This class MetaFixer is<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * employed by the Master and it 'knows' about holes and orphans<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * and encapsulates their fixing on behalf of the Master.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> */<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceAudience.Private<a name="line.51"></a>
+<span class="sourceLineNo">052</span>class MetaFixer {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(MetaFixer.class);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final String MAX_MERGE_COUNT_KEY = "hbase.master.metafixer.max.merge.count";<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static final int MAX_MERGE_COUNT_DEFAULT = 10;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private final MasterServices masterServices;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * Maximum for many regions to merge at a time.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private final int maxMergeCount;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  MetaFixer(MasterServices masterServices) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.masterServices = masterServices;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    this.maxMergeCount = this.masterServices.getConfiguration().<a name="line.65"></a>
+<span class="sourceLineNo">066</span>        getInt(MAX_MERGE_COUNT_KEY, MAX_MERGE_COUNT_DEFAULT);<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>  void fix() throws IOException {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    CatalogJanitor.Report report = this.masterServices.getCatalogJanitor().getLastReport();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    if (report == null) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      LOG.info("CatalogJanitor has not generated a report yet; run 'catalogjanitor_run' in " +<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          "shell or wait until CatalogJanitor chore runs.");<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      return;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    fixHoles(report);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    fixOverlaps(report);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    // Run the ReplicationBarrierCleaner here; it may clear out rep_barrier rows which<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    // can help cleaning up damaged hbase:meta.<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    this.masterServices.runReplicationBarrierCleaner();<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>  /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * If hole, it papers it over by adding a region in the filesystem and to hbase:meta.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Does not assign.<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  void fixHoles(CatalogJanitor.Report report) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    final List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; holes = report.getHoles();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    if (holes.isEmpty()) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      LOG.info("CatalogJanitor Report contains no holes to fix. Skipping.");<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      return;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>    LOG.info("Identified {} region holes to fix. Detailed fixup progress logged at DEBUG.",<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      holes.size());<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    final List&lt;RegionInfo&gt; newRegionInfos = createRegionInfosForHoles(holes);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    final List&lt;RegionInfo&gt; newMetaEntries = createMetaEntries(masterServices, newRegionInfos);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    final TransitRegionStateProcedure[] assignProcedures = masterServices<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      .getAssignmentManager()<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      .createRoundRobinAssignProcedures(newMetaEntries);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    masterServices.getMasterProcedureExecutor().submitProcedures(assignProcedures);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    LOG.info(<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      "Scheduled {}/{} new regions for assignment.", assignProcedures.length, holes.size());<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * Create a new {@link RegionInfo} corresponding to each provided "hole" pair.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static List&lt;RegionInfo&gt; createRegionInfosForHoles(<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    final List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; holes) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    final List&lt;RegionInfo&gt; newRegionInfos = holes.stream()<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      .map(MetaFixer::getHoleCover)<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      .filter(Optional::isPresent)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      .map(Optional::get)<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      .collect(Collectors.toList());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    LOG.debug("Constructed {}/{} RegionInfo descriptors corresponding to identified holes.",<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      newRegionInfos.size(), holes.size());<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    return newRegionInfos;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return Attempts to calculate a new {@link RegionInfo} that covers the region range described<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   *   in {@code hole}.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private static Optional&lt;RegionInfo&gt; getHoleCover(Pair&lt;RegionInfo, RegionInfo&gt; hole) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    final RegionInfo left = hole.getFirst();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    final RegionInfo right = hole.getSecond();<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    if (left.getTable().equals(right.getTable())) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      // Simple case.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      if (Bytes.compareTo(left.getEndKey(), right.getStartKey()) &gt;= 0) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        LOG.warn("Skipping hole fix; left-side endKey is not less than right-side startKey;"<a name="line.134"></a>
+<span class="sourceLineNo">135</span>          + " left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        return Optional.empty();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      return Optional.of(buildRegionInfo(left.getTable(), left.getEndKey(), right.getStartKey()));<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>    final boolean leftUndefined = left.equals(RegionInfo.UNDEFINED);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    final boolean rightUndefined = right.equals(RegionInfo.UNDEFINED);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    final boolean last = left.isLast();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    final boolean first = right.isFirst();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    if (leftUndefined &amp;&amp; rightUndefined) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.warn("Skipping hole fix; both the hole left-side and right-side RegionInfos are " +<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        "UNDEFINED; left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      return Optional.empty();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (leftUndefined || last) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return Optional.of(<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        buildRegionInfo(right.getTable(), HConstants.EMPTY_START_ROW, right.getStartKey()));<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (rightUndefined || first) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return Optional.of(<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        buildRegionInfo(left.getTable(), left.getEndKey(), HConstants.EMPTY_END_ROW));<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    LOG.warn("Skipping hole fix; don't know what to do with left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return Optional.empty();<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>  private static RegionInfo buildRegionInfo(TableName tn, byte [] start, byte [] end) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return RegionInfoBuilder.newBuilder(tn).setStartKey(start).setEndKey(end).build();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * Create entries in the {@code hbase:meta} for each provided {@link RegionInfo}. Best effort.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @param masterServices used to connect to {@code hbase:meta}<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param newRegionInfos the new {@link RegionInfo} entries to add to the filesystem<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * @return a list of {@link RegionInfo} entries for which {@code hbase:meta} entries were<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   *   successfully created<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private static List&lt;RegionInfo&gt; createMetaEntries(final MasterServices masterServices,<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    final List&lt;RegionInfo&gt; newRegionInfos) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    final List&lt;Either&lt;RegionInfo, IOException&gt;&gt; addMetaEntriesResults = newRegionInfos.stream()<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      .map(regionInfo -&gt; {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        try {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          MetaTableAccessor.addRegionToMeta(masterServices.getConnection(), regionInfo);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          masterServices.getAssignmentManager()<a name="line.180"></a>
+<span class="sourceLineNo">181</span>            .getRegionStates()<a name="line.181"></a>
+<span class="sourceLineNo">182</span>            .updateRegionState(regionInfo, RegionState.State.CLOSED);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          return Either.&lt;RegionInfo, IOException&gt;ofLeft(regionInfo);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        } catch (IOException e) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          return Either.&lt;RegionInfo, IOException&gt;ofRight(e);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      })<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      .collect(Collectors.toList());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    final List&lt;RegionInfo&gt; createMetaEntriesSuccesses = addMetaEntriesResults.stream()<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      .filter(Either::hasLeft)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      .map(Either::getLeft)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      .collect(Collectors.toList());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    final List&lt;IOException&gt; createMetaEntriesFailures = addMetaEntriesResults.stream()<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      .filter(Either::hasRight)<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      .map(Either::getRight)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      .collect(Collectors.toList());<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    LOG.debug("Added {}/{} entries to hbase:meta",<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      createMetaEntriesSuccesses.size(), newRegionInfos.size());<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (!createMetaEntriesFailures.isEmpty()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      LOG.warn("Failed to create entries in hbase:meta for {}/{} RegionInfo descriptors. First"<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          + " failure message included; full list of failures with accompanying stack traces is"<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          + " available at log level DEBUG. message={}", createMetaEntriesFailures.size(),<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        addMetaEntriesResults.size(), createMetaEntriesFailures.get(0).getMessage());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      if (LOG.isDebugEnabled()) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        createMetaEntriesFailures.forEach(<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          ioe -&gt; LOG.debug("Attempt to fix region hole in hbase:meta failed.", ioe));<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    return createMetaEntriesSuccesses;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * Fix overlaps noted in CJ consistency report.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  void fixOverlaps(CatalogJanitor.Report report) throws IOException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    for (Set&lt;RegionInfo&gt; regions: calculateMerges(maxMergeCount, report.getOverlaps())) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      RegionInfo [] regionsArray = regions.toArray(new RegionInfo [] {});<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      try {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        this.masterServices.mergeRegions(regionsArray,<a name="line.221"></a>
+<span class="sourceLineNo">222</span>            false, HConstants.NO_NONCE, HConstants.NO_NONCE);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      } catch (MergeRegionException mre) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        LOG.warn("Failed overlap fix of {}", regionsArray, mre);<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><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * Run through &lt;code&gt;overlaps&lt;/code&gt; and return a list of merges to run.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * Presumes overlaps are ordered (which they are coming out of the CatalogJanitor<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * consistency report).<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param maxMergeCount Maximum regions to merge at a time (avoid merging<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   *   100k regions in one go!)<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  @VisibleForTesting<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  static List&lt;SortedSet&lt;RegionInfo&gt;&gt; calculateMerges(int maxMergeCount,<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; overlaps) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (overlaps.isEmpty()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      LOG.debug("No overlaps.");<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      return Collections.emptyList();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    List&lt;SortedSet&lt;RegionInfo&gt;&gt; merges = new ArrayList&lt;&gt;();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    SortedSet&lt;RegionInfo&gt; currentMergeSet = new TreeSet&lt;&gt;();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    RegionInfo regionInfoWithlargestEndKey =  null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    for (Pair&lt;RegionInfo, RegionInfo&gt; pair: overlaps) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (regionInfoWithlargestEndKey != null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        if (!isOverlap(regionInfoWithlargestEndKey, pair) ||<a name="line.248"></a>
+<span class="sourceLineNo">249</span>            currentMergeSet.size() &gt;= maxMergeCount) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          merges.add(currentMergeSet);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          currentMergeSet = new TreeSet&lt;&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      currentMergeSet.add(pair.getFirst());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      currentMergeSet.add(pair.getSecond());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      regionInfoWithlargestEndKey = getRegionInfoWithLargestEndKey(<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        getRegionInfoWithLargestEndKey(pair.getFirst(), pair.getSecond()),<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          regionInfoWithlargestEndKey);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    merges.add(currentMergeSet);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return merges;<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>   * @return Either &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;b&lt;/code&gt;, whichever has the<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   *   endkey that is furthest along in the Table.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  @VisibleForTesting<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  static RegionInfo getRegionInfoWithLargestEndKey(RegionInfo a, RegionInfo b) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    if (a == null) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      // b may be null.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      return b;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (b == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      // Both are null. The return is not-defined.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      return a;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    if (!a.getTable().equals(b.getTable())) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      // This is an odd one. This should be the right answer.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      return b;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (a.isLast()) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return a;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    if (b.isLast()) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return b;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    int compare = Bytes.compareTo(a.getEndKey(), b.getEndKey());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return compare == 0 || compare &gt; 0? a: b;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * @return True if an overlap found between passed in &lt;code&gt;ri&lt;/code&gt; and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   *   the &lt;code&gt;pair&lt;/code&gt;. Does NOT check the pairs themselves overlap.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @VisibleForTesting<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  static boolean isOverlap(RegionInfo ri, Pair&lt;RegionInfo, RegionInfo&gt; pair) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    if (ri == null || pair == null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      // Can't be an overlap in either of these cases.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return false;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    return ri.isOverlap(pair.getFirst()) || ri.isOverlap(pair.getSecond());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>  /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * A union over {@link L} and {@link R}.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  private static class Either&lt;L, R&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private final L left;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private final R right;<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>    public static &lt;L, R&gt; Either&lt;L, R&gt; ofLeft(L left) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new Either&lt;&gt;(left, null);<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>    public static &lt;L, R&gt; Either&lt;L, R&gt; ofRight(R right) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return new Either&lt;&gt;(null, right);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    Either(L left, R right) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      this.left = left;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      this.right = right;<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>    public boolean hasLeft() {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return left != null;<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>    public L getLeft() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      if (!hasLeft()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        throw new IllegalStateException("Either contains no left.");<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return left;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    public boolean hasRight() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      return right != null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public R getRight() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      if (!hasRight()) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        throw new IllegalStateException("Either contains no right.");<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      return right;<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/MetaFixer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/MetaFixer.html
index 1e71486..f9d46e9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/MetaFixer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/MetaFixer.html
@@ -29,230 +29,330 @@
 <span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.util.Collections;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Set;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.SortedSet;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.TreeSet;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
+<span class="sourceLineNo">024</span>import java.util.Optional;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.Set;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.SortedSet;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.TreeSet;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.stream.Collectors;<a name="line.28"></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.MetaTableAccessor;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
 <span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.35"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.slf4j.Logger;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.slf4j.LoggerFactory;<a name="line.41"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.Logger;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.slf4j.LoggerFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.41"></a>
 <span class="sourceLineNo">042</span><a name="line.42"></a>
 <span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<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>/**<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * Server-side fixing of bad or inconsistent state in hbase:meta.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * Distinct from MetaTableAccessor because {@link MetaTableAccessor} is about low-level<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * manipulations driven by the Master. This class MetaFixer is<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * employed by the Master and it 'knows' about holes and orphans<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * and encapsulates their fixing on behalf of the Master.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
-<span class="sourceLineNo">055</span>class MetaFixer {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final Logger LOG = LoggerFactory.getLogger(MetaFixer.class);<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static final String MAX_MERGE_COUNT_KEY = "hbase.master.metafixer.max.merge.count";<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static final int MAX_MERGE_COUNT_DEFAULT = 10;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private final MasterServices masterServices;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * Maximum for many regions to merge at a time.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private final int maxMergeCount;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  MetaFixer(MasterServices masterServices) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this.masterServices = masterServices;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this.maxMergeCount = this.masterServices.getConfiguration().<a name="line.67"></a>
-<span class="sourceLineNo">068</span>        getInt(MAX_MERGE_COUNT_KEY, MAX_MERGE_COUNT_DEFAULT);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  void fix() throws IOException {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    CatalogJanitor.Report report = this.masterServices.getCatalogJanitor().getLastReport();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    if (report == null) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      LOG.info("CatalogJanitor has not generated a report yet; run 'catalogjanitor_run' in " +<a name="line.74"></a>
-<span class="sourceLineNo">075</span>          "shell or wait until CatalogJanitor chore runs.");<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    fixHoles(report);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    fixOverlaps(report);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    // Run the ReplicationBarrierCleaner here; it may clear out rep_barrier rows which<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    // can help cleaning up damaged hbase:meta.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.masterServices.runReplicationBarrierCleaner();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  /**<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * If hole, it papers it over by adding a region in the filesystem and to hbase:meta.<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Does not assign.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  void fixHoles(CatalogJanitor.Report report) throws IOException {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; holes = report.getHoles();<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    if (holes.isEmpty()) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      LOG.debug("No holes.");<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      return;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    for (Pair&lt;RegionInfo, RegionInfo&gt; p: holes) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      RegionInfo ri = getHoleCover(p);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      if (ri == null) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        continue;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      Configuration configuration = this.masterServices.getConfiguration();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      HRegion.createRegionDir(configuration, ri, FSUtils.getRootDir(configuration));<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      // If an error here, then we'll have a region in the filesystem but not<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      // in hbase:meta (if the below fails). Should be able to rerun the fix.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      // Add to hbase:meta and then update in-memory state so it knows of new<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      // Region; addRegionToMeta adds region and adds a state column set to CLOSED.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      MetaTableAccessor.addRegionToMeta(this.masterServices.getConnection(), ri);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      this.masterServices.getAssignmentManager().getRegionStates().<a name="line.107"></a>
-<span class="sourceLineNo">108</span>          updateRegionState(ri, RegionState.State.CLOSED);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      LOG.info("Fixed hole by adding {} in CLOSED state; region NOT assigned (assign to ONLINE).",<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          ri);<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>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @return Calculated RegionInfo that covers the hole &lt;code&gt;hole&lt;/code&gt;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private RegionInfo getHoleCover(Pair&lt;RegionInfo, RegionInfo&gt; hole) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    RegionInfo holeCover = null;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    RegionInfo left = hole.getFirst();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    RegionInfo right = hole.getSecond();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if (left.getTable().equals(right.getTable())) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      // Simple case.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      if (Bytes.compareTo(left.getEndKey(), right.getStartKey()) &gt;= 0) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        LOG.warn("Skipping hole fix; left-side endKey is not less than right-side startKey; " +<a name="line.124"></a>
-<span class="sourceLineNo">125</span>            "left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        return holeCover;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      }<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      holeCover = buildRegionInfo(left.getTable(), left.getEndKey(), right.getStartKey());<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    } else {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      boolean leftUndefined = left.equals(RegionInfo.UNDEFINED);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      boolean rightUnefined = right.equals(RegionInfo.UNDEFINED);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      boolean last = left.isLast();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      boolean first = right.isFirst();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      if (leftUndefined &amp;&amp; rightUnefined) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        LOG.warn("Skipping hole fix; both the hole left-side and right-side RegionInfos are " +<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            "UNDEFINED; left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        return holeCover;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      if (leftUndefined || last) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        holeCover = buildRegionInfo(right.getTable(), HConstants.EMPTY_START_ROW,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>            right.getStartKey());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      } else if (rightUnefined || first) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        holeCover = buildRegionInfo(left.getTable(), left.getEndKey(), HConstants.EMPTY_END_ROW);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      } else {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        LOG.warn("Skipping hole fix; don't know what to do with left=&lt;{}&gt;, right=&lt;{}&gt;",<a name="line.145"></a>
-<span class="sourceLineNo">146</span>            left, right);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        return holeCover;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      }<a name="line.148"></a>
+<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * Server-side fixing of bad or inconsistent state in hbase:meta.<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * Distinct from MetaTableAccessor because {@link MetaTableAccessor} is about low-level<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * manipulations driven by the Master. This class MetaFixer is<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * employed by the Master and it 'knows' about holes and orphans<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * and encapsulates their fixing on behalf of the Master.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> */<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceAudience.Private<a name="line.51"></a>
+<span class="sourceLineNo">052</span>class MetaFixer {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(MetaFixer.class);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final String MAX_MERGE_COUNT_KEY = "hbase.master.metafixer.max.merge.count";<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static final int MAX_MERGE_COUNT_DEFAULT = 10;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private final MasterServices masterServices;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * Maximum for many regions to merge at a time.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private final int maxMergeCount;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  MetaFixer(MasterServices masterServices) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.masterServices = masterServices;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    this.maxMergeCount = this.masterServices.getConfiguration().<a name="line.65"></a>
+<span class="sourceLineNo">066</span>        getInt(MAX_MERGE_COUNT_KEY, MAX_MERGE_COUNT_DEFAULT);<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>  void fix() throws IOException {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    CatalogJanitor.Report report = this.masterServices.getCatalogJanitor().getLastReport();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    if (report == null) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      LOG.info("CatalogJanitor has not generated a report yet; run 'catalogjanitor_run' in " +<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          "shell or wait until CatalogJanitor chore runs.");<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      return;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    fixHoles(report);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    fixOverlaps(report);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    // Run the ReplicationBarrierCleaner here; it may clear out rep_barrier rows which<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    // can help cleaning up damaged hbase:meta.<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    this.masterServices.runReplicationBarrierCleaner();<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>  /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * If hole, it papers it over by adding a region in the filesystem and to hbase:meta.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Does not assign.<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  void fixHoles(CatalogJanitor.Report report) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    final List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; holes = report.getHoles();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    if (holes.isEmpty()) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      LOG.info("CatalogJanitor Report contains no holes to fix. Skipping.");<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      return;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>    LOG.info("Identified {} region holes to fix. Detailed fixup progress logged at DEBUG.",<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      holes.size());<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    final List&lt;RegionInfo&gt; newRegionInfos = createRegionInfosForHoles(holes);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    final List&lt;RegionInfo&gt; newMetaEntries = createMetaEntries(masterServices, newRegionInfos);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    final TransitRegionStateProcedure[] assignProcedures = masterServices<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      .getAssignmentManager()<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      .createRoundRobinAssignProcedures(newMetaEntries);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    masterServices.getMasterProcedureExecutor().submitProcedures(assignProcedures);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    LOG.info(<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      "Scheduled {}/{} new regions for assignment.", assignProcedures.length, holes.size());<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * Create a new {@link RegionInfo} corresponding to each provided "hole" pair.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private static List&lt;RegionInfo&gt; createRegionInfosForHoles(<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    final List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; holes) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    final List&lt;RegionInfo&gt; newRegionInfos = holes.stream()<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      .map(MetaFixer::getHoleCover)<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      .filter(Optional::isPresent)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      .map(Optional::get)<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      .collect(Collectors.toList());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    LOG.debug("Constructed {}/{} RegionInfo descriptors corresponding to identified holes.",<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      newRegionInfos.size(), holes.size());<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    return newRegionInfos;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return Attempts to calculate a new {@link RegionInfo} that covers the region range described<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   *   in {@code hole}.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private static Optional&lt;RegionInfo&gt; getHoleCover(Pair&lt;RegionInfo, RegionInfo&gt; hole) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    final RegionInfo left = hole.getFirst();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    final RegionInfo right = hole.getSecond();<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    if (left.getTable().equals(right.getTable())) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      // Simple case.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      if (Bytes.compareTo(left.getEndKey(), right.getStartKey()) &gt;= 0) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        LOG.warn("Skipping hole fix; left-side endKey is not less than right-side startKey;"<a name="line.134"></a>
+<span class="sourceLineNo">135</span>          + " left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        return Optional.empty();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      return Optional.of(buildRegionInfo(left.getTable(), left.getEndKey(), right.getStartKey()));<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>    final boolean leftUndefined = left.equals(RegionInfo.UNDEFINED);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    final boolean rightUndefined = right.equals(RegionInfo.UNDEFINED);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    final boolean last = left.isLast();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    final boolean first = right.isFirst();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    if (leftUndefined &amp;&amp; rightUndefined) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.warn("Skipping hole fix; both the hole left-side and right-side RegionInfos are " +<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        "UNDEFINED; left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      return Optional.empty();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    return holeCover;<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>  private RegionInfo buildRegionInfo(TableName tn, byte [] start, byte [] end) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    return RegionInfoBuilder.newBuilder(tn).setStartKey(start).setEndKey(end).build();<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>   * Fix overlaps noted in CJ consistency report.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  void fixOverlaps(CatalogJanitor.Report report) throws IOException {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    for (Set&lt;RegionInfo&gt; regions: calculateMerges(maxMergeCount, report.getOverlaps())) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      RegionInfo [] regionsArray = regions.toArray(new RegionInfo [] {});<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      try {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        this.masterServices.mergeRegions(regionsArray,<a name="line.164"></a>
-<span class="sourceLineNo">165</span>            false, HConstants.NO_NONCE, HConstants.NO_NONCE);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      } catch (MergeRegionException mre) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        LOG.warn("Failed overlap fix of {}", regionsArray, mre);<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>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Run through &lt;code&gt;overlaps&lt;/code&gt; and return a list of merges to run.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Presumes overlaps are ordered (which they are coming out of the CatalogJanitor<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * consistency report).<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param maxMergeCount Maximum regions to merge at a time (avoid merging<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   *   100k regions in one go!)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  @VisibleForTesting<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  static List&lt;SortedSet&lt;RegionInfo&gt;&gt; calculateMerges(int maxMergeCount,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; overlaps) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (overlaps.isEmpty()) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      LOG.debug("No overlaps.");<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      return Collections.emptyList();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    List&lt;SortedSet&lt;RegionInfo&gt;&gt; merges = new ArrayList&lt;&gt;();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    SortedSet&lt;RegionInfo&gt; currentMergeSet = new TreeSet&lt;&gt;();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    RegionInfo regionInfoWithlargestEndKey =  null;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    for (Pair&lt;RegionInfo, RegionInfo&gt; pair: overlaps) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (regionInfoWithlargestEndKey != null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        if (!isOverlap(regionInfoWithlargestEndKey, pair) ||<a name="line.191"></a>
-<span class="sourceLineNo">192</span>            currentMergeSet.size() &gt;= maxMergeCount) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          merges.add(currentMergeSet);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          currentMergeSet = new TreeSet&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      currentMergeSet.add(pair.getFirst());<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      currentMergeSet.add(pair.getSecond());<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      regionInfoWithlargestEndKey = getRegionInfoWithLargestEndKey(<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        getRegionInfoWithLargestEndKey(pair.getFirst(), pair.getSecond()),<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          regionInfoWithlargestEndKey);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    merges.add(currentMergeSet);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    return merges;<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 Either &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;b&lt;/code&gt;, whichever has the<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   *   endkey that is furthest along in the Table.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @VisibleForTesting<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  static RegionInfo getRegionInfoWithLargestEndKey(RegionInfo a, RegionInfo b) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    if (a == null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // b may be null.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return b;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    if (b == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // Both are null. The return is not-defined.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return a;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (!a.getTable().equals(b.getTable())) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      // This is an odd one. This should be the right answer.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      return b;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    if (a.isLast()) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      return a;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    if (b.isLast()) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return b;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    int compare = Bytes.compareTo(a.getEndKey(), b.getEndKey());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    return compare == 0 || compare &gt; 0? a: b;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @return True if an overlap found between passed in &lt;code&gt;ri&lt;/code&gt; and<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   *   the &lt;code&gt;pair&lt;/code&gt;. Does NOT check the pairs themselves overlap.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  @VisibleForTesting<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  static boolean isOverlap(RegionInfo ri, Pair&lt;RegionInfo, RegionInfo&gt; pair) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    if (ri == null || pair == null) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      // Can't be an overlap in either of these cases.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return false;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return ri.isOverlap(pair.getFirst()) || ri.isOverlap(pair.getSecond());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>}<a name="line.247"></a>
+<span class="sourceLineNo">150</span>    if (leftUndefined || last) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return Optional.of(<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        buildRegionInfo(right.getTable(), HConstants.EMPTY_START_ROW, right.getStartKey()));<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (rightUndefined || first) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      return Optional.of(<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        buildRegionInfo(left.getTable(), left.getEndKey(), HConstants.EMPTY_END_ROW));<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    LOG.warn("Skipping hole fix; don't know what to do with left=&lt;{}&gt;, right=&lt;{}&gt;", left, right);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return Optional.empty();<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>  private static RegionInfo buildRegionInfo(TableName tn, byte [] start, byte [] end) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return RegionInfoBuilder.newBuilder(tn).setStartKey(start).setEndKey(end).build();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * Create entries in the {@code hbase:meta} for each provided {@link RegionInfo}. Best effort.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @param masterServices used to connect to {@code hbase:meta}<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param newRegionInfos the new {@link RegionInfo} entries to add to the filesystem<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * @return a list of {@link RegionInfo} entries for which {@code hbase:meta} entries were<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   *   successfully created<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private static List&lt;RegionInfo&gt; createMetaEntries(final MasterServices masterServices,<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    final List&lt;RegionInfo&gt; newRegionInfos) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    final List&lt;Either&lt;RegionInfo, IOException&gt;&gt; addMetaEntriesResults = newRegionInfos.stream()<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      .map(regionInfo -&gt; {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        try {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          MetaTableAccessor.addRegionToMeta(masterServices.getConnection(), regionInfo);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          masterServices.getAssignmentManager()<a name="line.180"></a>
+<span class="sourceLineNo">181</span>            .getRegionStates()<a name="line.181"></a>
+<span class="sourceLineNo">182</span>            .updateRegionState(regionInfo, RegionState.State.CLOSED);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          return Either.&lt;RegionInfo, IOException&gt;ofLeft(regionInfo);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        } catch (IOException e) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          return Either.&lt;RegionInfo, IOException&gt;ofRight(e);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      })<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      .collect(Collectors.toList());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    final List&lt;RegionInfo&gt; createMetaEntriesSuccesses = addMetaEntriesResults.stream()<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      .filter(Either::hasLeft)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      .map(Either::getLeft)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      .collect(Collectors.toList());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    final List&lt;IOException&gt; createMetaEntriesFailures = addMetaEntriesResults.stream()<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      .filter(Either::hasRight)<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      .map(Either::getRight)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      .collect(Collectors.toList());<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    LOG.debug("Added {}/{} entries to hbase:meta",<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      createMetaEntriesSuccesses.size(), newRegionInfos.size());<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (!createMetaEntriesFailures.isEmpty()) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      LOG.warn("Failed to create entries in hbase:meta for {}/{} RegionInfo descriptors. First"<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          + " failure message included; full list of failures with accompanying stack traces is"<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          + " available at log level DEBUG. message={}", createMetaEntriesFailures.size(),<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        addMetaEntriesResults.size(), createMetaEntriesFailures.get(0).getMessage());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      if (LOG.isDebugEnabled()) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        createMetaEntriesFailures.forEach(<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          ioe -&gt; LOG.debug("Attempt to fix region hole in hbase:meta failed.", ioe));<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    return createMetaEntriesSuccesses;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  /**<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * Fix overlaps noted in CJ consistency report.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  void fixOverlaps(CatalogJanitor.Report report) throws IOException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    for (Set&lt;RegionInfo&gt; regions: calculateMerges(maxMergeCount, report.getOverlaps())) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      RegionInfo [] regionsArray = regions.toArray(new RegionInfo [] {});<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      try {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        this.masterServices.mergeRegions(regionsArray,<a name="line.221"></a>
+<span class="sourceLineNo">222</span>            false, HConstants.NO_NONCE, HConstants.NO_NONCE);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      } catch (MergeRegionException mre) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        LOG.warn("Failed overlap fix of {}", regionsArray, mre);<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><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * Run through &lt;code&gt;overlaps&lt;/code&gt; and return a list of merges to run.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * Presumes overlaps are ordered (which they are coming out of the CatalogJanitor<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * consistency report).<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param maxMergeCount Maximum regions to merge at a time (avoid merging<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   *   100k regions in one go!)<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  @VisibleForTesting<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  static List&lt;SortedSet&lt;RegionInfo&gt;&gt; calculateMerges(int maxMergeCount,<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      List&lt;Pair&lt;RegionInfo, RegionInfo&gt;&gt; overlaps) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    if (overlaps.isEmpty()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      LOG.debug("No overlaps.");<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      return Collections.emptyList();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    List&lt;SortedSet&lt;RegionInfo&gt;&gt; merges = new ArrayList&lt;&gt;();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    SortedSet&lt;RegionInfo&gt; currentMergeSet = new TreeSet&lt;&gt;();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    RegionInfo regionInfoWithlargestEndKey =  null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    for (Pair&lt;RegionInfo, RegionInfo&gt; pair: overlaps) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (regionInfoWithlargestEndKey != null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        if (!isOverlap(regionInfoWithlargestEndKey, pair) ||<a name="line.248"></a>
+<span class="sourceLineNo">249</span>            currentMergeSet.size() &gt;= maxMergeCount) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          merges.add(currentMergeSet);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          currentMergeSet = new TreeSet&lt;&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      currentMergeSet.add(pair.getFirst());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      currentMergeSet.add(pair.getSecond());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      regionInfoWithlargestEndKey = getRegionInfoWithLargestEndKey(<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        getRegionInfoWithLargestEndKey(pair.getFirst(), pair.getSecond()),<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          regionInfoWithlargestEndKey);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    merges.add(currentMergeSet);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return merges;<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>   * @return Either &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;b&lt;/code&gt;, whichever has the<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   *   endkey that is furthest along in the Table.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  @VisibleForTesting<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  static RegionInfo getRegionInfoWithLargestEndKey(RegionInfo a, RegionInfo b) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    if (a == null) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      // b may be null.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      return b;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (b == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      // Both are null. The return is not-defined.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      return a;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    if (!a.getTable().equals(b.getTable())) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      // This is an odd one. This should be the right answer.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      return b;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (a.isLast()) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return a;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    if (b.isLast()) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return b;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    int compare = Bytes.compareTo(a.getEndKey(), b.getEndKey());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return compare == 0 || compare &gt; 0? a: b;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * @return True if an overlap found between passed in &lt;code&gt;ri&lt;/code&gt; and<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   *   the &lt;code&gt;pair&lt;/code&gt;. Does NOT check the pairs themselves overlap.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @VisibleForTesting<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  static boolean isOverlap(RegionInfo ri, Pair&lt;RegionInfo, RegionInfo&gt; pair) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    if (ri == null || pair == null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      // Can't be an overlap in either of these cases.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return false;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    return ri.isOverlap(pair.getFirst()) || ri.isOverlap(pair.getSecond());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>  /**<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * A union over {@link L} and {@link R}.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  private static class Either&lt;L, R&gt; {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    private final L left;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    private final R right;<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>    public static &lt;L, R&gt; Either&lt;L, R&gt; ofLeft(L left) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new Either&lt;&gt;(left, null);<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>    public static &lt;L, R&gt; Either&lt;L, R&gt; ofRight(R right) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      return new Either&lt;&gt;(null, right);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>    Either(L left, R right) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      this.left = left;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      this.right = right;<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>    public boolean hasLeft() {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      return left != null;<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>    public L getLeft() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      if (!hasLeft()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        throw new IllegalStateException("Either contains no left.");<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      return left;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    public boolean hasRight() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      return right != null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    public R getRight() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      if (!hasRight()) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        throw new IllegalStateException("Either contains no right.");<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      return right;<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html
index f2616fd..a33c20b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.SecureBulkLoadListener.html
@@ -161,319 +161,322 @@
 <span class="sourceLineNo">153</span><a name="line.153"></a>
 <span class="sourceLineNo">154</span>  public void cleanupBulkLoad(final HRegion region, final CleanupBulkLoadRequest request)<a name="line.154"></a>
 <span class="sourceLineNo">155</span>      throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    try {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      region.getCoprocessorHost().preCleanupBulkLoad(getActiveUser());<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>      Path path = new Path(request.getBulkToken());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      if (!fs.delete(path, true)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        if (fs.exists(path)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          throw new IOException("Failed to clean up " + path);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      LOG.info("Cleaned up " + path + " successfully.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    } finally {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      UserGroupInformation ugi = getActiveUser().getUGI();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        if (!UserGroupInformation.getLoginUser().equals(ugi) &amp;&amp; !isUserReferenced(ugi)) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          FileSystem.closeAllForUGI(ugi);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      } catch (IOException e) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        LOG.error("Failed to close FileSystem for: " + ugi, e);<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>  private Consumer&lt;HRegion&gt; fsCreatedListener;<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @VisibleForTesting<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  void setFsCreatedListener(Consumer&lt;HRegion&gt; fsCreatedListener) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.fsCreatedListener = fsCreatedListener;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private void incrementUgiReference(UserGroupInformation ugi) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    // if we haven't seen this ugi before, make a new counter<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    ugiReferenceCounter.compute(ugi, (key, value) -&gt; {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (value == null) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        value = new MutableInt(1);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        value.increment();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      return value;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    });<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private void decrementUgiReference(UserGroupInformation ugi) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // if the count drops below 1 we remove the entry by returning null<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    ugiReferenceCounter.computeIfPresent(ugi, (key, value) -&gt; {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      if (value.intValue() &gt; 1) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        value.decrement();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        value = null;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return value;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    });<a name="line.207"></a>
+<span class="sourceLineNo">156</span>    region.getCoprocessorHost().preCleanupBulkLoad(getActiveUser());<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    Path path = new Path(request.getBulkToken());<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    if (!fs.delete(path, true)) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (fs.exists(path)) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        throw new IOException("Failed to clean up " + path);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    LOG.trace("Cleaned up {} successfully.", path);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private Consumer&lt;HRegion&gt; fsCreatedListener;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  @VisibleForTesting<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  void setFsCreatedListener(Consumer&lt;HRegion&gt; fsCreatedListener) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    this.fsCreatedListener = fsCreatedListener;<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>  private void incrementUgiReference(UserGroupInformation ugi) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // if we haven't seen this ugi before, make a new counter<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    ugiReferenceCounter.compute(ugi, (key, value) -&gt; {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      if (value == null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        value = new MutableInt(1);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        value.increment();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      return value;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    });<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private void decrementUgiReference(UserGroupInformation ugi) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // if the count drops below 1 we remove the entry by returning null<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    ugiReferenceCounter.computeIfPresent(ugi, (key, value) -&gt; {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      if (value.intValue() &gt; 1) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        value.decrement();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      } else {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        value = null;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      return value;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    });<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  private boolean isUserReferenced(UserGroupInformation ugi) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // if the ugi is in the map, based on invariants above<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // the count must be above zero<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    return ugiReferenceCounter.containsKey(ugi);<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>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    final BulkLoadHFileRequest request) throws IOException {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return secureBulkLoadHFiles(region, request, null);<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>  private boolean isUserReferenced(UserGroupInformation ugi) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // if the ugi is in the map, based on invariants above<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // the count must be above zero<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    return ugiReferenceCounter.containsKey(ugi);<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>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    final BulkLoadHFileRequest request) throws IOException {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    return secureBulkLoadHFiles(region, request, null);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      final BulkLoadHFileRequest request, List&lt;String&gt; clusterIds) throws IOException {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; familyPaths = new ArrayList&lt;&gt;(request.getFamilyPathCount());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    for(ClientProtos.BulkLoadHFileRequest.FamilyPath el : request.getFamilyPathList()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      familyPaths.add(new Pair&lt;&gt;(el.getFamily().toByteArray(), el.getPath()));<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>    Token&lt;AuthenticationTokenIdentifier&gt; userToken = null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      userToken = new Token&lt;&gt;(request.getFsToken().getIdentifier().toByteArray(),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        request.getFsToken().getPassword().toByteArray(), new Text(request.getFsToken().getKind()),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        new Text(request.getFsToken().getService()));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    final String bulkToken = request.getBulkToken();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    User user = getActiveUser();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    final UserGroupInformation ugi = user.getUGI();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      try {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        Token&lt;AuthenticationTokenIdentifier&gt; tok = ClientTokenUtil.obtainToken(conn).get();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        if (tok != null) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          boolean b = ugi.addToken(tok);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          LOG.debug("token added " + tok + " for user " + ugi + " return=" + b);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        }<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      } catch (Exception ioe) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.warn("unable to add token", ioe);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
+<span class="sourceLineNo">210</span>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final BulkLoadHFileRequest request, List&lt;String&gt; clusterIds) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; familyPaths = new ArrayList&lt;&gt;(request.getFamilyPathCount());<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    for(ClientProtos.BulkLoadHFileRequest.FamilyPath el : request.getFamilyPathList()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      familyPaths.add(new Pair&lt;&gt;(el.getFamily().toByteArray(), el.getPath()));<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Token&lt;AuthenticationTokenIdentifier&gt; userToken = null;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      userToken = new Token&lt;&gt;(request.getFsToken().getIdentifier().toByteArray(),<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        request.getFsToken().getPassword().toByteArray(), new Text(request.getFsToken().getKind()),<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        new Text(request.getFsToken().getService()));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    final String bulkToken = request.getBulkToken();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    User user = getActiveUser();<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    final UserGroupInformation ugi = user.getUGI();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      try {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        Token&lt;AuthenticationTokenIdentifier&gt; tok = ClientTokenUtil.obtainToken(conn).get();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        if (tok != null) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          boolean b = ugi.addToken(tok);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          LOG.debug("token added " + tok + " for user " + ugi + " return=" + b);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (Exception ioe) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.warn("unable to add token", ioe);<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>    if (userToken != null) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ugi.addToken(userToken);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    } else if (userProvider.isHadoopSecurityEnabled()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      //we allow this to pass through in "simple" security mode<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      //for mini cluster testing<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      throw new DoNotRetryIOException("User token cannot be null");<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>    if (region.getCoprocessorHost() != null) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      region.getCoprocessorHost().preBulkLoadHFile(familyPaths);<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (userToken != null) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      ugi.addToken(userToken);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    } else if (userProvider.isHadoopSecurityEnabled()) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      //we allow this to pass through in "simple" security mode<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      //for mini cluster testing<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      throw new DoNotRetryIOException("User token cannot be null");<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 (region.getCoprocessorHost() != null) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      region.getCoprocessorHost().preBulkLoadHFile(familyPaths);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    Map&lt;byte[], List&lt;Path&gt;&gt; map = null;<a name="line.259"></a>
+<span class="sourceLineNo">248</span>    Map&lt;byte[], List&lt;Path&gt;&gt; map = null;<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    try {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      incrementUgiReference(ugi);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      // Get the target fs (HBase region server fs) delegation token<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      // Since we have checked the permission via 'preBulkLoadHFile', now let's give<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      // the 'request user' necessary token to operate on the target fs.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // After this point the 'doAs' user will hold two tokens, one for the source fs<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      // ('request user'), another for the target fs (HBase region server principal).<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      if (userProvider.isHadoopSecurityEnabled()) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        FsDelegationToken targetfsDelegationToken = new FsDelegationToken(userProvider,"renewer");<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        targetfsDelegationToken.acquireDelegationToken(fs);<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    try {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      incrementUgiReference(ugi);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      // Get the target fs (HBase region server fs) delegation token<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // Since we have checked the permission via 'preBulkLoadHFile', now let's give<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // the 'request user' necessary token to operate on the target fs.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      // After this point the 'doAs' user will hold two tokens, one for the source fs<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      // ('request user'), another for the target fs (HBase region server principal).<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      if (userProvider.isHadoopSecurityEnabled()) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        FsDelegationToken targetfsDelegationToken = new FsDelegationToken(userProvider,"renewer");<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        targetfsDelegationToken.acquireDelegationToken(fs);<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>        Token&lt;?&gt; targetFsToken = targetfsDelegationToken.getUserToken();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        if (targetFsToken != null<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            &amp;&amp; (userToken == null || !targetFsToken.getService().equals(userToken.getService()))){<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          ugi.addToken(targetFsToken);<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><a name="line.278"></a>
-<span class="sourceLineNo">279</span>      map = ugi.doAs(new PrivilegedAction&lt;Map&lt;byte[], List&lt;Path&gt;&gt;&gt;() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        public Map&lt;byte[], List&lt;Path&gt;&gt; run() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          FileSystem fs = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          try {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            fs = FileSystem.get(conf);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>            for(Pair&lt;byte[], String&gt; el: familyPaths) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>              Path stageFamily = new Path(bulkToken, Bytes.toString(el.getFirst()));<a name="line.286"></a>
-<span class="sourceLineNo">287</span>              if(!fs.exists(stageFamily)) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>                fs.mkdirs(stageFamily);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>                fs.setPermission(stageFamily, PERM_ALL_ACCESS);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            if (fsCreatedListener != null) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>              fsCreatedListener.accept(region);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            //We call bulkLoadHFiles as requesting user<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            //To enable access prior to staging<a name="line.296"></a>
-<span class="sourceLineNo">297</span>            return region.bulkLoadHFiles(familyPaths, true,<a name="line.297"></a>
-<span class="sourceLineNo">298</span>                new SecureBulkLoadListener(fs, bulkToken, conf), request.getCopyFile(),<a name="line.298"></a>
-<span class="sourceLineNo">299</span>              clusterIds, request.getReplicate());<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          } catch (Exception e) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>            LOG.error("Failed to complete bulk load", e);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          return null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      });<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    } finally {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      decrementUgiReference(ugi);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (region.getCoprocessorHost() != null) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        region.getCoprocessorHost().postBulkLoadHFile(familyPaths, map);<a name="line.309"></a>
+<span class="sourceLineNo">261</span>        Token&lt;?&gt; targetFsToken = targetfsDelegationToken.getUserToken();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (targetFsToken != null<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            &amp;&amp; (userToken == null || !targetFsToken.getService().equals(userToken.getService()))){<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          ugi.addToken(targetFsToken);<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>      map = ugi.doAs(new PrivilegedAction&lt;Map&lt;byte[], List&lt;Path&gt;&gt;&gt;() {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        public Map&lt;byte[], List&lt;Path&gt;&gt; run() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          FileSystem fs = null;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          try {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>            /*<a name="line.273"></a>
+<span class="sourceLineNo">274</span>             * This is creating and caching a new FileSystem instance. Other code called<a name="line.274"></a>
+<span class="sourceLineNo">275</span>             * "beneath" this method will rely on this FileSystem instance being in the<a name="line.275"></a>
+<span class="sourceLineNo">276</span>             * cache. This is important as those methods make _no_ attempt to close this<a name="line.276"></a>
+<span class="sourceLineNo">277</span>             * FileSystem instance. It is critical that here, in SecureBulkLoadManager,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>             * we are tracking the lifecycle and closing the FS when safe to do so.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>             */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            fs = FileSystem.get(conf);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>            for(Pair&lt;byte[], String&gt; el: familyPaths) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>              Path stageFamily = new Path(bulkToken, Bytes.toString(el.getFirst()));<a name="line.282"></a>
+<span class="sourceLineNo">283</span>              if(!fs.exists(stageFamily)) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>                fs.mkdirs(stageFamily);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>                fs.setPermission(stageFamily, PERM_ALL_ACCESS);<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>            if (fsCreatedListener != null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>              fsCreatedListener.accept(region);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>            }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            //We call bulkLoadHFiles as requesting user<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            //To enable access prior to staging<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            return region.bulkLoadHFiles(familyPaths, true,<a name="line.293"></a>
+<span class="sourceLineNo">294</span>                new SecureBulkLoadListener(fs, bulkToken, conf), request.getCopyFile(),<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              clusterIds, request.getReplicate());<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          } catch (Exception e) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>            LOG.error("Failed to complete bulk load", e);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          return null;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      });<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    } finally {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      decrementUgiReference(ugi);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        if (!UserGroupInformation.getLoginUser().equals(ugi) &amp;&amp; !isUserReferenced(ugi)) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>          FileSystem.closeAllForUGI(ugi);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      } catch (IOException e) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        LOG.error("Failed to close FileSystem for: {}", ugi, e);<a name="line.309"></a>
 <span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    return map;<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>  private Path createStagingDir(Path baseDir,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>                                User user,<a name="line.316"></a>
-<span class="sourceLineNo">317</span>                                TableName tableName) throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return createStagingDir(baseDir, user, randomDir);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  private Path createStagingDir(Path baseDir,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                                User user,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>                                String randomDir) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    Path p = new Path(baseDir, randomDir);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    return p;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private User getActiveUser() throws IOException {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    // for non-rpc handling, fallback to system user<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    User user = RpcServer.getRequestUser().orElse(userProvider.getCurrent());<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // this is for testing<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    if (userProvider.isHadoopSecurityEnabled() &amp;&amp;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      return User.createUserForTesting(conf, user.getShortName(), new String[] {});<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>    return user;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">311</span>      if (region.getCoprocessorHost() != null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        region.getCoprocessorHost().postBulkLoadHFile(familyPaths, map);<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>    return map;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private Path createStagingDir(Path baseDir,<a name="line.318"></a>
+<span class="sourceLineNo">319</span>                                User user,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>                                TableName tableName) throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    return createStagingDir(baseDir, user, randomDir);<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>  private Path createStagingDir(Path baseDir,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>                                User user,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>                                String randomDir) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Path p = new Path(baseDir, randomDir);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return p;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private User getActiveUser() throws IOException {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // for non-rpc handling, fallback to system user<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    User user = RpcServer.getRequestUser().orElse(userProvider.getCurrent());<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // this is for testing<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (userProvider.isHadoopSecurityEnabled() &amp;&amp;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return User.createUserForTesting(conf, user.getShortName(), new String[] {});<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
 <span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Target filesystem<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    private final FileSystem fs;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    private final String stagingDir;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    private final Configuration conf;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // Source filesystem<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    private FileSystem srcFs = null;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      this.fs = fs;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.stagingDir = stagingDir;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      this.conf = conf;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      this.origPermissions = new HashMap&lt;&gt;();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    public String prepareBulkLoad(final byte[] family, final String srcPath, boolean copyFile)<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      Path p = new Path(srcPath);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      if (p.equals(stageP)) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        LOG.debug(p.getName()<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        return stageP.toString();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (srcFs == null) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        srcFs = FileSystem.newInstance(p.toUri(), conf);<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>      if(!isFile(p)) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        throw new IOException("Path does not reference a file: " + p);<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>      // Check to see if the source and target filesystems are the same<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.384"></a>
-<span class="sourceLineNo">385</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      } else if (copyFile) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("Bulk-load file " + srcPath + " is copied to destination staging dir.");<a name="line.388"></a>
+<span class="sourceLineNo">345</span>    return user;<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    // Target filesystem<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private final FileSystem fs;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private final String stagingDir;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private final Configuration conf;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // Source filesystem<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private FileSystem srcFs = null;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      this.fs = fs;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.stagingDir = stagingDir;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.conf = conf;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.origPermissions = new HashMap&lt;&gt;();<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>    @Override<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    public String prepareBulkLoad(final byte[] family, final String srcPath, boolean copyFile)<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        throws IOException {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      Path p = new Path(srcPath);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (p.equals(stageP)) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        LOG.debug(p.getName()<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        return stageP.toString();<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>      if (srcFs == null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        srcFs = FileSystem.newInstance(p.toUri(), conf);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      }<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>      if(!isFile(p)) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        throw new IOException("Path does not reference a file: " + p);<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>      // Check to see if the source and target filesystems are the same<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.387"></a>
+<span class="sourceLineNo">388</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.388"></a>
 <span class="sourceLineNo">389</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } else {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if(!fs.rename(p, stageP)) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        }<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return stageP.toString();<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>    @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    public void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      LOG.debug("Bulk Load done for: " + srcPath);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      closeSrcFs();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    private void closeSrcFs() throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if (srcFs != null) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        srcFs.close();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        srcFs = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        Path p = new Path(srcPath);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        if (srcFs == null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          srcFs = FileSystem.newInstance(p.toUri(), conf);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          // files are copied so no need to move them back<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          return;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>        // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        // prepare stage, so no need of rename here again<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (p.equals(stageP)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          return;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>        LOG.debug("Moving " + stageP + " back to " + p);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        if (!fs.rename(stageP, p)) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>        // restore original permission<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        if (origPermissions.containsKey(srcPath)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          fs.setPermission(p, origPermissions.get(srcPath));<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        } else {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      } finally {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        closeSrcFs();<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>    /**<a name="line.451"></a>
-<span class="sourceLineNo">452</span>     * Check if the path is referencing a file.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>     * This is mainly needed to avoid symlinks.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>     * @param p<a name="line.454"></a>
-<span class="sourceLineNo">455</span>     * @return true if the p is a file<a name="line.455"></a>
-<span class="sourceLineNo">456</span>     * @throws IOException<a name="line.456"></a>
-<span class="sourceLineNo">457</span>     */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    private boolean isFile(Path p) throws IOException {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      boolean isFile = !status.isDirectory();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      try {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } catch (Exception e) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      return isFile;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>}<a name="line.468"></a>
+<span class="sourceLineNo">390</span>      } else if (copyFile) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        LOG.debug("Bulk-load file " + srcPath + " is copied to destination staging dir.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        if(!fs.rename(p, stageP)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<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>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return stageP.toString();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      LOG.debug("Bulk Load done for: " + srcPath);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      closeSrcFs();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>    private void closeSrcFs() throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      if (srcFs != null) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        srcFs.close();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        srcFs = null;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      try {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        Path p = new Path(srcPath);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (srcFs == null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          srcFs = FileSystem.newInstance(p.toUri(), conf);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          // files are copied so no need to move them back<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          return;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>        // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        // prepare stage, so no need of rename here again<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        if (p.equals(stageP)) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          return;<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>        LOG.debug("Moving " + stageP + " back to " + p);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        if (!fs.rename(stageP, p)) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>        // restore original permission<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        if (origPermissions.containsKey(srcPath)) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          fs.setPermission(p, origPermissions.get(srcPath));<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        } else {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>          LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      } finally {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        closeSrcFs();<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><a name="line.453"></a>
+<span class="sourceLineNo">454</span>    /**<a name="line.454"></a>
+<span class="sourceLineNo">455</span>     * Check if the path is referencing a file.<a name="line.455"></a>
+<span class="sourceLineNo">456</span>     * This is mainly needed to avoid symlinks.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>     * @param p<a name="line.457"></a>
+<span class="sourceLineNo">458</span>     * @return true if the p is a file<a name="line.458"></a>
+<span class="sourceLineNo">459</span>     * @throws IOException<a name="line.459"></a>
+<span class="sourceLineNo">460</span>     */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    private boolean isFile(Path p) throws IOException {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      boolean isFile = !status.isDirectory();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      } catch (Exception e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return isFile;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
+<span class="sourceLineNo">471</span>}<a name="line.471"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html
index f2616fd..a33c20b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html
@@ -161,319 +161,322 @@
 <span class="sourceLineNo">153</span><a name="line.153"></a>
 <span class="sourceLineNo">154</span>  public void cleanupBulkLoad(final HRegion region, final CleanupBulkLoadRequest request)<a name="line.154"></a>
 <span class="sourceLineNo">155</span>      throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    try {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      region.getCoprocessorHost().preCleanupBulkLoad(getActiveUser());<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>      Path path = new Path(request.getBulkToken());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      if (!fs.delete(path, true)) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        if (fs.exists(path)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          throw new IOException("Failed to clean up " + path);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      LOG.info("Cleaned up " + path + " successfully.");<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    } finally {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      UserGroupInformation ugi = getActiveUser().getUGI();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        if (!UserGroupInformation.getLoginUser().equals(ugi) &amp;&amp; !isUserReferenced(ugi)) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          FileSystem.closeAllForUGI(ugi);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      } catch (IOException e) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        LOG.error("Failed to close FileSystem for: " + ugi, e);<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>  private Consumer&lt;HRegion&gt; fsCreatedListener;<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @VisibleForTesting<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  void setFsCreatedListener(Consumer&lt;HRegion&gt; fsCreatedListener) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.fsCreatedListener = fsCreatedListener;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private void incrementUgiReference(UserGroupInformation ugi) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    // if we haven't seen this ugi before, make a new counter<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    ugiReferenceCounter.compute(ugi, (key, value) -&gt; {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      if (value == null) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        value = new MutableInt(1);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      } else {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        value.increment();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      return value;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    });<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  private void decrementUgiReference(UserGroupInformation ugi) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // if the count drops below 1 we remove the entry by returning null<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    ugiReferenceCounter.computeIfPresent(ugi, (key, value) -&gt; {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      if (value.intValue() &gt; 1) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        value.decrement();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        value = null;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return value;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    });<a name="line.207"></a>
+<span class="sourceLineNo">156</span>    region.getCoprocessorHost().preCleanupBulkLoad(getActiveUser());<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    Path path = new Path(request.getBulkToken());<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    if (!fs.delete(path, true)) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (fs.exists(path)) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        throw new IOException("Failed to clean up " + path);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    LOG.trace("Cleaned up {} successfully.", path);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private Consumer&lt;HRegion&gt; fsCreatedListener;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  @VisibleForTesting<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  void setFsCreatedListener(Consumer&lt;HRegion&gt; fsCreatedListener) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    this.fsCreatedListener = fsCreatedListener;<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>  private void incrementUgiReference(UserGroupInformation ugi) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // if we haven't seen this ugi before, make a new counter<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    ugiReferenceCounter.compute(ugi, (key, value) -&gt; {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      if (value == null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        value = new MutableInt(1);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        value.increment();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      return value;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    });<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private void decrementUgiReference(UserGroupInformation ugi) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    // if the count drops below 1 we remove the entry by returning null<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    ugiReferenceCounter.computeIfPresent(ugi, (key, value) -&gt; {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      if (value.intValue() &gt; 1) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        value.decrement();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      } else {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        value = null;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      return value;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    });<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  private boolean isUserReferenced(UserGroupInformation ugi) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // if the ugi is in the map, based on invariants above<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // the count must be above zero<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    return ugiReferenceCounter.containsKey(ugi);<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>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    final BulkLoadHFileRequest request) throws IOException {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return secureBulkLoadHFiles(region, request, null);<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>  private boolean isUserReferenced(UserGroupInformation ugi) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    // if the ugi is in the map, based on invariants above<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // the count must be above zero<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    return ugiReferenceCounter.containsKey(ugi);<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>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    final BulkLoadHFileRequest request) throws IOException {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    return secureBulkLoadHFiles(region, request, null);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      final BulkLoadHFileRequest request, List&lt;String&gt; clusterIds) throws IOException {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; familyPaths = new ArrayList&lt;&gt;(request.getFamilyPathCount());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    for(ClientProtos.BulkLoadHFileRequest.FamilyPath el : request.getFamilyPathList()) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      familyPaths.add(new Pair&lt;&gt;(el.getFamily().toByteArray(), el.getPath()));<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>    Token&lt;AuthenticationTokenIdentifier&gt; userToken = null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      userToken = new Token&lt;&gt;(request.getFsToken().getIdentifier().toByteArray(),<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        request.getFsToken().getPassword().toByteArray(), new Text(request.getFsToken().getKind()),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        new Text(request.getFsToken().getService()));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    final String bulkToken = request.getBulkToken();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    User user = getActiveUser();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    final UserGroupInformation ugi = user.getUGI();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      try {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        Token&lt;AuthenticationTokenIdentifier&gt; tok = ClientTokenUtil.obtainToken(conn).get();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        if (tok != null) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          boolean b = ugi.addToken(tok);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          LOG.debug("token added " + tok + " for user " + ugi + " return=" + b);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        }<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      } catch (Exception ioe) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.warn("unable to add token", ioe);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
+<span class="sourceLineNo">210</span>  public Map&lt;byte[], List&lt;Path&gt;&gt; secureBulkLoadHFiles(final HRegion region,<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final BulkLoadHFileRequest request, List&lt;String&gt; clusterIds) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; familyPaths = new ArrayList&lt;&gt;(request.getFamilyPathCount());<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    for(ClientProtos.BulkLoadHFileRequest.FamilyPath el : request.getFamilyPathList()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      familyPaths.add(new Pair&lt;&gt;(el.getFamily().toByteArray(), el.getPath()));<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Token&lt;AuthenticationTokenIdentifier&gt; userToken = null;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      userToken = new Token&lt;&gt;(request.getFsToken().getIdentifier().toByteArray(),<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        request.getFsToken().getPassword().toByteArray(), new Text(request.getFsToken().getKind()),<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        new Text(request.getFsToken().getService()));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    final String bulkToken = request.getBulkToken();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    User user = getActiveUser();<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    final UserGroupInformation ugi = user.getUGI();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (userProvider.isHadoopSecurityEnabled()) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      try {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        Token&lt;AuthenticationTokenIdentifier&gt; tok = ClientTokenUtil.obtainToken(conn).get();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        if (tok != null) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          boolean b = ugi.addToken(tok);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          LOG.debug("token added " + tok + " for user " + ugi + " return=" + b);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (Exception ioe) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.warn("unable to add token", ioe);<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>    if (userToken != null) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ugi.addToken(userToken);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    } else if (userProvider.isHadoopSecurityEnabled()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      //we allow this to pass through in "simple" security mode<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      //for mini cluster testing<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      throw new DoNotRetryIOException("User token cannot be null");<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>    if (region.getCoprocessorHost() != null) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      region.getCoprocessorHost().preBulkLoadHFile(familyPaths);<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (userToken != null) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      ugi.addToken(userToken);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    } else if (userProvider.isHadoopSecurityEnabled()) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      //we allow this to pass through in "simple" security mode<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      //for mini cluster testing<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      throw new DoNotRetryIOException("User token cannot be null");<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 (region.getCoprocessorHost() != null) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      region.getCoprocessorHost().preBulkLoadHFile(familyPaths);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    Map&lt;byte[], List&lt;Path&gt;&gt; map = null;<a name="line.259"></a>
+<span class="sourceLineNo">248</span>    Map&lt;byte[], List&lt;Path&gt;&gt; map = null;<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    try {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      incrementUgiReference(ugi);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      // Get the target fs (HBase region server fs) delegation token<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      // Since we have checked the permission via 'preBulkLoadHFile', now let's give<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      // the 'request user' necessary token to operate on the target fs.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // After this point the 'doAs' user will hold two tokens, one for the source fs<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      // ('request user'), another for the target fs (HBase region server principal).<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      if (userProvider.isHadoopSecurityEnabled()) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        FsDelegationToken targetfsDelegationToken = new FsDelegationToken(userProvider,"renewer");<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        targetfsDelegationToken.acquireDelegationToken(fs);<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    try {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      incrementUgiReference(ugi);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      // Get the target fs (HBase region server fs) delegation token<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // Since we have checked the permission via 'preBulkLoadHFile', now let's give<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // the 'request user' necessary token to operate on the target fs.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      // After this point the 'doAs' user will hold two tokens, one for the source fs<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      // ('request user'), another for the target fs (HBase region server principal).<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      if (userProvider.isHadoopSecurityEnabled()) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        FsDelegationToken targetfsDelegationToken = new FsDelegationToken(userProvider,"renewer");<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        targetfsDelegationToken.acquireDelegationToken(fs);<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>        Token&lt;?&gt; targetFsToken = targetfsDelegationToken.getUserToken();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        if (targetFsToken != null<a name="line.273"></a>
-<span class="sourceLineNo">274</span>            &amp;&amp; (userToken == null || !targetFsToken.getService().equals(userToken.getService()))){<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          ugi.addToken(targetFsToken);<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><a name="line.278"></a>
-<span class="sourceLineNo">279</span>      map = ugi.doAs(new PrivilegedAction&lt;Map&lt;byte[], List&lt;Path&gt;&gt;&gt;() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        public Map&lt;byte[], List&lt;Path&gt;&gt; run() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          FileSystem fs = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>          try {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            fs = FileSystem.get(conf);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>            for(Pair&lt;byte[], String&gt; el: familyPaths) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>              Path stageFamily = new Path(bulkToken, Bytes.toString(el.getFirst()));<a name="line.286"></a>
-<span class="sourceLineNo">287</span>              if(!fs.exists(stageFamily)) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>                fs.mkdirs(stageFamily);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>                fs.setPermission(stageFamily, PERM_ALL_ACCESS);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            if (fsCreatedListener != null) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>              fsCreatedListener.accept(region);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            //We call bulkLoadHFiles as requesting user<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            //To enable access prior to staging<a name="line.296"></a>
-<span class="sourceLineNo">297</span>            return region.bulkLoadHFiles(familyPaths, true,<a name="line.297"></a>
-<span class="sourceLineNo">298</span>                new SecureBulkLoadListener(fs, bulkToken, conf), request.getCopyFile(),<a name="line.298"></a>
-<span class="sourceLineNo">299</span>              clusterIds, request.getReplicate());<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          } catch (Exception e) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>            LOG.error("Failed to complete bulk load", e);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          return null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      });<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    } finally {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      decrementUgiReference(ugi);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (region.getCoprocessorHost() != null) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        region.getCoprocessorHost().postBulkLoadHFile(familyPaths, map);<a name="line.309"></a>
+<span class="sourceLineNo">261</span>        Token&lt;?&gt; targetFsToken = targetfsDelegationToken.getUserToken();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (targetFsToken != null<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            &amp;&amp; (userToken == null || !targetFsToken.getService().equals(userToken.getService()))){<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          ugi.addToken(targetFsToken);<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>      map = ugi.doAs(new PrivilegedAction&lt;Map&lt;byte[], List&lt;Path&gt;&gt;&gt;() {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        public Map&lt;byte[], List&lt;Path&gt;&gt; run() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          FileSystem fs = null;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          try {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>            /*<a name="line.273"></a>
+<span class="sourceLineNo">274</span>             * This is creating and caching a new FileSystem instance. Other code called<a name="line.274"></a>
+<span class="sourceLineNo">275</span>             * "beneath" this method will rely on this FileSystem instance being in the<a name="line.275"></a>
+<span class="sourceLineNo">276</span>             * cache. This is important as those methods make _no_ attempt to close this<a name="line.276"></a>
+<span class="sourceLineNo">277</span>             * FileSystem instance. It is critical that here, in SecureBulkLoadManager,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>             * we are tracking the lifecycle and closing the FS when safe to do so.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>             */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            fs = FileSystem.get(conf);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>            for(Pair&lt;byte[], String&gt; el: familyPaths) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>              Path stageFamily = new Path(bulkToken, Bytes.toString(el.getFirst()));<a name="line.282"></a>
+<span class="sourceLineNo">283</span>              if(!fs.exists(stageFamily)) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>                fs.mkdirs(stageFamily);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>                fs.setPermission(stageFamily, PERM_ALL_ACCESS);<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>            if (fsCreatedListener != null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>              fsCreatedListener.accept(region);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>            }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            //We call bulkLoadHFiles as requesting user<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            //To enable access prior to staging<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            return region.bulkLoadHFiles(familyPaths, true,<a name="line.293"></a>
+<span class="sourceLineNo">294</span>                new SecureBulkLoadListener(fs, bulkToken, conf), request.getCopyFile(),<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              clusterIds, request.getReplicate());<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          } catch (Exception e) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>            LOG.error("Failed to complete bulk load", e);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          return null;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      });<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    } finally {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      decrementUgiReference(ugi);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      try {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        if (!UserGroupInformation.getLoginUser().equals(ugi) &amp;&amp; !isUserReferenced(ugi)) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>          FileSystem.closeAllForUGI(ugi);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      } catch (IOException e) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        LOG.error("Failed to close FileSystem for: {}", ugi, e);<a name="line.309"></a>
 <span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    return map;<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>  private Path createStagingDir(Path baseDir,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>                                User user,<a name="line.316"></a>
-<span class="sourceLineNo">317</span>                                TableName tableName) throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return createStagingDir(baseDir, user, randomDir);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  private Path createStagingDir(Path baseDir,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                                User user,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>                                String randomDir) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    Path p = new Path(baseDir, randomDir);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    return p;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private User getActiveUser() throws IOException {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    // for non-rpc handling, fallback to system user<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    User user = RpcServer.getRequestUser().orElse(userProvider.getCurrent());<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    // this is for testing<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    if (userProvider.isHadoopSecurityEnabled() &amp;&amp;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      return User.createUserForTesting(conf, user.getShortName(), new String[] {});<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>    return user;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">311</span>      if (region.getCoprocessorHost() != null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        region.getCoprocessorHost().postBulkLoadHFile(familyPaths, map);<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>    return map;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private Path createStagingDir(Path baseDir,<a name="line.318"></a>
+<span class="sourceLineNo">319</span>                                User user,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>                                TableName tableName) throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    return createStagingDir(baseDir, user, randomDir);<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>  private Path createStagingDir(Path baseDir,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>                                User user,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>                                String randomDir) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Path p = new Path(baseDir, randomDir);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return p;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private User getActiveUser() throws IOException {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    // for non-rpc handling, fallback to system user<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    User user = RpcServer.getRequestUser().orElse(userProvider.getCurrent());<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // this is for testing<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (userProvider.isHadoopSecurityEnabled() &amp;&amp;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      return User.createUserForTesting(conf, user.getShortName(), new String[] {});<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
 <span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Target filesystem<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    private final FileSystem fs;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    private final String stagingDir;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    private final Configuration conf;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // Source filesystem<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    private FileSystem srcFs = null;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      this.fs = fs;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.stagingDir = stagingDir;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      this.conf = conf;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      this.origPermissions = new HashMap&lt;&gt;();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    public String prepareBulkLoad(final byte[] family, final String srcPath, boolean copyFile)<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      Path p = new Path(srcPath);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      if (p.equals(stageP)) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        LOG.debug(p.getName()<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        return stageP.toString();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (srcFs == null) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        srcFs = FileSystem.newInstance(p.toUri(), conf);<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>      if(!isFile(p)) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        throw new IOException("Path does not reference a file: " + p);<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>      // Check to see if the source and target filesystems are the same<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.384"></a>
-<span class="sourceLineNo">385</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      } else if (copyFile) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("Bulk-load file " + srcPath + " is copied to destination staging dir.");<a name="line.388"></a>
+<span class="sourceLineNo">345</span>    return user;<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    // Target filesystem<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    private final FileSystem fs;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private final String stagingDir;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private final Configuration conf;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // Source filesystem<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private FileSystem srcFs = null;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      this.fs = fs;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.stagingDir = stagingDir;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.conf = conf;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.origPermissions = new HashMap&lt;&gt;();<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>    @Override<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    public String prepareBulkLoad(final byte[] family, final String srcPath, boolean copyFile)<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        throws IOException {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      Path p = new Path(srcPath);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (p.equals(stageP)) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        LOG.debug(p.getName()<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        return stageP.toString();<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>      if (srcFs == null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        srcFs = FileSystem.newInstance(p.toUri(), conf);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      }<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>      if(!isFile(p)) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        throw new IOException("Path does not reference a file: " + p);<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>      // Check to see if the source and target filesystems are the same<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.387"></a>
+<span class="sourceLineNo">388</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.388"></a>
 <span class="sourceLineNo">389</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } else {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        if(!fs.rename(p, stageP)) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        }<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return stageP.toString();<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>    @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    public void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      LOG.debug("Bulk Load done for: " + srcPath);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      closeSrcFs();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    private void closeSrcFs() throws IOException {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if (srcFs != null) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        srcFs.close();<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        srcFs = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        Path p = new Path(srcPath);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        if (srcFs == null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          srcFs = FileSystem.newInstance(p.toUri(), conf);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          // files are copied so no need to move them back<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          return;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>        // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        // prepare stage, so no need of rename here again<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        if (p.equals(stageP)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          return;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>        LOG.debug("Moving " + stageP + " back to " + p);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        if (!fs.rename(stageP, p)) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>        // restore original permission<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        if (origPermissions.containsKey(srcPath)) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          fs.setPermission(p, origPermissions.get(srcPath));<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        } else {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      } finally {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        closeSrcFs();<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>    /**<a name="line.451"></a>
-<span class="sourceLineNo">452</span>     * Check if the path is referencing a file.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>     * This is mainly needed to avoid symlinks.<a name="line.453"></a>
-<span class="sourceLineNo">454</span>     * @param p<a name="line.454"></a>
-<span class="sourceLineNo">455</span>     * @return true if the p is a file<a name="line.455"></a>
-<span class="sourceLineNo">456</span>     * @throws IOException<a name="line.456"></a>
-<span class="sourceLineNo">457</span>     */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    private boolean isFile(Path p) throws IOException {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      boolean isFile = !status.isDirectory();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      try {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } catch (Exception e) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      return isFile;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>}<a name="line.468"></a>
+<span class="sourceLineNo">390</span>      } else if (copyFile) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        LOG.debug("Bulk-load file " + srcPath + " is copied to destination staging dir.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        if(!fs.rename(p, stageP)) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<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>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return stageP.toString();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    public void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      LOG.debug("Bulk Load done for: " + srcPath);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      closeSrcFs();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>    private void closeSrcFs() throws IOException {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      if (srcFs != null) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        srcFs.close();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        srcFs = null;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      try {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        Path p = new Path(srcPath);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (srcFs == null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          srcFs = FileSystem.newInstance(p.toUri(), conf);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          // files are copied so no need to move them back<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          return;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>        // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        // prepare stage, so no need of rename here again<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        if (p.equals(stageP)) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          return;<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>        LOG.debug("Moving " + stageP + " back to " + p);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        if (!fs.rename(stageP, p)) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>        // restore original permission<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        if (origPermissions.containsKey(srcPath)) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          fs.setPermission(p, origPermissions.get(srcPath));<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        } else {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>          LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      } finally {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        closeSrcFs();<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><a name="line.453"></a>
+<span class="sourceLineNo">454</span>    /**<a name="line.454"></a>
+<span class="sourceLineNo">455</span>     * Check if the path is referencing a file.<a name="line.455"></a>
+<span class="sourceLineNo">456</span>     * This is mainly needed to avoid symlinks.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>     * @param p<a name="line.457"></a>
+<span class="sourceLineNo">458</span>     * @return true if the p is a file<a name="line.458"></a>
+<span class="sourceLineNo">459</span>     * @throws IOException<a name="line.459"></a>
+<span class="sourceLineNo">460</span>     */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    private boolean isFile(Path p) throws IOException {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      boolean isFile = !status.isDirectory();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      } catch (Exception e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return isFile;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
+<span class="sourceLineNo">471</span>}<a name="line.471"></a>
 
 
 
diff --git a/downloads.html b/downloads.html
index ce73d43..8b07c6f 100644
--- a/downloads.html
+++ b/downloads.html
@@ -418,7 +418,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 334028c..374598d 100644
--- a/export_control.html
+++ b/export_control.html
@@ -180,7 +180,7 @@ for more details.</p>
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 6cc0da8..79eebdb 100644
--- a/index.html
+++ b/index.html
@@ -258,7 +258,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 c725414..ee2aaf9 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -152,7 +152,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 d1eae5c..3a03603 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -205,7 +205,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 45223d9..803698f 100644
--- a/metrics.html
+++ b/metrics.html
@@ -308,7 +308,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 46b413d..f9f2e2b 100644
--- a/old_news.html
+++ b/old_news.html
@@ -299,7 +299,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 9d38101..e34a20c 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -304,7 +304,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 cf6d851..b4a5842 100644
--- a/plugins.html
+++ b/plugins.html
@@ -231,7 +231,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 66ad7d9..43dd192 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -633,7 +633,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 6e6363d..c14b058 100644
--- a/project-info.html
+++ b/project-info.html
@@ -193,7 +193,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 8de6bb1..269b4fe 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -169,7 +169,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 4da132b..816e74c 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -195,7 +195,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 5c4ddad..33a9c7d 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -157,7 +157,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 600ec44..00d86bd 100644
--- a/replication.html
+++ b/replication.html
@@ -152,7 +152,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 8a8f756..29453f7 100644
--- a/resources.html
+++ b/resources.html
@@ -180,7 +180,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 9a441f1..2a9b01e 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -163,7 +163,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 eb70844..eb403db 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -182,7 +182,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 37d30bb..094bca3 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -373,7 +373,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 f814c84..cefb156 100644
--- a/team-list.html
+++ b/team-list.html
@@ -672,7 +672,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-01-14</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 c57c880..69400e2 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -2387,6 +2387,11 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RedundantKVGenerator.html#averageSuffixLength">averageSuffixLength</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RedundantKVGenerator.html" title="class in org.apache.hadoop.hbase.util">RedundantKVGenerator</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMetaFixer.html#await-long-java.util.function.BooleanSupplier-">await(long, BooleanSupplier)</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMetaFixer.html" title="class in org.apache.hadoop.hbase.master">TestMetaFixer</a></dt>
+<dd>
+<div class="block">Await the successful return of <code>condition</code>, sleeping <code>sleepMillis</code> between
+ invocations.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestCompactionLifeCycleTracker.Tracker.html#await--">await()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestCompactionLifeCycleTracker.Tracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestCompactionLifeCycleTracker.Tracker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.Tracker.html#await--">await()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.Tracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestFlushLifeCycleTracker.Tracker</a></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index fa6650a..88e37d3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -150,8 +150,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.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html
index a579719..ce3b748 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html
@@ -163,8 +163,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.actions.<a href="../../../../../../org/apache/hadoop/hbase/chaos/actions/RollingBatchRestartRsAction.KillOrStart.html" title="enum in org.apache.hadoop.hbase.chaos.actions"><span class="typeNameLink">RollingBatchRestartRsAction.KillOrStart</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.chaos.actions.<a href="../../../../../../org/apache/hadoop/hbase/chaos/actions/RollingBatchSuspendResumeRsAction.SuspendOrResume.html" title="enum in org.apache.hadoop.hbase.chaos.actions"><span class="typeNameLink">RollingBatchSuspendResumeRsAction.SuspendOrResume</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.chaos.actions.<a href="../../../../../../org/apache/hadoop/hbase/chaos/actions/RollingBatchRestartRsAction.KillOrStart.html" title="enum in org.apache.hadoop.hbase.chaos.actions"><span class="typeNameLink">RollingBatchRestartRsAction.KillOrStart</span></a></li>
 </ul>
 </li>
 </ul>
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 c175e2f..871f27a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -163,8 +163,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/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>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaFixer.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaFixer.html
index 8a445c0..b8cfb7f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaFixer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMetaFixer.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":9,"i4":10,"i5":10,"i6":10};
+var methods = {"i0":9,"i1":10,"i2":9,"i3":9,"i4":9,"i5":10,"i6":10,"i7":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";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.47">TestMetaFixer</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.46">TestMetaFixer</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>
@@ -174,36 +174,44 @@ 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>private static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#await-long-java.util.function.BooleanSupplier-">await</a></span>(long&nbsp;sleepMillis,
+     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/BooleanSupplier.html?is-external=true" title="class or interface in java.util.function">BooleanSupplier</a>&nbsp;condition)</code>
+<div class="block">Await the successful return of <code>condition</code>, sleeping <code>sleepMillis</code> between
+ invocations.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#deleteRegion-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.hbase.client.RegionInfo-">deleteRegion</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
             org.apache.hadoop.hbase.client.RegionInfo&nbsp;ri)</code>&nbsp;</td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#makeOverlap-org.apache.hadoop.hbase.master.MasterServices-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">makeOverlap</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
            org.apache.hadoop.hbase.client.RegionInfo&nbsp;a,
            org.apache.hadoop.hbase.client.RegionInfo&nbsp;b)</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#setupBeforeClass--">setupBeforeClass</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaFixer.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<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/master/TestMetaFixer.html#testOneRegionTable--">testOneRegionTable</a></span>()</code>
 <div class="block">Just make sure running fixMeta does right thing for the case
  of a single-region Table where the region gets dropped.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<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/master/TestMetaFixer.html#testOverlap--">testOverlap</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<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/master/TestMetaFixer.html#testPlugsHoles--">testPlugsHoles</a></span>()</code>&nbsp;</td>
 </tr>
@@ -235,7 +243,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/master/TestMetaFixer.html#line.49">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/master/TestMetaFixer.html#line.48">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -244,7 +252,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.52">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.51">name</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -253,7 +261,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.54">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.53">TEST_UTIL</a></pre>
 </li>
 </ul>
 </li>
@@ -270,7 +278,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestMetaFixer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.47">TestMetaFixer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.46">TestMetaFixer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -287,7 +295,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.57">setupBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.56">setupBeforeClass</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>
@@ -301,7 +309,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.62">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.61">tearDownAfterClass</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>
@@ -315,7 +323,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.66">deleteRegion</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.65">deleteRegion</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
                           org.apache.hadoop.hbase.client.RegionInfo&nbsp;ri)
                    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>
@@ -330,11 +338,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testPlugsHoles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.73">testPlugsHoles</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>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.72">testPlugsHoles</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>
-<dd><code><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></code></dd>
+<dd><code><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></code></dd>
 </dl>
 </li>
 </ul>
@@ -344,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>testOneRegionTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.113">testOneRegionTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.114">testOneRegionTable</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>
 <div class="block">Just make sure running fixMeta does right thing for the case
  of a single-region Table where the region gets dropped.
@@ -362,7 +370,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>makeOverlap</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.132">makeOverlap</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.133">makeOverlap</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;services,
                                 org.apache.hadoop.hbase.client.RegionInfo&nbsp;a,
                                 org.apache.hadoop.hbase.client.RegionInfo&nbsp;b)
                          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>
@@ -375,14 +383,31 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testOverlap--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testOverlap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.146">testOverlap</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>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.147">testOverlap</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>
-<dd><code><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></code></dd>
+<dd><code><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></code></dd>
+</dl>
+</li>
+</ul>
+<a name="await-long-java.util.function.BooleanSupplier-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>await</h4>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html#line.182">await</a>(long&nbsp;sleepMillis,
+                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/BooleanSupplier.html?is-external=true" title="class or interface in java.util.function">BooleanSupplier</a>&nbsp;condition)
+                   throws <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>
+<div class="block">Await the successful return of <code>condition</code>, sleeping <code>sleepMillis</code> between
+ invocations.</div>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><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></code></dd>
 </dl>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index 35d1b61..471d87d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -594,15 +594,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.<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/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/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/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/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/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/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/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</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 c6bce5f..8ff917c 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.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.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.procedure.ProcedureManager
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index a6323d4..e9ee5fc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -719,11 +719,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.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<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>
 </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 c7a3e85..a8298ae 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -254,8 +254,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.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/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>
 </ul>
 </li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 0612d72..45aafc7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -163,9 +163,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/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>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html
index 8eea62e..fa52509 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMetaFixer.html
@@ -25,13 +25,13 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils.isNotEmpty;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Collections;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">026</span>import java.util.function.BooleanSupplier;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HConstants;<a name="line.29"></a>
@@ -42,146 +42,165 @@
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.BeforeClass;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.ClassRule;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.Rule;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.Test;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.junit.experimental.categories.Category;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.junit.rules.TestName;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>@Category({MasterTests.class, LargeTests.class})<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class TestMetaFixer {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  @ClassRule<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      HBaseClassTestRule.forClass(TestMetaFixer.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @Rule<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public TestName name = new TestName();<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  @BeforeClass<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public static void setupBeforeClass() throws Exception {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    TEST_UTIL.startMiniCluster();<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>  @AfterClass<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public static void tearDownAfterClass() throws Exception {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    TEST_UTIL.shutdownMiniCluster();<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>  private void deleteRegion(MasterServices services, RegionInfo ri) throws IOException {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    MetaTableAccessor.deleteRegionInfo(TEST_UTIL.getConnection(), ri);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    // Delete it from Master context too else it sticks around.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    services.getAssignmentManager().getRegionStates().deleteRegion(ri);<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>  @Test<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public void testPlugsHoles() throws IOException {<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    TableName tn = TableName.valueOf(this.name.getMethodName());<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    TEST_UTIL.createMultiRegionTable(tn, HConstants.CATALOG_FAMILY);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    List&lt;RegionInfo&gt; ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    MasterServices services = TEST_UTIL.getHBaseCluster().getMaster();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    int initialSize = services.getAssignmentManager().getRegionStates().getRegionStates().size();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    services.getCatalogJanitor().scan();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    CatalogJanitor.Report report = services.getCatalogJanitor().getLastReport();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    assertTrue(report.isEmpty());<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    int originalCount = ris.size();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    // Remove first, last and middle region. See if hole gets plugged. Table has 26 regions.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    deleteRegion(services, ris.get(ris.size() -1));<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    deleteRegion(services, ris.get(3));<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    deleteRegion(services, ris.get(0));<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    assertEquals(initialSize - 3,<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        services.getAssignmentManager().getRegionStates().getRegionStates().size());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    services.getCatalogJanitor().scan();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    assertEquals(report.toString(), 3, report.getHoles().size());<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    MetaFixer fixer = new MetaFixer(services);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    fixer.fixHoles(report);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    services.getCatalogJanitor().scan();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    assertTrue(report.toString(), report.isEmpty());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    assertEquals(initialSize,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        services.getAssignmentManager().getRegionStates().getRegionStates().size());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // Disable and reenable so the added regions get reassigned.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    TEST_UTIL.getAdmin().disableTable(tn);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    TEST_UTIL.getAdmin().enableTable(tn);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    assertEquals(originalCount, ris.size());<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>  /**<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * Just make sure running fixMeta does right thing for the case<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * of a single-region Table where the region gets dropped.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * There is nothing much we can do. We can't restore what<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * we don't know about (at least from a read of hbase:meta).<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 testOneRegionTable() throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    TableName tn = TableName.valueOf(this.name.getMethodName());<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    TEST_UTIL.createTable(tn, HConstants.CATALOG_FAMILY);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    List&lt;RegionInfo&gt; ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    MasterServices services = TEST_UTIL.getHBaseCluster().getMaster();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    services.getCatalogJanitor().scan();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    deleteRegion(services, ris.get(0));<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    services.getCatalogJanitor().scan();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    CatalogJanitor.Report report = services.getCatalogJanitor().getLastReport();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    assertTrue(ris.isEmpty());<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    MetaFixer fixer = new MetaFixer(services);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    fixer.fixHoles(report);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    assertTrue(report.isEmpty());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(0, ris.size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private static void makeOverlap(MasterServices services, RegionInfo a, RegionInfo b)<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      throws IOException {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    RegionInfo overlapRegion = RegionInfoBuilder.newBuilder(a.getTable()).<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        setStartKey(a.getStartKey()).<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        setEndKey(b.getEndKey()).<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        build();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    MetaTableAccessor.putsToMetaTable(services.getConnection(),<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        Collections.singletonList(MetaTableAccessor.makePutFromRegionInfo(overlapRegion,<a name="line.139"></a>
-<span class="sourceLineNo">140</span>            System.currentTimeMillis())));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // TODO: Add checks at assign time to PREVENT being able to assign over existing assign.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    services.getAssignmentManager().assign(overlapRegion);<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>  @Test<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void testOverlap() throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    TableName tn = TableName.valueOf(this.name.getMethodName());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    TEST_UTIL.createMultiRegionTable(tn, HConstants.CATALOG_FAMILY);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    List&lt;RegionInfo&gt; ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    assertTrue(ris.size() &gt; 5);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    MasterServices services = TEST_UTIL.getHBaseCluster().getMaster();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    services.getCatalogJanitor().scan();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    CatalogJanitor.Report report = services.getCatalogJanitor().getLastReport();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    assertTrue(report.isEmpty());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // Make a simple overlap spanning second and third region.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    makeOverlap(services, ris.get(1), ris.get(3));<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    makeOverlap(services, ris.get(2), ris.get(3));<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    makeOverlap(services, ris.get(2), ris.get(4));<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    Threads.sleep(10000);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    services.getCatalogJanitor().scan();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    assertEquals(6, report.getOverlaps().size());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    assertEquals(1, MetaFixer.calculateMerges(10, report.getOverlaps()).size());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    MetaFixer fixer = new MetaFixer(services);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    fixer.fixOverlaps(report);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    while (true) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      services.getCatalogJanitor().scan();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      report = services.getCatalogJanitor().getLastReport();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      if (report.isEmpty()) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        break;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      Threads.sleep(10);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    assertTrue(report.toString(), report.isEmpty());<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">037</span>import org.junit.AfterClass;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Rule;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.Test;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.experimental.categories.Category;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.rules.TestName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({MasterTests.class, LargeTests.class})<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestMetaFixer {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  @ClassRule<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      HBaseClassTestRule.forClass(TestMetaFixer.class);<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  @Rule<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public TestName name = new TestName();<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  @BeforeClass<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public static void setupBeforeClass() throws Exception {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    TEST_UTIL.startMiniCluster();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  @AfterClass<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public static void tearDownAfterClass() throws Exception {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    TEST_UTIL.shutdownMiniCluster();<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>  private void deleteRegion(MasterServices services, RegionInfo ri) throws IOException {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    MetaTableAccessor.deleteRegionInfo(TEST_UTIL.getConnection(), ri);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    // Delete it from Master context too else it sticks around.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    services.getAssignmentManager().getRegionStates().deleteRegion(ri);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Test<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public void testPlugsHoles() throws Exception {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    TableName tn = TableName.valueOf(this.name.getMethodName());<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    TEST_UTIL.createMultiRegionTable(tn, HConstants.CATALOG_FAMILY);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    List&lt;RegionInfo&gt; ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    MasterServices services = TEST_UTIL.getHBaseCluster().getMaster();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    int initialSize = services.getAssignmentManager().getRegionStates().getRegionStates().size();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    services.getCatalogJanitor().scan();<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    CatalogJanitor.Report report = services.getCatalogJanitor().getLastReport();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    assertTrue(report.isEmpty());<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    int originalCount = ris.size();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    // Remove first, last and middle region. See if hole gets plugged. Table has 26 regions.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    deleteRegion(services, ris.get(ris.size() -1));<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    deleteRegion(services, ris.get(3));<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    deleteRegion(services, ris.get(0));<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    assertEquals(initialSize - 3,<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        services.getAssignmentManager().getRegionStates().getRegionStates().size());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    services.getCatalogJanitor().scan();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    assertEquals(report.toString(), 3, report.getHoles().size());<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    MetaFixer fixer = new MetaFixer(services);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    fixer.fixHoles(report);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    services.getCatalogJanitor().scan();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    assertTrue(report.toString(), report.isEmpty());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    assertEquals(initialSize,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        services.getAssignmentManager().getRegionStates().getRegionStates().size());<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>    // wait for RITs to settle -- those are the fixed regions being assigned -- or until the<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    // watchdog TestRule terminates the test.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    await(50, () -&gt; isNotEmpty(services.getAssignmentManager().getRegionsInTransition()));<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assertEquals(originalCount, ris.size());<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  /**<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * Just make sure running fixMeta does right thing for the case<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * of a single-region Table where the region gets dropped.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * There is nothing much we can do. We can't restore what<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * we don't know about (at least from a read of hbase:meta).<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 testOneRegionTable() throws IOException {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    TableName tn = TableName.valueOf(this.name.getMethodName());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    TEST_UTIL.createTable(tn, HConstants.CATALOG_FAMILY);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    List&lt;RegionInfo&gt; ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    MasterServices services = TEST_UTIL.getHBaseCluster().getMaster();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    services.getCatalogJanitor().scan();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    deleteRegion(services, ris.get(0));<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    services.getCatalogJanitor().scan();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    CatalogJanitor.Report report = services.getCatalogJanitor().getLastReport();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    assertTrue(ris.isEmpty());<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    MetaFixer fixer = new MetaFixer(services);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    fixer.fixHoles(report);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    assertTrue(report.isEmpty());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assertEquals(0, ris.size());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static void makeOverlap(MasterServices services, RegionInfo a, RegionInfo b)<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      throws IOException {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    RegionInfo overlapRegion = RegionInfoBuilder.newBuilder(a.getTable()).<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        setStartKey(a.getStartKey()).<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        setEndKey(b.getEndKey()).<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        build();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    MetaTableAccessor.putsToMetaTable(services.getConnection(),<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        Collections.singletonList(MetaTableAccessor.makePutFromRegionInfo(overlapRegion,<a name="line.140"></a>
+<span class="sourceLineNo">141</span>            System.currentTimeMillis())));<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    // TODO: Add checks at assign time to PREVENT being able to assign over existing assign.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    services.getAssignmentManager().assign(overlapRegion);<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>  @Test<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  public void testOverlap() throws Exception {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    TableName tn = TableName.valueOf(this.name.getMethodName());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    TEST_UTIL.createMultiRegionTable(tn, HConstants.CATALOG_FAMILY);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    List&lt;RegionInfo&gt; ris = MetaTableAccessor.getTableRegions(TEST_UTIL.getConnection(), tn);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assertTrue(ris.size() &gt; 5);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    MasterServices services = TEST_UTIL.getHBaseCluster().getMaster();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    services.getCatalogJanitor().scan();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    CatalogJanitor.Report report = services.getCatalogJanitor().getLastReport();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    assertTrue(report.isEmpty());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    // Make a simple overlap spanning second and third region.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    makeOverlap(services, ris.get(1), ris.get(3));<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    makeOverlap(services, ris.get(2), ris.get(3));<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    makeOverlap(services, ris.get(2), ris.get(4));<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Threads.sleep(10000);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    services.getCatalogJanitor().scan();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    report = services.getCatalogJanitor().getLastReport();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    assertEquals(6, report.getOverlaps().size());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    assertEquals(1, MetaFixer.calculateMerges(10, report.getOverlaps()).size());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    MetaFixer fixer = new MetaFixer(services);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    fixer.fixOverlaps(report);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    await(10, () -&gt; {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      try {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        services.getCatalogJanitor().scan();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        final CatalogJanitor.Report postReport = services.getCatalogJanitor().getLastReport();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        return postReport.isEmpty();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      } catch (Exception e) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        throw new RuntimeException(e);<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>   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * invocations.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  private static void await(final long sleepMillis, final BooleanSupplier condition)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    throws InterruptedException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    try {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      while (!condition.getAsBoolean()) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        Thread.sleep(sleepMillis);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    } catch (RuntimeException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      if (e.getCause() instanceof AssertionError) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        throw (AssertionError) e.getCause();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      throw e;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span>}<a name="line.195"></a>
 
 
 


Mime
View raw message