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

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

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 c407d5f  Published site at b2571df7ae04307c0dbe28caed59aa383d7eec45.
c407d5f is described below

commit c407d5f757092cc08691d908745d03e1505fb7f6
Author: jenkins <bu...@apache.org>
AuthorDate: Thu Nov 18 20:18:06 2021 +0000

    Published site at b2571df7ae04307c0dbe28caed59aa383d7eec45.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |  188 +-
 checkstyle.rss                                     |    4 +-
 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/index-all.html                          |   22 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |    4 +-
 .../apache/hadoop/hbase/chaos/package-tree.html    |    2 +-
 .../apache/hadoop/hbase/class-use/TableName.html   |   21 +-
 .../apache/hadoop/hbase/client/package-tree.html   |   26 +-
 .../hadoop/hbase/coprocessor/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |    8 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |    2 +-
 .../org/apache/hadoop/hbase/http/package-tree.html |    2 +-
 .../org/apache/hadoop/hbase/io/HFileLink.html      |  160 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    8 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html       |    6 +-
 ...plitTableRegionProcedure.StoreFileSplitter.html |   12 +-
 .../assignment/SplitTableRegionProcedure.html      |  116 +-
 .../hbase/master/assignment/package-tree.html      |    2 +-
 .../hadoop/hbase/master/balancer/package-tree.html |    2 +-
 .../apache/hadoop/hbase/master/package-tree.html   |    6 +-
 .../hbase/master/procedure/package-tree.html       |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   18 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    6 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |    8 +-
 .../hbase/regionserver/HRegionFileSystem.html      |  148 +-
 .../hbase/regionserver/RegionSplitPolicy.html      |   22 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   18 +-
 .../regionserver/querymatcher/package-tree.html    |    2 +-
 .../hbase/regionserver/wal/package-tree.html       |    4 +-
 .../hadoop/hbase/rest/model/package-tree.html      |    2 +-
 .../hadoop/hbase/security/access/package-tree.html |    4 +-
 .../apache/hadoop/hbase/security/package-tree.html |    2 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |    2 +-
 .../hadoop/hbase/util/FSUtils.HFileFilter.html     |    8 +-
 .../hadoop/hbase/util/FSUtils.HFileLinkFilter.html |    6 +-
 .../hbase/util/FSUtils.ProgressReporter.html       |    8 +-
 ...tml => FSUtils.ReferenceAndLinkFileFilter.html} |   88 +-
 .../hbase/util/FSUtils.ReferenceFileFilter.html    |   12 +-
 .../org/apache/hadoop/hbase/util/FSUtils.html      |  183 +-
 .../FSUtils.ReferenceAndLinkFileFilter.html        |  125 ++
 .../apache/hadoop/hbase/util/package-frame.html    |    1 +
 .../apache/hadoop/hbase/util/package-summary.html  |  250 +--
 .../org/apache/hadoop/hbase/util/package-tree.html |   11 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 devapidocs/overview-tree.html                      |    1 +
 .../org/apache/hadoop/hbase/io/HFileLink.html      |  916 ++++----
 ...plitTableRegionProcedure.StoreFileSplitter.html | 1780 +++++++--------
 .../assignment/SplitTableRegionProcedure.html      | 1780 +++++++--------
 .../HRegion.BatchOperation.Visitor.html            |    4 +-
 .../hbase/regionserver/HRegion.BatchOperation.html |    4 +-
 .../regionserver/HRegion.BulkLoadListener.html     |    4 +-
 .../regionserver/HRegion.FlushResult.Result.html   |    4 +-
 .../hbase/regionserver/HRegion.FlushResult.html    |    4 +-
 .../regionserver/HRegion.FlushResultImpl.html      |    4 +-
 .../HRegion.MutationBatchOperation.html            |    4 +-
 .../HRegion.ObservedExceptionsInBatch.html         |    4 +-
 .../regionserver/HRegion.PrepareFlushResult.html   |    4 +-
 .../regionserver/HRegion.ReplayBatchOperation.html |    4 +-
 .../hbase/regionserver/HRegion.RowLockContext.html |    4 +-
 .../hbase/regionserver/HRegion.RowLockImpl.html    |    4 +-
 .../hbase/regionserver/HRegion.WriteState.html     |    4 +-
 .../apache/hadoop/hbase/regionserver/HRegion.html  |    4 +-
 .../hbase/regionserver/HRegionFileSystem.html      | 2267 ++++++++++----------
 .../hbase/regionserver/RegionSplitPolicy.html      |  273 ++-
 .../hbase/util/FSUtils.BlackListDirFilter.html     | 1623 +++++++-------
 .../hadoop/hbase/util/FSUtils.DirFilter.html       | 1623 +++++++-------
 .../hadoop/hbase/util/FSUtils.FamilyDirFilter.html | 1623 +++++++-------
 .../hadoop/hbase/util/FSUtils.FileFilter.html      | 1623 +++++++-------
 .../hadoop/hbase/util/FSUtils.HFileFilter.html     | 1623 +++++++-------
 .../hadoop/hbase/util/FSUtils.HFileLinkFilter.html | 1623 +++++++-------
 .../hbase/util/FSUtils.ProgressReporter.html       | 1623 +++++++-------
 ...tml => FSUtils.ReferenceAndLinkFileFilter.html} | 1623 +++++++-------
 .../hbase/util/FSUtils.ReferenceFileFilter.html    | 1623 +++++++-------
 .../hadoop/hbase/util/FSUtils.RegionDirFilter.html | 1623 +++++++-------
 .../hbase/util/FSUtils.UserTableDirFilter.html     | 1623 +++++++-------
 .../org/apache/hadoop/hbase/util/FSUtils.html      | 1623 +++++++-------
 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                      |   10 +-
 .../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 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   16 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    4 +-
 .../hadoop/hbase/regionserver/TestHStoreFile.html  |   66 +-
 ...plitTransactionOnCluster.CustomSplitPolicy.html |    8 +-
 ...actionOnCluster.FailingSplitMasterObserver.html |   12 +-
 .../TestSplitTransactionOnCluster.MyMaster.html    |    6 +-
 ...itTransactionOnCluster.MyMasterRpcServices.html |   10 +-
 .../TestSplitTransactionOnCluster.html             |  176 +-
 .../hadoop/hbase/regionserver/package-tree.html    |    4 +-
 .../org/apache/hadoop/hbase/test/package-tree.html |    2 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../hadoop/hbase/regionserver/TestHStoreFile.html  | 1951 ++++++++---------
 ...plitTransactionOnCluster.CustomSplitPolicy.html | 2228 ++++++++++---------
 ...actionOnCluster.FailingSplitMasterObserver.html | 2228 ++++++++++---------
 .../TestSplitTransactionOnCluster.MyMaster.html    | 2228 ++++++++++---------
 ...itTransactionOnCluster.MyMasterRpcServices.html | 2228 ++++++++++---------
 .../TestSplitTransactionOnCluster.html             | 2228 ++++++++++---------
 128 files changed, 21508 insertions(+), 20043 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index 4192284..a2db8b9 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -455,7 +455,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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 9160a53..e7955c0 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.3, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20211117200545+00'00')
-/CreationDate (D:20211117201556+00'00')
+/ModDate (D:20211118200551+00'00')
+/CreationDate (D:20211118201602+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index c79516c..15cc8d4 100644
--- a/book.html
+++ b/book.html
@@ -46171,7 +46171,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-alpha-2-SNAPSHOT<br>
-Last updated 2021-11-17 20:05:45 UTC
+Last updated 2021-11-18 20:05:51 UTC
 </div>
 </div>
 <link rel="stylesheet" href="./coderay-asciidoctor.css">
diff --git a/bulk-loads.html b/bulk-loads.html
index 18c9176..1e7ffe5 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -160,7 +160,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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 5d59729..8ca5017 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -157,7 +157,7 @@
 <td>4538</td>
 <td>0</td>
 <td>0</td>
-<td>8670</td></tr></table></div>
+<td>8668</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -6740,7 +6740,7 @@
 <td><a href="#org.apache.hadoop.hbase.util.FSUtils.java">org/apache/hadoop/hbase/util/FSUtils.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>53</td></tr>
+<td>51</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.util.FSVisitor.java">org/apache/hadoop/hbase/util/FSVisitor.java</a></td>
 <td>0</td>
@@ -7362,7 +7362,7 @@
 <tr class="b">
 <td>annotation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated">MissingDeprecated</a></td>
-<td>8</td>
+<td>6</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>blocks</td>
@@ -7461,7 +7461,7 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>514</td>
+<td>516</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
@@ -7484,7 +7484,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>847</td>
+<td>845</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
@@ -34873,8 +34873,8 @@
 <th>Line</th></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>annotation</td>
-<td>MissingDeprecated</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 14 has parse error. Details: mismatched input ':' expecting &lt;EOF&gt; while parsing JAVADOC</td>
 <td>46</td></tr></table></div>
 <div class="section">
@@ -46996,235 +46996,235 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' has incorrect indentation level 1, expected level should be 2.</td>
-<td>115</td></tr>
+<td>118</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>198</td></tr>
+<td>201</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>211</td></tr>
+<td>214</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>212</td></tr>
+<td>215</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>347</td></tr>
+<td>350</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>370</td></tr>
+<td>373</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>383</td></tr>
+<td>386</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>388</td></tr>
+<td>391</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>409</td></tr>
+<td>412</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>422</td></tr>
+<td>425</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>462</td></tr>
+<td>465</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>477</td></tr>
+<td>480</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>482</td></tr>
+<td>485</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>547</td></tr>
+<td>550</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>583</td></tr>
+<td>586</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>597</td></tr>
+<td>600</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>648</td></tr>
+<td>651</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>714</td></tr>
+<td>755</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>759</td></tr>
+<td>800</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>776</td></tr>
+<td>817</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>778</td></tr>
+<td>819</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>852</td></tr>
+<td>893</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>935</td></tr>
+<td>976</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1013</td></tr>
+<td>1054</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>1016</td></tr>
+<td>1057</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1026</td></tr>
+<td>1067</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>1039</td></tr>
+<td>1080</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1040</td></tr>
+<td>1081</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>1042</td></tr>
+<td>1083</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1052</td></tr>
+<td>1093</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>1067</td></tr>
+<td>1108</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1069</td></tr>
+<td>1110</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1079</td></tr>
+<td>1120</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1102</td></tr>
+<td>1143</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>1103</td></tr>
+<td>1144</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1104</td></tr>
+<td>1145</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>1107</td></tr>
+<td>1148</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1122</td></tr>
+<td>1163</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1124</td></tr></table></div>
+<td>1165</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</h3>
 <table border="0" class="table table-striped">
@@ -49336,31 +49336,31 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>83</td></tr>
+<td>82</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>84</td></tr>
+<td>83</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>106</td></tr>
+<td>105</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>107</td></tr>
+<td>106</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>109</td></tr></table></div>
+<td>108</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.java</h3>
 <table border="0" class="table table-striped">
@@ -49534,8 +49534,8 @@
 <th>Line</th></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>annotation</td>
-<td>MissingDeprecated</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 54 has parse error. Details: no viable alternative at input '(' while parsing JAVADOC_INLINE_TAG</td>
 <td>59</td></tr>
 <tr class="a">
@@ -52726,103 +52726,103 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>449</td></tr>
+<td>563</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>663</td></tr>
+<td>777</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>689</td></tr>
+<td>803</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>912</td></tr>
+<td>1026</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>913</td></tr>
+<td>1027</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>914</td></tr>
+<td>1028</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>915</td></tr>
+<td>1029</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>919</td></tr>
+<td>1033</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ZooKeeperConnectionException' has incorrect indentation level 2, expected level should be 4.</td>
-<td>920</td></tr>
+<td>1034</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>943</td></tr>
+<td>1057</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>961</td></tr>
+<td>1075</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>962</td></tr>
+<td>1076</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>964</td></tr>
+<td>1078</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>970</td></tr>
+<td>1084</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>971</td></tr>
+<td>1085</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1013</td></tr>
+<td>1127</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td>1057</td></tr></table></div>
+<td>1171</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestTags.java">org/apache/hadoop/hbase/regionserver/TestTags.java</h3>
 <table border="0" class="table table-striped">
@@ -67351,118 +67351,106 @@
 <td>1057</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 104).</td>
-<td>1059</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 112).</td>
-<td>1070</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1171</td></tr>
+<td>1208</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'final' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1174</td></tr>
+<td>1211</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1175</td></tr>
+<td>1212</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1191</td></tr>
+<td>1228</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 110).</td>
-<td>1258</td></tr>
+<td>1295</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1280</td></tr>
+<td>1317</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
-<td>1306</td></tr>
+<td>1343</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1384</td></tr>
+<td>1421</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1438</td></tr>
+<td>1475</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1443</td></tr>
+<td>1480</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1466</td></tr>
+<td>1503</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1479</td></tr>
+<td>1516</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1690</td></tr>
+<td>1727</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>1708</td></tr>
+<td>1745</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1717</td></tr>
+<td>1754</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>1724</td></tr>
+<td>1761</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1726</td></tr></table></div>
+<td>1763</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.FSVisitor.java">org/apache/hadoop/hbase/util/FSVisitor.java</h3>
 <table border="0" class="table table-striped">
@@ -72469,7 +72457,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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.rss b/checkstyle.rss
index 0919679..ac1e56a 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2021 The Apache Software Foundation</copyright>
     <item>
       <title>File: 4538,
-             Errors: 8670,
+             Errors: 8668,
              Warnings: 0,
              Infos: 0
       </title>
@@ -36357,7 +36357,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  53
+                  51
                 </td>
               </tr>
                           <tr>
diff --git a/coc.html b/coc.html
index ea6c653..42239bc 100644
--- a/coc.html
+++ b/coc.html
@@ -229,7 +229,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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 cd15285..235fd8a 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -301,7 +301,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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 eecd0c1..6ee4b19 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -971,7 +971,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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 98f8a86..7ed84a8 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -182,7 +182,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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 e09cac5..a5bce98 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1259,7 +1259,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-17</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-11-18</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 861a7a7..75732e3 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -1052,6 +1052,7 @@
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.HFileFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.HFileLinkFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><span class="interfaceName">FSUtils.ProgressReporter</span></a></li>
+<li><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.ReferenceAndLinkFileFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.ReferenceFileFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.RegionDirFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.UserTableDirFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.UserTableDirFilter</a></li>
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index d251111..98ac9df 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -1052,6 +1052,7 @@
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.HFileFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.HFileLinkFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="interfaceName">FSUtils.ProgressReporter</span></a></li>
+<li><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceAndLinkFileFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.RegionDirFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FSUtils.UserTableDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.UserTableDirFilter</a></li>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index f4184f5..9d4ab03 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -649,6 +649,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#accept-org.apache.hadoop.fs.Path-">accept(Path)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.HFileLinkFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#accept-org.apache.hadoop.fs.Path-">accept(Path)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceAndLinkFileFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#accept-org.apache.hadoop.fs.Path-java.lang.Boolean-">accept(Path, Boolean)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html#accept-org.apache.hadoop.fs.Path-java.lang.Boolean-">accept(Path, Boolean)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.RegionDirFilter</a></dt>
@@ -4140,8 +4142,6 @@
 &nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/IdLock.html#assertMapEmpty--">assertMapEmpty()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#assertReferenceFileCount-org.apache.hadoop.fs.FileSystem-int-org.apache.hadoop.fs.Path-">assertReferenceFileCount(FileSystem, int, Path)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">SplitTableRegionProcedure</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#assertRegionOnlyOnServer-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-long-">assertRegionOnlyOnServer(RegionInfo, ServerName, long)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
@@ -4160,6 +4160,8 @@
 <dd>
 <div class="block">Check to make sure that the description of the snapshot requested is valid</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#assertSplitResultFilesCount-org.apache.hadoop.fs.FileSystem-int-org.apache.hadoop.fs.Path-">assertSplitResultFilesCount(FileSystem, int, Path)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">SplitTableRegionProce [...]
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html#assertValidSeek--">assertValidSeek()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#assign-byte:A-">assign(byte[])</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
@@ -20388,6 +20390,10 @@
 <dd>
 <div class="block">Create a new HFileLink</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/HFileLink.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-boolean-">create(Configuration, FileSystem, Path, String, String, String, TableName, String, String, boolean)</a></span> - Static method in class org.apache.hadoop.hbase.io.<a href="org/a [...]
+<dd>
+<div class="block">Create a new HFileLink</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactory.html#create-java.lang.String-org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper-">create(String, MetricsHBaseServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactory.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSourceFactory</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.html#create-java.lang.String-org.apache.hadoop.hbase.ipc.MetricsHBaseServerWrapper-">create(String, MetricsHBaseServerWrapper)</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSourceFactoryImpl</a></dt>
@@ -36778,6 +36784,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html#fs">fs</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.HFileFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#fs">fs</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceAndLinkFileFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#fs">fs</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html#fs">fs</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.RegionDirFilter</a></dt>
@@ -36992,6 +37000,8 @@
 <div class="block">Called every so-often by storefile map builder getTableStoreFilePathMap to
  report progress.</div>
 </dd>
+<dt><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils.ReferenceAndLinkFileFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils.ReferenceFileFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils.RegionDirFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
@@ -43683,6 +43693,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/BulkLoadHFiles.LoadQueueItem.html#getFilePath--">getFilePath()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/BulkLoadHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.tool">BulkLoadHFiles.LoadQueueItem</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.html#getFilePaths-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.PathFilter-">getFilePaths(FileSystem, Path, PathFilter)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util">FSUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/CommonFSUtils.html#getFilePermissions-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.conf.Configuration-java.lang.String-">getFilePermissions(FileSystem, Configuration, String)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/CommonFSUtils.html" title="class in org.apache.hadoop.hbase.util">CommonFSUtils</a></dt>
 <dd>
 <div class="block">Get the file permissions specified in the configuration, if they are
@@ -51409,6 +51421,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getReference--">getReference()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.html#getReferenceAndLinkFilePaths-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getReferenceAndLinkFilePaths(FileSystem, Path)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util">FSUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/CachedMobFile.html#getReferenceCount--">getReferenceCount()</a></span> - Method in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/CachedMobFile.html" title="class in org.apache.hadoop.hbase.mob">CachedMobFile</a></dt>
 <dd>
 <div class="block">Gets the reference of the current mob file.</div>
@@ -52132,6 +52146,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/BalancerDecision.html#getRegionPlans--">getRegionPlans()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BalancerDecision.html" title="class in org.apache.hadoop.hbase.client">BalancerDecision</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.html#getRegionReferenceAndLinkFileCount-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getRegionReferenceAndLinkFileCount(FileSystem, Path)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util">FSUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.html#getRegionReferenceFileCount-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getRegionReferenceFileCount(FileSystem, Path)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util">FSUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.html#getRegionReplicaStoreFileRefreshMultiplier-org.apache.hadoop.conf.Configuration-">getRegionReplicaStoreFileRefreshMultiplier(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.html" title="class in org.apache.hadoop.hbase.util">ServerRegionReplicaUtil</a></dt>
@@ -98845,6 +98861,8 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/nio/ByteBuff.html#REFERENCE_COUNT_NAME">REFERENCE_COUNT_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.nio.<a href="org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#ReferenceAndLinkFileFilter-org.apache.hadoop.fs.FileSystem-">ReferenceAndLinkFileFilter(FileSystem)</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceAndLinkFileFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ObjectPool.html#referenceCache">referenceCache</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ObjectPool.html" title="class in org.apache.hadoop.hbase.util">ObjectPool</a></dt>
 <dd>
 <div class="block">Does not permit null keys.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 644adb5..0387e8e 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/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/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>
 <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.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
index 9e8dcb9..12a24fd 100644
--- a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
@@ -103,8 +103,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ExecutorAction.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ExecutorAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ChaosServiceName.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ChaosServiceName</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ExecutorAction.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ExecutorAction</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index cbfb1e9..85ccbac 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -5644,6 +5644,21 @@ service.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">HFileLink.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-boolean-">create</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+      org.apache.hadoop.fs.FileSystem&nbsp;fs,
+      org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
+      <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;familyName,
+      <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;dstTableName,
+      <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;dstRegionName,
+      <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;linkedTable,
+      <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;linkedRegion,
+      <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;hfileName,
+      boolean&nbsp;createBackRef)</code>
+<div class="block">Create a new HFileLink</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">HFileLink.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-">create</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
       org.apache.hadoop.fs.FileSystem&nbsp;fs,
       org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
@@ -5653,7 +5668,7 @@ service.</div>
 <div class="block">Create a new HFileLink</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">HFileLink.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-boolean-">create</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
       org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -5665,7 +5680,7 @@ service.</div>
 <div class="block">Create a new HFileLink</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HFileLink.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createHFileLinkName-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-">createHFileLinkName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    <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;regionName,
@@ -5673,7 +5688,7 @@ service.</div>
 <div class="block">Create a new HFileLink name</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><span class="typeNameLabel">HFileLink.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createPath-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-java.lang.String-">createPath</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
           <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;region,
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index a64f8c6..36879c7 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -466,25 +466,25 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index ce4e541..b424234 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -176,8 +176,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.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index ccc1990..e259212 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.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/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/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/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/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/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/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/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/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index 96318e7..4245577 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index f4fcd97..e4b4109 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -141,8 +141,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.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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/HFileLink.html b/devapidocs/org/apache/hadoop/hbase/io/HFileLink.html
index 07cd980..09d46a2 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/HFileLink.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/HFileLink.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":10,"i14":9,"i15":9,"i16":9,"i17":10,"i18":10,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":10,"i15":9,"i16":9,"i17":9,"i18":10,"i19":10,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":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";
@@ -153,7 +153,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#archivePath">archivePath</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a></code></td>
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#LINK_NAME_PATTERN">LINK_NAME_PATTERN</a></span></code>
 <div class="block">Define the HFile Link name parser in the form of: table=region-hfile</div>
 </td>
@@ -275,6 +275,21 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-boolean-">create</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+      org.apache.hadoop.fs.FileSystem&nbsp;fs,
+      org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
+      <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;familyName,
+      <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;dstTableName,
+      <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;dstRegionName,
+      <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;linkedTable,
+      <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;linkedRegion,
+      <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;hfileName,
+      boolean&nbsp;createBackRef)</code>
+<div class="block">Create a new HFileLink</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-">create</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
       org.apache.hadoop.fs.FileSystem&nbsp;fs,
       org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
@@ -284,7 +299,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <div class="block">Create a new HFileLink</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-boolean-">create</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
       org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -296,14 +311,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <div class="block">Create a new HFileLink</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createBackReferenceName-java.lang.String-java.lang.String-">createBackReferenceName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableNameStr,
                        <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;regionName)</code>
 <div class="block">Create the back reference name</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createFromHFileLink-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-">createFromHFileLink</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                    org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -312,7 +327,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <div class="block">Create a new HFileLink starting from a hfileLink name</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createFromHFileLink-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-boolean-">createFromHFileLink</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                    org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -322,14 +337,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <div class="block">Create a new HFileLink starting from a hfileLink name</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createHFileLinkName-org.apache.hadoop.hbase.client.RegionInfo-java.lang.String-">createHFileLinkName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hfileRegionInfo,
                    <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;hfileName)</code>
 <div class="block">Create a new HFileLink name</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createHFileLinkName-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-">createHFileLinkName</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                    <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;regionName,
@@ -337,7 +352,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <div class="block">Create a new HFileLink name</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#createPath-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-java.lang.String-">createPath</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
           <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;region,
@@ -346,65 +361,65 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <div class="block">Create an HFileLink relative path for the table/region/family/hfile location</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getArchivePath--">getArchivePath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getHFileFromBackReference-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.Path-">getHFileFromBackReference</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                          org.apache.hadoop.fs.Path&nbsp;linkRefPath)</code>
 <div class="block">Get the full path of the HFile referenced by the back reference</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getHFileFromBackReference-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">getHFileFromBackReference</a></span>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                          org.apache.hadoop.fs.Path&nbsp;linkRefPath)</code>
 <div class="block">Get the full path of the HFile referenced by the back reference</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>private static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getHFileLinkPatternRelativePath-org.apache.hadoop.fs.Path-">getHFileLinkPatternRelativePath</a></span>(org.apache.hadoop.fs.Path&nbsp;path)</code>
 <div class="block">Convert a HFileLink path to a table relative path.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getMobPath--">getMobPath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getOriginPath--">getOriginPath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getReferencedHFileName-java.lang.String-">getReferencedHFileName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</code>
 <div class="block">Get the HFile name of the referenced link</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getReferencedRegionName-java.lang.String-">getReferencedRegionName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</code>
 <div class="block">Get the Region name of the referenced link</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#getReferencedTableName-java.lang.String-">getReferencedTableName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</code>
 <div class="block">Get the Table name of the referenced link</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#isHFileLink-org.apache.hadoop.fs.Path-">isHFileLink</a></span>(org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#isHFileLink-java.lang.String-">isHFileLink</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</code>&nbsp;</td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>static <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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html#parseBackReferenceName-java.lang.String-">parseBackReferenceName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>&nbsp;</td>
 </tr>
@@ -473,7 +488,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>LINK_NAME_PATTERN</h4>
-<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.83">LINK_NAME_PATTERN</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.82">LINK_NAME_PATTERN</a></pre>
 <div class="block">Define the HFile Link name parser in the form of: table=region-hfile</div>
 </li>
 </ul>
@@ -483,7 +498,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>REF_OR_HFILE_LINK_PATTERN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.92">REF_OR_HFILE_LINK_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.91">REF_OR_HFILE_LINK_PATTERN</a></pre>
 <div class="block">The pattern should be used for hfile and reference links
  that can be found in /hbase/table/region/family/</div>
 </li>
@@ -494,7 +509,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>archivePath</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.97">archivePath</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.96">archivePath</a></pre>
 </li>
 </ul>
 <a name="originPath">
@@ -503,7 +518,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>originPath</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.98">originPath</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.97">originPath</a></pre>
 </li>
 </ul>
 <a name="mobPath">
@@ -512,7 +527,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>mobPath</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.99">mobPath</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.98">mobPath</a></pre>
 </li>
 </ul>
 <a name="tempPath">
@@ -521,7 +536,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tempPath</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.100">tempPath</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.99">tempPath</a></pre>
 </li>
 </ul>
 </li>
@@ -538,7 +553,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HFileLink</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.105">HFileLink</a>(org.apache.hadoop.fs.Path&nbsp;originPath,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.104">HFileLink</a>(org.apache.hadoop.fs.Path&nbsp;originPath,
                  org.apache.hadoop.fs.Path&nbsp;tempPath,
                  org.apache.hadoop.fs.Path&nbsp;mobPath,
                  org.apache.hadoop.fs.Path&nbsp;archivePath)</pre>
@@ -559,7 +574,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>buildFromHFileLinkPattern</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.120">buildFromHFileLinkPattern</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.119">buildFromHFileLinkPattern</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                         org.apache.hadoop.fs.Path&nbsp;hFileLinkPattern)
                                                  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>
@@ -577,7 +592,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>buildFromHFileLinkPattern</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.133">buildFromHFileLinkPattern</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.132">buildFromHFileLinkPattern</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                         org.apache.hadoop.fs.Path&nbsp;archiveDir,
                                                         org.apache.hadoop.fs.Path&nbsp;hFileLinkPattern)</pre>
 <dl>
@@ -594,7 +609,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createPath</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.152">createPath</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.151">createPath</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                                    <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;region,
                                                    <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;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;hfile)</pre>
@@ -616,7 +631,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>build</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.170">build</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.169">build</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                               <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;region,
                               <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;family,
@@ -643,7 +658,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getOriginPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.179">getOriginPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.178">getOriginPath</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the origin path of the hfile.</dd>
@@ -656,7 +671,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getArchivePath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.186">getArchivePath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.185">getArchivePath</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the path of the archived hfile.</dd>
@@ -669,7 +684,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.193">getMobPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.192">getMobPath</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the path of the mob hfiles.</dd>
@@ -682,7 +697,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>isHFileLink</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.201">isHFileLink</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.200">isHFileLink</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>path</code> - Path to check.</dd>
@@ -697,7 +712,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>isHFileLink</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.210">isHFileLink</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.209">isHFileLink</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>fileName</code> - File name to check.</dd>
@@ -712,7 +727,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileLinkPatternRelativePath</h4>
-<pre>private static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.227">getHFileLinkPatternRelativePath</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>private static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.226">getHFileLinkPatternRelativePath</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <div class="block">Convert a HFileLink path to a table relative path.
  e.g. the link: /hbase/test/0123/cf/testtb=4567-abcd
       becomes: /hbase/testtb/4567/cf/abcd</div>
@@ -732,7 +747,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getReferencedHFileName</h4>
-<pre>public static&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/io/HFileLink.html#line.250">getReferencedHFileName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
+<pre>public static&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/io/HFileLink.html#line.249">getReferencedHFileName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
 <div class="block">Get the HFile name of the referenced link</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -748,7 +763,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getReferencedRegionName</h4>
-<pre>public static&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/io/HFileLink.html#line.264">getReferencedRegionName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
+<pre>public static&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/io/HFileLink.html#line.263">getReferencedRegionName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
 <div class="block">Get the Region name of the referenced link</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -764,7 +779,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getReferencedTableName</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.278">getReferencedTableName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.277">getReferencedTableName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
 <div class="block">Get the Table name of the referenced link</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -780,7 +795,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createHFileLinkName</h4>
-<pre>public static&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/io/HFileLink.html#line.293">createHFileLinkName</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hfileRegionInfo,
+<pre>public static&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/io/HFileLink.html#line.292">createHFileLinkName</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hfileRegionInfo,
                                          <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;hfileName)</pre>
 <div class="block">Create a new HFileLink name</div>
 <dl>
@@ -798,7 +813,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createHFileLinkName</h4>
-<pre>public static&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/io/HFileLink.html#line.307">createHFileLinkName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public static&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/io/HFileLink.html#line.306">createHFileLinkName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                          <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;regionName,
                                          <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;hfileName)</pre>
 <div class="block">Create a new HFileLink name</div>
@@ -818,7 +833,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.329">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.328">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
                              <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hfileRegionInfo,
@@ -848,7 +863,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.350">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.349">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
                              <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hfileRegionInfo,
@@ -880,7 +895,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.373">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.372">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
                              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;linkedTable,
@@ -912,9 +927,46 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.395">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.394">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+                             org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                             org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
+                             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;linkedTable,
+                             <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;linkedRegion,
+                             <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;hfileName,
+                             boolean&nbsp;createBackRef)
+                      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">Create a new HFileLink
+
+ <p>It also adds a back-reference to the hfile back-reference directory
+ to simplify the reference-count and the cleaning process.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>conf</code> - <code>Configuration</code> to read for the archive directory name</dd>
+<dd><code>fs</code> - <code>FileSystem</code> on which to write the HFileLink</dd>
+<dd><code>dstFamilyPath</code> - - Destination path (table/region/cf/)</dd>
+<dd><code>linkedTable</code> - - Linked Table Name</dd>
+<dd><code>linkedRegion</code> - - Linked Region Name</dd>
+<dd><code>hfileName</code> - - Linked HFile name</dd>
+<dd><code>createBackRef</code> - - Whether back reference should be created. Defaults to true.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the file is created, otherwise the file exists.</dd>
+<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> - on file or parent directory creation failure</dd>
+</dl>
+</li>
+</ul>
+<a name="create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-java.lang.String-java.lang.String-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>create</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.423">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
+                             <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;familyName,
+                             <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;dstTableName,
+                             <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;dstRegionName,
                              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;linkedTable,
                              <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;linkedRegion,
                              <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;hfileName,
@@ -929,6 +981,8 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <dd><code>conf</code> - <code>Configuration</code> to read for the archive directory name</dd>
 <dd><code>fs</code> - <code>FileSystem</code> on which to write the HFileLink</dd>
 <dd><code>dstFamilyPath</code> - - Destination path (table/region/cf/)</dd>
+<dd><code>dstTableName</code> - - Destination table name</dd>
+<dd><code>dstRegionName</code> - - Destination region name</dd>
 <dd><code>linkedTable</code> - - Linked Table Name</dd>
 <dd><code>linkedRegion</code> - - Linked Region Name</dd>
 <dd><code>hfileName</code> - - Linked HFile name</dd>
@@ -946,7 +1000,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createFromHFileLink</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.447">createFromHFileLink</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.471">createFromHFileLink</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                           org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
                                           <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;hfileLinkName)
@@ -974,7 +1028,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createFromHFileLink</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.467">createFromHFileLink</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.491">createFromHFileLink</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                           org.apache.hadoop.fs.Path&nbsp;dstFamilyPath,
                                           <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;hfileLinkName,
@@ -1004,7 +1058,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>createBackReferenceName</h4>
-<pre>static&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/io/HFileLink.html#line.482">createBackReferenceName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableNameStr,
+<pre>static&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/io/HFileLink.html#line.506">createBackReferenceName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableNameStr,
                                       <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;regionName)</pre>
 <div class="block">Create the back reference name</div>
 </li>
@@ -1015,7 +1069,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileFromBackReference</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.495">getHFileFromBackReference</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.519">getHFileFromBackReference</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                                   org.apache.hadoop.fs.Path&nbsp;linkRefPath)</pre>
 <div class="block">Get the full path of the HFile referenced by the back reference</div>
 <dl>
@@ -1033,7 +1087,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>parseBackReferenceName</h4>
-<pre>public static&nbsp;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#l [...]
+<pre>public static&nbsp;<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#l [...]
 </li>
 </ul>
 <a name="getHFileFromBackReference-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.Path-">
@@ -1042,7 +1096,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/FileLink.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getHFileFromBackReference</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.529">getHFileFromBackReference</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/io/HFileLink.html#line.553">getHFileFromBackReference</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                   org.apache.hadoop.fs.Path&nbsp;linkRefPath)
                                                            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">Get the full path of the HFile referenced by the back reference</div>
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 4016c56..f1f4831 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -309,12 +309,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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/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.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/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 3ce9ea6..6216e85 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -363,9 +363,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</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 77fdcc5..a4d759c 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -300,11 +300,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/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/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/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
index d4c9130..ad3e625 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.808">SplitTableRegionProcedure.StoreFileSplitter</a>
+<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.814">SplitTableRegionProcedure.StoreFileSplitter</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&gt;</pre>
 <div class="block">Utility class used to do the file splitting / reference writing
@@ -220,7 +220,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>regionFs</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.809">regionFs</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.815">regionFs</a></pre>
 </li>
 </ul>
 <a name="family">
@@ -229,7 +229,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>family</h4>
-<pre>private final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.810">family</a></pre>
+<pre>private final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.816">family</a></pre>
 </li>
 </ul>
 <a name="sf">
@@ -238,7 +238,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sf</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.811">sf</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.817">sf</a></pre>
 </li>
 </ul>
 </li>
@@ -255,7 +255,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFileSplitter</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.819">StoreFileSplitter</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;regionFs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.825">StoreFileSplitter</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;regionFs,
                          byte[]&nbsp;family,
                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>&nbsp;sf)</pre>
 <div class="block">Constructor that takes what it needs to split</div>
@@ -281,7 +281,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.826">call</a>()
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html#line.832">call</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="overrideSpecifyLabel">Specified by:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
index 711e5ae..7830570 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
@@ -134,7 +134,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.95">SplitTableRegionProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.96">SplitTableRegionProcedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineRegionProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&gt;</pre>
 <div class="block">The procedure to split a region in a table.
  Takes lock on the parent region.
@@ -299,9 +299,9 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#assertReferenceFileCount-org.apache.hadoop.fs.FileSystem-int-org.apache.hadoop.fs.Path-">assertReferenceFileCount</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
-                        int&nbsp;expectedReferenceFileCount,
-                        org.apache.hadoop.fs.Path&nbsp;dir)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#assertSplitResultFilesCount-org.apache.hadoop.fs.FileSystem-int-org.apache.hadoop.fs.Path-">assertSplitResultFilesCount</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                           int&nbsp;expectedSplitResultFileCount,
+                           org.apache.hadoop.fs.Path&nbsp;dir)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
@@ -572,7 +572,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <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/assignment/SplitTableRegionProcedure.html#line.97">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.98">LOG</a></pre>
 </li>
 </ul>
 <a name="daughterOneRI">
@@ -581,7 +581,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>daughterOneRI</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.98">daughterOneRI</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.99">daughterOneRI</a></pre>
 </li>
 </ul>
 <a name="daughterTwoRI">
@@ -590,7 +590,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>daughterTwoRI</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.99">daughterTwoRI</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.100">daughterTwoRI</a></pre>
 </li>
 </ul>
 <a name="bestSplitRow">
@@ -599,7 +599,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>bestSplitRow</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.100">bestSplitRow</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.101">bestSplitRow</a></pre>
 </li>
 </ul>
 <a name="splitPolicy">
@@ -608,7 +608,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>splitPolicy</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.101">splitPolicy</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.102">splitPolicy</a></pre>
 </li>
 </ul>
 <a name="EXPECTED_SPLIT_STATES">
@@ -617,7 +617,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>EXPECTED_SPLIT_STATES</h4>
-<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.495">EXPECTED_SPLIT_STATES</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.497">EXPECTED_SPLIT_STATES</a></pre>
 </li>
 </ul>
 </li>
@@ -634,7 +634,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>SplitTableRegionProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.103">SplitTableRegionProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.104">SplitTableRegionProcedure</a>()</pre>
 </li>
 </ul>
 <a name="SplitTableRegionProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-byte:A-">
@@ -643,7 +643,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SplitTableRegionProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.107">SplitTableRegionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.108">SplitTableRegionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionToSplit,
                                  byte[]&nbsp;splitRow)
                           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>
@@ -667,7 +667,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireLock</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.157">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv [...]
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.159">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">The user should override this method if they need a lock on an Entity. A lock can be anything,
  and it is up to the implementor. The Procedure Framework will call this method just before it
@@ -704,7 +704,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseLock</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.171">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.173">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">The user should override this method, and release lock if necessary.</div>
 <dl>
@@ -719,7 +719,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getDaughterOneRI</h4>
-<pre>public&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/assignment/SplitTableRegionProcedure.html#line.176">getDaughterOneRI</a>()</pre>
+<pre>public&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/assignment/SplitTableRegionProcedure.html#line.178">getDaughterOneRI</a>()</pre>
 </li>
 </ul>
 <a name="getDaughterTwoRI--">
@@ -728,7 +728,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getDaughterTwoRI</h4>
-<pre>public&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/assignment/SplitTableRegionProcedure.html#line.180">getDaughterTwoRI</a>()</pre>
+<pre>public&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/assignment/SplitTableRegionProcedure.html#line.182">getDaughterTwoRI</a>()</pre>
 </li>
 </ul>
 <a name="hasBestSplitRow--">
@@ -737,7 +737,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>hasBestSplitRow</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.184">hasBestSplitRow</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.186">hasBestSplitRow</a>()</pre>
 </li>
 </ul>
 <a name="checkSplittable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -746,7 +746,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSplittable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.193">checkSplittable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.195">checkSplittable</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionToSplit)
                       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 whether the region is splittable</div>
@@ -765,7 +765,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getDaughterRegionIdTimestamp</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.259">getDaughterRegionIdTimestamp</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.261">getDaughterRegionIdTimestamp</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 <div class="block">Calculate daughter regionid to use.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -781,7 +781,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>removeNonDefaultReplicas</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.271">removeNonDefaultReplicas</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.273">removeNonDefaultReplicas</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                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>
@@ -795,7 +795,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>checkClosedRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.276">checkClosedRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.278">checkClosedRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                          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>
@@ -809,7 +809,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>executeFromState</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.283">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure" [...]
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.285">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure" [...]
                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;state)
                                                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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#executeFromState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -832,7 +832,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.360">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.362">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;state)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -856,7 +856,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>isRollbackSupported</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.407">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;state)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.409">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isRollbackSupported-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Used by the default implementation of abort() to know if the current state can be aborted
  and rollback can be triggered.</div>
@@ -872,7 +872,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.422">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.424">getState</a>(int&nbsp;stateId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 <dl>
@@ -891,7 +891,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.427">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.429">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 <dl>
@@ -910,7 +910,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.432">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.434">getInitialState</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 <dl>
@@ -927,7 +927,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.437">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.439">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                            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 class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">The user-level code of the procedure may have some state to
@@ -949,7 +949,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.451">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.453">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                              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 class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">Called on store load to allow the user to decode the previously serialized
@@ -970,7 +970,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringClassDetails</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.465">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.467">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
 <div class="block">Extend the toString() information with the procedure details
  e.g. className and parameters</div>
@@ -988,7 +988,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentRegion</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/assignment/SplitTableRegionProcedure.html#line.477">getParentRegion</a>()</pre>
+<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/assignment/SplitTableRegionProcedure.html#line.479">getParentRegion</a>()</pre>
 </li>
 </ul>
 <a name="getTableOperationType--">
@@ -997,7 +997,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableOperationType</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.482">getTableOperationType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.484">getTableOperationType</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
 <div class="block">Given an operation type we can take decisions about what to do with pending operations.
  e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -1018,7 +1018,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedureMetrics</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.487">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProce [...]
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.489">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProce [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">Override this method to provide procedure specific counters for submitted count, failed
  count and time histogram.</div>
@@ -1038,7 +1038,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitRow</h4>
-<pre>private&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.491">getSplitRow</a>()</pre>
+<pre>private&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.493">getSplitRow</a>()</pre>
 </li>
 </ul>
 <a name="prepareSplitRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -1047,7 +1047,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareSplitRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.501">prepareSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.503">prepareSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                            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">Prepare to Split region.</div>
 <dl>
@@ -1064,7 +1064,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>preSplitRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.573">preSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.575">preSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Action before splitting region in a table.</div>
@@ -1083,7 +1083,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>postRollBackSplitRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.597">postRollBackSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.599">postRollBackSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                               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">Action after rollback a split table region action.</div>
 <dl>
@@ -1100,7 +1100,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>openParentRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.607">openParentRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.609">openParentRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                        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">Rollback close parent region</div>
 <dl>
@@ -1115,7 +1115,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>createDaughterRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.616">createDaughterRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.618">createDaughterRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                            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">Create daughter regions</div>
 <dl>
@@ -1130,7 +1130,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteDaughterRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.640">deleteDaughterRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.642">deleteDaughterRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                             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>
@@ -1144,7 +1144,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>splitStoreFiles</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoo [...]
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoo [...]
                                               <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;regionFs)
                                        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">Create Split directory</div>
@@ -1156,16 +1156,16 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 </dl>
 </li>
 </ul>
-<a name="assertReferenceFileCount-org.apache.hadoop.fs.FileSystem-int-org.apache.hadoop.fs.Path-">
+<a name="assertSplitResultFilesCount-org.apache.hadoop.fs.FileSystem-int-org.apache.hadoop.fs.Path-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assertReferenceFileCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.776">assertReferenceFileCount</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
-                                      int&nbsp;expectedReferenceFileCount,
-                                      org.apache.hadoop.fs.Path&nbsp;dir)
-                               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>
+<h4>assertSplitResultFilesCount</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.778">assertSplitResultFilesCount</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                                         int&nbsp;expectedSplitResultFileCount,
+                                         org.apache.hadoop.fs.Path&nbsp;dir)
+                                  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>
@@ -1178,7 +1178,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>splitStoreFile</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.784">splitStoreFile</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionF [...]
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.790">splitStoreFile</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionF [...]
                                                                                  byte[]&nbsp;family,
                                                                                  <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>&nbsp;sf)
                                                                           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>
@@ -1194,7 +1194,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>preSplitRegionBeforeMETA</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.835">preSplitRegionBeforeMETA</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.841">preSplitRegionBeforeMETA</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Post split region actions before the Point-of-No-Return step</div>
@@ -1213,7 +1213,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>updateMeta</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.858">updateMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.864">updateMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                  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">Add daughter regions to META</div>
 <dl>
@@ -1230,7 +1230,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>preSplitRegionAfterMETA</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.867">preSplitRegionAfterMETA</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.873">preSplitRegionAfterMETA</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Pre split region actions after the Point-of-No-Return step</div>
@@ -1249,7 +1249,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>postSplitRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.879">postSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.885">postSplitRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                       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">Post split region actions</div>
 <dl>
@@ -1266,7 +1266,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentRegionServerName</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.886">getParentRegionServerName</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.892">getParentRegionServerName</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 </li>
 </ul>
 <a name="createUnassignProcedures-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -1275,7 +1275,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>createUnassignProcedures</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.891">createUnassignProcedures</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoo [...]
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.897">createUnassignProcedures</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoo [...]
                                                         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>
@@ -1289,7 +1289,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>createAssignProcedures</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.897">createAssignProcedures</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop. [...]
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.903">createAssignProcedures</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop. [...]
                                                       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>
@@ -1303,7 +1303,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionReplication</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.906">getRegionReplication</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.912">getRegionReplication</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                           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>
@@ -1317,7 +1317,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>writeMaxSequenceIdFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.911">writeMaxSequenceIdFile</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.917">writeMaxSequenceIdFile</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                              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>
@@ -1331,7 +1331,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>abort</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.924">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#line.930">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">The abort() call is asynchronous and each procedure must decide how to deal
  with it, if they want to be abortable. The simplest implementation
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 ba98778..8bede26 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/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 3443edd..79ef140 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -212,9 +212,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.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalanceAction.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalanceAction.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.GeneratorType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">StochasticLoadBalancer.GeneratorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerClusterState.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalancerClusterState.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalanceAction.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalanceAction.Type</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 4c57dec..3edfce8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -317,12 +317,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.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/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/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index ae71783..2bf607a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -224,8 +224,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.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/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/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>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index f5fed31..d7fe348 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -464,20 +464,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.<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/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/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/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/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</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/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/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/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/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>
 <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/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/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</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>
 </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 292bf02..3bc6fb6 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -217,11 +217,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/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/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/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/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/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 4d19aec..5dea756 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/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/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/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/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>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html
index edd6e9d..ab75b93 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.64">HRegionFileSystem</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.67">HRegionFileSystem</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">View to an on-disk Region.
  Provides the set of methods necessary to interact with the on-disk region data.</div>
@@ -637,7 +637,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/regionserver/HRegionFileSystem.html#line.65">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.68">LOG</a></pre>
 </li>
 </ul>
 <a name="REGION_INFO_FILE">
@@ -646,7 +646,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_INFO_FILE</h4>
-<pre>public 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/regionserver/HRegionFileSystem.html#line.68">REGION_INFO_FILE</a></pre>
+<pre>public 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/regionserver/HRegionFileSystem.html#line.71">REGION_INFO_FILE</a></pre>
 <div class="block">Name of the region info file that resides just under the region directory.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -660,7 +660,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_MERGES_DIR</h4>
-<pre>public 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/regionserver/HRegionFileSystem.html#line.71">REGION_MERGES_DIR</a></pre>
+<pre>public 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/regionserver/HRegionFileSystem.html#line.74">REGION_MERGES_DIR</a></pre>
 <div class="block">Temporary subdirectory of the region directory used for merges.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -674,7 +674,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SPLITS_DIR</h4>
-<pre>public 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/regionserver/HRegionFileSystem.html#line.74">REGION_SPLITS_DIR</a></pre>
+<pre>public 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/regionserver/HRegionFileSystem.html#line.77">REGION_SPLITS_DIR</a></pre>
 <div class="block">Temporary subdirectory of the region directory used for splits.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -688,7 +688,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_TEMP_DIR</h4>
-<pre>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/regionserver/HRegionFileSystem.html#line.77">REGION_TEMP_DIR</a></pre>
+<pre>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/regionserver/HRegionFileSystem.html#line.80">REGION_TEMP_DIR</a></pre>
 <div class="block">Temporary subdirectory of the region directory used for compaction output.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -702,7 +702,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionInfo</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.79">regionInfo</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.82">regionInfo</a></pre>
 </li>
 </ul>
 <a name="regionInfoForFs">
@@ -711,7 +711,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionInfoForFs</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.81">regionInfoForFs</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.84">regionInfoForFs</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -720,7 +720,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.82">conf</a></pre>
+<pre>final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.85">conf</a></pre>
 </li>
 </ul>
 <a name="tableDir">
@@ -729,7 +729,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tableDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.83">tableDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.86">tableDir</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -738,7 +738,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.84">fs</a></pre>
+<pre>final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.87">fs</a></pre>
 </li>
 </ul>
 <a name="regionDir">
@@ -747,7 +747,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.85">regionDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.88">regionDir</a></pre>
 </li>
 </ul>
 <a name="hdfsClientRetriesNumber">
@@ -756,7 +756,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hdfsClientRetriesNumber</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.91">hdfsClientRetriesNumber</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.94">hdfsClientRetriesNumber</a></pre>
 <div class="block">In order to handle NN connectivity hiccups, one need to retry non-idempotent operation at the
  client level.</div>
 </li>
@@ -767,7 +767,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>baseSleepBeforeRetries</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.92">baseSleepBeforeRetries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.95">baseSleepBeforeRetries</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_HDFS_CLIENT_RETRIES_NUMBER">
@@ -776,7 +776,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HDFS_CLIENT_RETRIES_NUMBER</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.93">DEFAULT_HDFS_CLIENT_RETRIES_NUMBER</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.96">DEFAULT_HDFS_CLIENT_RETRIES_NUMBER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.DEFAULT_HDFS_CLIENT_RETRIES_NUMBER">Constant Field Values</a></dd>
@@ -789,7 +789,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DEFAULT_BASE_SLEEP_BEFORE_RETRIES</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.94">DEFAULT_BASE_SLEEP_BEFORE_RETRIES</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.97">DEFAULT_BASE_SLEEP_BEFORE_RETRIES</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.DEFAULT_BASE_SLEEP_BEFORE_RETRIES">Constant Field Values</a></dd>
@@ -810,7 +810,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegionFileSystem</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.103">HRegionFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.106">HRegionFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                   org.apache.hadoop.fs.FileSystem&nbsp;fs,
                   org.apache.hadoop.fs.Path&nbsp;tableDir,
                   <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
@@ -838,7 +838,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.118">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.121">getFileSystem</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the underlying <code>FileSystem</code></dd>
@@ -851,7 +851,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&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/regionserver/HRegionFileSystem.html#line.123">getRegionInfo</a>()</pre>
+<pre>public&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/regionserver/HRegionFileSystem.html#line.126">getRegionInfo</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> that describe this on-disk region view</dd>
@@ -864,7 +864,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfoForFS</h4>
-<pre>public&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/regionserver/HRegionFileSystem.html#line.127">getRegionInfoForFS</a>()</pre>
+<pre>public&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/regionserver/HRegionFileSystem.html#line.130">getRegionInfoForFS</a>()</pre>
 </li>
 </ul>
 <a name="getTableDir--">
@@ -873,7 +873,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.132">getTableDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.135">getTableDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>Path</code> to the region's root directory.</dd>
@@ -886,7 +886,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.137">getRegionDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.140">getRegionDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>Path</code> to the region directory.</dd>
@@ -899,7 +899,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTempDir</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.145">getTempDir</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.148">getTempDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>Path</code> to the region's temp directory, used for file creations</dd>
@@ -912,7 +912,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupTempDir</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.152">cleanupTempDir</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.155">cleanupTempDir</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">Clean up any temp detritus that may have been left around from previous operation attempts.</div>
 <dl>
@@ -927,7 +927,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.164">getStoreDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.167">getStoreDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)</pre>
 <div class="block">Returns the directory path of the specified family</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -943,7 +943,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreHomedir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.174">getStoreHomedir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.177">getStoreHomedir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                                                         <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                                                         byte[]&nbsp;family)</pre>
 <dl>
@@ -962,7 +962,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreHomedir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.185">getStoreHomedir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.188">getStoreHomedir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                                                         <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;encodedName,
                                                         byte[]&nbsp;family)</pre>
 <dl>
@@ -981,7 +981,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createStoreDir</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.196">createStoreDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.199">createStoreDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)
                                   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">Create the store directory for the specified family name</div>
 <dl>
@@ -1000,7 +1000,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setStoragePolicy</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.214">setStoragePolicy</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.217">setStoragePolicy</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                              <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;policyName)</pre>
 <div class="block">Set the directory of CF to the specified storage policy. <br>
  <i>"LAZY_PERSIST"</i>, <i>"ALL_SSD"</i>, <i>"ONE_SSD"</i>, <i>"HOT"</i>, <i>"WARM"</i>,
@@ -1023,7 +1023,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>getStoragePolicyName</h4>
 <pre>@Nullable
-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/HRegionFileSystem.html#line.225">getStoragePolicyName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)</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/HRegionFileSystem.html#line.228">getStoragePolicyName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)</pre>
 <div class="block">Get the storage policy of the directory of CF.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1040,7 +1040,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFiles</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.240">getStoreFiles</a>(byte[]&nbsp;familyName)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.243">getStoreFiles</a>(byte[]&nbsp;familyName)
                                         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">Returns the store files available for the family.
  This methods performs the filtering based on the valid store files.</div>
@@ -1060,7 +1060,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFiles</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.244">getStoreFiles</a>(<a href="https://docs.oracle.com/javase [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.247">getStoreFiles</a>(<a href="https://docs.oracle.com/javase [...]
                                         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>
@@ -1074,7 +1074,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFiles</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.254">getStoreFiles</a>(<a href="https://docs.oracle.com/javase [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.257">getStoreFiles</a>(<a href="https://docs.oracle.com/javase [...]
                                                boolean&nbsp;validate)
                                         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">Returns the store files available for the family.
@@ -1095,7 +1095,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFilesLocatedStatus</h4>
-<pre>public 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;org.apache.hadoop.fs.LocatedFileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.289">getStoreFilesLocatedStatus</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegio [...]
+<pre>public 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;org.apache.hadoop.fs.LocatedFileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.292">getStoreFilesLocatedStatus</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegio [...]
                                                                                       <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;familyName,
                                                                                       boolean&nbsp;validate)
                                                                                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>
@@ -1117,7 +1117,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFilePath</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.324">getStoreFilePath</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.327">getStoreFilePath</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                                            <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;fileName)</pre>
 <div class="block">Return Qualified Path of the specified family/file</div>
 <dl>
@@ -1135,7 +1135,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFileInfo</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.336">getStoreFileInfo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.339">getStoreFileInfo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                                <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;fileName)
                         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">Return the store file information of the specified family/file.</div>
@@ -1156,7 +1156,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>hasReferences</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.349">hasReferences</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.352">hasReferences</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)
                       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">Returns true if the specified family has reference files</div>
 <dl>
@@ -1175,7 +1175,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>hasReferences</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.372">hasReferences</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.375">hasReferences</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                       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 whether region has Reference file</div>
 <dl>
@@ -1194,7 +1194,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilies</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</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;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.385">getFamilies</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</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;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.388">getFamilies</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="returnLabel">Returns:</span></dt>
@@ -1210,7 +1210,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteFamily</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.403">deleteFamily</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.406">deleteFamily</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)
                   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">Remove the region family from disk, archiving the store files.</div>
 <dl>
@@ -1227,7 +1227,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>generateUniqueName</h4>
-<pre>private static&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/HRegionFileSystem.html#line.420">generateUniqueName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;suffix)</pre>
+<pre>private static&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/HRegionFileSystem.html#line.423">generateUniqueName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;suffix)</pre>
 <div class="block">Generate a unique file name, used by createTempName() and commitStoreFile()</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1243,7 +1243,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>createTempName</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.437">createTempName</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.440">createTempName</a>()</pre>
 <div class="block">Generate a unique temporary Path. Used in conjuction with commitStoreFile()
  to get a safer file creation.
  <code>
@@ -1263,7 +1263,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>createTempName</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.453">createTempName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;suffix)</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.456">createTempName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;suffix)</pre>
 <div class="block">Generate a unique temporary Path. Used in conjuction with commitStoreFile()
  to get a safer file creation.
  <code>
@@ -1285,7 +1285,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>commitStoreFile</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.464">commitStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.467">commitStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                                                  org.apache.hadoop.fs.Path&nbsp;buildPath)
                                           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">Move the file from a build/temp location to the main family store directory.</div>
@@ -1306,7 +1306,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>preCommitStoreFile</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.479">preCommitStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.482">preCommitStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                                                      org.apache.hadoop.fs.Path&nbsp;buildPath,
                                                      long&nbsp;seqNum,
                                                      boolean&nbsp;generateNewName)
@@ -1332,7 +1332,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>commitStoreFile</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.506">commitStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;buildPath,
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.509">commitStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;buildPath,
                                           org.apache.hadoop.fs.Path&nbsp;dstPath)
                                    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>
@@ -1347,7 +1347,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>removeStoreFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.520">removeStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.523">removeStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                             org.apache.hadoop.fs.Path&nbsp;filePath)
                      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">Archives the specified store file from the specified family.</div>
@@ -1366,7 +1366,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>removeStoreFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.532">removeStoreFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.535">removeStoreFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>&gt;&nbsp;storeFiles)
                       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">Closes and archives the specified store files from the specified family.</div>
@@ -1385,7 +1385,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadStoreFile</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.549">bulkLoadStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.552">bulkLoadStoreFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName,
                                                                             org.apache.hadoop.fs.Path&nbsp;srcPath,
                                                                             long&nbsp;seqNum)
                                                                      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>
@@ -1410,7 +1410,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitsDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.576">getSplitsDir</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.579">getSplitsDir</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="cleanupDaughterRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1419,7 +1419,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDaughterRegion</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.585">cleanupDaughterRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.588">cleanupDaughterRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                     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">Remove daughter region</div>
 <dl>
@@ -1436,7 +1436,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>commitDaughterRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.599">commitDaughterRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.602">commitDaughterRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                                                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">Commit a daughter region, moving it from the split temporary directory
  to the proper location in the filesystem.</div>
@@ -1454,7 +1454,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>createSplitsDir</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.617">createSplitsDir</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterA,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.620">createSplitsDir</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterA,
                             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterB)
                      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">Creates region split daughter directories under the table dir. If the daughter regions already
@@ -1472,7 +1472,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>splitStoreFile</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.650">splitStoreFile</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.653">splitStoreFile</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                                                 <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;familyName,
                                                 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>&nbsp;f,
                                                 byte[]&nbsp;splitRow,
@@ -1504,7 +1504,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getMergesDir</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.706">getMergesDir</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.747">getMergesDir</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="cleanupMergedRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1513,7 +1513,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupMergedRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.716">cleanupMergedRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;mergedRegion)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.757">cleanupMergedRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;mergedRegion)
                          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">Remove merged region</div>
 <dl>
@@ -1530,7 +1530,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>mkdirs</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.723">mkdirs</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.764">mkdirs</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                       org.apache.hadoop.conf.Configuration&nbsp;conf,
                       org.apache.hadoop.fs.Path&nbsp;dir)
                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>
@@ -1546,7 +1546,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeStoreFile</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.740">mergeStoreFile</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;mergingRegion,
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.781">mergeStoreFile</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;mergingRegion,
                                                 <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;familyName,
                                                 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>&nbsp;f)
                                          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>
@@ -1569,7 +1569,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>commitMergedRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.761">commitMergedRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.802">commitMergedRegion</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">Commit a merged region, making it ready for use.</div>
 <dl>
@@ -1584,7 +1584,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfoFileContent</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.780">getRegionInfoFileContent</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.821">getRegionInfoFileContent</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1602,7 +1602,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>loadRegionInfoFileContent</h4>
-<pre>public 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/regionserver/HRegionFileSystem.html#line.791">loadRegionInfoFileContent</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public 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/regionserver/HRegionFileSystem.html#line.832">loadRegionInfoFileContent</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                    org.apache.hadoop.fs.Path&nbsp;regionDir)
                                             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">Create a <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> from the serialized version on-disk.</div>
@@ -1623,7 +1623,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>writeRegionInfoFileContent</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.806">writeRegionInfoFileContent</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.847">writeRegionInfoFileContent</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                org.apache.hadoop.fs.Path&nbsp;regionInfoFile,
                                                byte[]&nbsp;content)
@@ -1643,7 +1643,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRegionInfoOnFilesystem</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.820">checkRegionInfoOnFilesystem</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.861">checkRegionInfoOnFilesystem</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">Write out an info file under the stored region directory. Useful recovering mangled regions.
  If the regionInfo already exists on-disk, then we fast exit.</div>
@@ -1659,7 +1659,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>writeRegionInfoOnFilesystem</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.864">writeRegionInfoOnFilesystem</a>(boolean&nbsp;useTempDir)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.905">writeRegionInfoOnFilesystem</a>(boolean&nbsp;useTempDir)
                                   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">Write out an info file under the region directory. Useful recovering mangled regions.</div>
 <dl>
@@ -1676,7 +1676,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>writeRegionInfoOnFilesystem</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.874">writeRegionInfoOnFilesystem</a>(byte[]&nbsp;regionInfoContent,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.915">writeRegionInfoOnFilesystem</a>(byte[]&nbsp;regionInfoContent,
                                          boolean&nbsp;useTempDir)
                                   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">Write out an info file under the region directory. Useful recovering mangled regions.</div>
@@ -1695,7 +1695,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionOnFileSystem</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.915">createRegionOnFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.956">createRegionOnFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                          org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                          org.apache.hadoop.fs.Path&nbsp;tableDir,
                                                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
@@ -1718,7 +1718,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>openRegionFromFileSystem</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.950">openRegionFromFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.991">openRegionFromFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                          org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                          org.apache.hadoop.fs.Path&nbsp;tableDir,
                                                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
@@ -1743,7 +1743,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegionFromFileSystem</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.987">deleteRegionFromFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1028">deleteRegionFromFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                               org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                               org.apache.hadoop.fs.Path&nbsp;tableDir,
                                               <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
@@ -1766,7 +1766,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>createDir</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1018">createDir</a>(org.apache.hadoop.fs.Path&nbsp;dir)
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1059">createDir</a>(org.apache.hadoop.fs.Path&nbsp;dir)
            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">Creates a directory. Assumes the user has already checked for this directory existence.</div>
 <dl>
@@ -1786,7 +1786,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>rename</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1044">rename</a>(org.apache.hadoop.fs.Path&nbsp;srcpath,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1085">rename</a>(org.apache.hadoop.fs.Path&nbsp;srcpath,
                org.apache.hadoop.fs.Path&nbsp;dstPath)
         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">Renames a directory. Assumes the user has already checked for this directory existence.</div>
@@ -1807,7 +1807,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteDir</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1071">deleteDir</a>(org.apache.hadoop.fs.Path&nbsp;dir)
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1112">deleteDir</a>(org.apache.hadoop.fs.Path&nbsp;dir)
            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">Deletes a directory. Assumes the user has already checked for this directory existence.</div>
 <dl>
@@ -1826,7 +1826,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepBeforeRetry</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1095">sleepBeforeRetry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1136">sleepBeforeRetry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                               int&nbsp;sleepMultiplier)
                        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">sleeping logic; handles the interrupt exception.</div>
@@ -1842,7 +1842,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirOnFileSystem</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1109">createDirOnFileSystem</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1150">createDirOnFileSystem</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                              org.apache.hadoop.conf.Configuration&nbsp;conf,
                                              org.apache.hadoop.fs.Path&nbsp;dir)
                                       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>
@@ -1867,7 +1867,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sleepBeforeRetry</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1138">sleepBeforeRetry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#line.1179">sleepBeforeRetry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                                      int&nbsp;sleepMultiplier,
                                      int&nbsp;baseSleepBeforeRetries,
                                      int&nbsp;hdfsClientRetriesNumber)
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html
index e6ad9b4..1714a5b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Configuration")
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.43">RegionSplitPolicy</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.42">RegionSplitPolicy</a>
 extends org.apache.hadoop.conf.Configured</pre>
 <div class="block">A split policy determines when a Region should be split.</div>
 <dl>
@@ -267,7 +267,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SPLIT_POLICY_CLASS</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.45">DEFAULT_SPLIT_POLICY_CLASS</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.44">DEFAULT_SPLIT_POLICY_CLASS</a></pre>
 </li>
 </ul>
 <a name="region">
@@ -276,7 +276,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>region</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.53">region</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.52">region</a></pre>
 <div class="block">The region configured for this split policy.
  As of hbase-2.0.0, RegionSplitPolicy can be instantiated on the Master-side so the
  Phoenix local-indexer can block default hbase behavior. This is an exotic usage. Should not
@@ -297,7 +297,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionSplitPolicy</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.43">RegionSplitPolicy</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.42">RegionSplitPolicy</a>()</pre>
 </li>
 </ul>
 </li>
@@ -314,7 +314,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>configureForRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.59">configureForRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.58">configureForRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block">Upon construction, this method will be called with the region
  to be governed. It will be called once and only once.</div>
 </li>
@@ -325,7 +325,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldSplit</h4>
-<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.71">shouldSplit</a>()</pre>
+<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.70">shouldSplit</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the specified region should be split.</dd>
@@ -338,7 +338,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>canSplit</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.76">canSplit</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.75">canSplit</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>true</code> if the specified region can be split.</dd>
@@ -351,7 +351,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitPoint</h4>
-<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.86">getSplitPoint</a>()</pre>
+<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.85">getSplitPoint</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the key at which the region should be split, or null
@@ -366,7 +366,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.111">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.110">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                        org.apache.hadoop.conf.Configuration&nbsp;conf)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create the RegionSplitPolicy configured for the given table.</div>
@@ -387,7 +387,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitPolicyClass</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.121">getSplitPolicyClass</a>(<a href="../../../ [...]
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.120">getSplitPolicyClass</a>(<a href="../../../ [...]
                                                                      org.apache.hadoop.conf.Configuration&nbsp;conf)
                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -402,7 +402,7 @@ extends org.apache.hadoop.conf.Configured</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>skipStoreFileRangeCheck</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.157">skipStoreFileRangeCheck</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#line.156">skipStoreFileRangeCheck</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;familyName)</pre>
 <div class="block">In <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#splitStoreFile-org.apache.hadoop.hbase.client.RegionInfo-java.lang.String-org.apache.hadoop.hbase.regionserver.HStoreFile-byte:A-boolean-org.apache.hadoop.hbase.regionserver.RegionSplitPolicy-"><code>HRegionFileSystem.splitStoreFile(org.apache.hadoop.hbase.client.RegionInfo, String,
  HStoreFile, byte[], boolean, RegionSplitPolicy)</code></a> we are not creating the split reference
  if split row does not lie inside the StoreFile range. But in some use cases we may need to
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 216e781..76c98f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -742,20 +742,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</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 7a0e3f9..c9a6517 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -131,8 +131,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.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
+<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>
 </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 22b9c7a..ccf1fa8 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -249,10 +249,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/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/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/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/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/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 8703f65..90989fc 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 54690cc..aee57ad 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,11 +162,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.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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/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/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 91d2190..7d6c122 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -189,9 +189,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/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/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>
 </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 fba9877..efb292e 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,8 +211,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.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/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/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>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html
index 28324cb..455da1a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1086">FSUtils.HFileFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1123">FSUtils.HFileFilter</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusFilter.html" title="class in org.apache.hadoop.hbase.util">AbstractFileStatusFilter</a></pre>
 <div class="block">Filter for HFiles that excludes reference files.</div>
 </li>
@@ -221,7 +221,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fs</h4>
-<pre>final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html#line.1087">fs</a></pre>
+<pre>final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html#line.1124">fs</a></pre>
 </li>
 </ul>
 </li>
@@ -238,7 +238,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HFileFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html#line.1089">HFileFilter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html#line.1126">HFileFilter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
 </li>
 </ul>
 </li>
@@ -255,7 +255,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>accept</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html#line.1094">accept</a>(org.apache.hadoop.fs.Path&nbsp;p,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html#line.1131">accept</a>(org.apache.hadoop.fs.Path&nbsp;p,
                          @CheckForNull
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;isDir)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusFilter.html#accept-org.apache.hadoop.fs.Path-java.lang.Boolean-">AbstractFileStatusFilter</a></code></span></div>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html
index cfdc0e3..89c8878 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1113">FSUtils.HFileLinkFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1150">FSUtils.HFileLinkFilter</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 org.apache.hadoop.fs.PathFilter</pre>
 <div class="block">Filter for HFileLinks (StoreFiles and HFiles not included).
@@ -189,7 +189,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HFileLinkFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#line.1113">HFileLinkFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#line.1150">HFileLinkFilter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -206,7 +206,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>accept</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#line.1116">accept</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#line.1153">accept</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>accept</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.fs.PathFilter</code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html
index 320c154..5ee8c96 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" target="_top">Frames</a></li>
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1150">FSUtils.ProgressReporter</a></pre>
+<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1187">FSUtils.ProgressReporter</a></pre>
 <div class="block">Called every so-often by storefile map builder getTableStoreFilePathMap to
  report progress.</div>
 </li>
@@ -151,7 +151,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>progress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html#line.1154">progress</a>(org.apache.hadoop.fs.FileStatus&nbsp;status)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html#line.1191">progress</a>(org.apache.hadoop.fs.FileStatus&nbsp;status)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>status</code> - File or directory we are about to process.</dd>
@@ -187,7 +187,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" target="_top">Frames</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html
similarity index 74%
copy from devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html
copy to devapidocs/org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html
index cfdc0e3..bde5032 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>FSUtils.HFileLinkFilter (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
+<title>FSUtils.ReferenceAndLinkFileFilter (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../../script.js"></script>
 </head>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="FSUtils.HFileLinkFilter (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
+            parent.document.title="FSUtils.ReferenceAndLinkFileFilter (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
         }
     }
     catch(err) {
@@ -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/FSUtils.HFileLinkFilter.html">Use</a></li>
+<li><a href="class-use/FSUtils.ReferenceAndLinkFileFilter.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/util/FSUtils.HFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" target="_top">Frames</a></li>
-<li><a href="FSUtils.HFileLinkFilter.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" target="_top">Frames</a></li>
+<li><a href="FSUtils.ReferenceAndLinkFileFilter.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>
@@ -75,13 +75,13 @@ var activeTableTab = "activeTableTab";
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&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>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
@@ -93,14 +93,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">org.apache.hadoop.hbase.util</div>
-<h2 title="Class FSUtils.HFileLinkFilter" class="title">Class FSUtils.HFileLinkFilter</h2>
+<h2 title="Class FSUtils.ReferenceAndLinkFileFilter" class="title">Class FSUtils.ReferenceAndLinkFileFilter</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.util.FSUtils.HFileLinkFilter</li>
+<li>org.apache.hadoop.hbase.util.FSUtils.ReferenceAndLinkFileFilter</li>
 </ul>
 </li>
 </ul>
@@ -117,17 +117,34 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1113">FSUtils.HFileLinkFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1098">FSUtils.ReferenceAndLinkFileFilter</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 org.apache.hadoop.fs.PathFilter</pre>
-<div class="block">Filter for HFileLinks (StoreFiles and HFiles not included).
- the filter itself does not consider if a link is file or not.</div>
 </li>
 </ul>
 </div>
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private org.apache.hadoop.fs.FileSystem</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#fs">fs</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- ======== CONSTRUCTOR SUMMARY ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.summary">
@@ -140,7 +157,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <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/util/FSUtils.HFileLinkFilter.html#HFileLinkFilter--">HFileLinkFilter</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#ReferenceAndLinkFileFilter-org.apache.hadoop.fs.FileSystem-">ReferenceAndLinkFileFilter</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -159,7 +176,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#accept-org.apache.hadoop.fs.Path-">accept</a></span>(org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#accept-org.apache.hadoop.fs.Path-">accept</a></span>(org.apache.hadoop.fs.Path&nbsp;rd)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -177,19 +194,36 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <div class="details">
 <ul class="blockList">
 <li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="fs">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>fs</h4>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#line.1100">fs</a></pre>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.detail">
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="HFileLinkFilter--">
+<a name="ReferenceAndLinkFileFilter-org.apache.hadoop.fs.FileSystem-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>HFileLinkFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#line.1113">HFileLinkFilter</a>()</pre>
+<h4>ReferenceAndLinkFileFilter</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#line.1102">ReferenceAndLinkFileFilter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
 </li>
 </ul>
 </li>
@@ -206,7 +240,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>accept</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html#line.1116">accept</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html#line.1107">accept</a>(org.apache.hadoop.fs.Path&nbsp;rd)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>accept</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.fs.PathFilter</code></dd>
@@ -232,7 +266,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <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/FSUtils.HFileLinkFilter.html">Use</a></li>
+<li><a href="class-use/FSUtils.ReferenceAndLinkFileFilter.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>
@@ -241,12 +275,12 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.HFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" target="_top">Frames</a></li>
-<li><a href="FSUtils.HFileLinkFilter.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" target="_top">Frames</a></li>
+<li><a href="FSUtils.ReferenceAndLinkFileFilter.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>
@@ -267,13 +301,13 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&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>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html
index 3bac040..444e333 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1121">FSUtils.ReferenceFileFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1158">FSUtils.ReferenceFileFilter</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusFilter.html" title="class in org.apache.hadoop.hbase.util">AbstractFileStatusFilter</a></pre>
 </li>
 </ul>
@@ -220,7 +220,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#line.1123">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#line.1160">fs</a></pre>
 </li>
 </ul>
 </li>
@@ -237,7 +237,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReferenceFileFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#line.1125">ReferenceFileFilter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#line.1162">ReferenceFileFilter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusF
 <ul class="blockListLast">
 <li class="blockList">
 <h4>accept</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#line.1130">accept</a>(org.apache.hadoop.fs.Path&nbsp;p,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html#line.1167">accept</a>(org.apache.hadoop.fs.Path&nbsp;p,
                          @CheckForNull
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&nbsp;isDir)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusFilter.html#accept-org.apache.hadoop.fs.Path-java.lang.Boolean-">AbstractFileStatusFilter</a></code></span></div>
@@ -299,7 +299,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/AbstractFileStatusF
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ProgressReporter.html" title="interface in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.html b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.html
index a47966c..d73d55a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/FSUtils.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/FSUtils.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":41,"i34":9,"i35":9,"i36":41,"i37":9,"i38":9,"i39":9,"i40":9,"i41":9,"i42":9,"i43":9,"i44":9,"i45":9,"i46":9,"i47":9,"i48":9,"i49":9,"i50":9,"i51":9,"i52":9,"i53":9,"i54":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":9,"i34":9,"i35":9,"i36":41,"i37":9,"i38":9,"i39":41,"i40":9,"i41":9,"i42":9,"i43":9,"i44":9,"i45":9,"i46":9,"i47":9,"i48":9,"i49":9,"i50":9,"i51":9,"i52":9,"i53":9,"i54":9,"i55":9,"i56":9,"i57":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -176,15 +176,19 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceAndLinkFileFilter</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.RegionDirFilter</a></span></code>
 <div class="block">Filter for all dirs that don't start with '.'</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.UserTableDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.UserTableDirFilter</a></span></code>
 <div class="block">A <code>PathFilter</code> that returns usertable directories.</div>
@@ -386,21 +390,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i17" 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;org.apache.hadoop.fs.Path&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getFilePaths-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.PathFilter-">getFilePaths</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+            org.apache.hadoop.fs.Path&nbsp;dir,
+            org.apache.hadoop.fs.PathFilter&nbsp;pathFilter)</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>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;org.apache.hadoop.fs.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getLocalTableDirs-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getLocalTableDirs</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                  org.apache.hadoop.fs.Path&nbsp;rootdir)</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getNNAddresses-org.apache.hadoop.hdfs.DistributedFileSystem-org.apache.hadoop.conf.Configuration-">getNNAddresses</a></span>(org.apache.hadoop.hdfs.DistributedFileSystem&nbsp;fs,
               org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>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;org.apache.hadoop.fs.Path&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getReferenceAndLinkFilePaths-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getReferenceAndLinkFilePaths</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                            org.apache.hadoop.fs.Path&nbsp;familyDir)</code>&nbsp;</td>
+</tr>
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>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;org.apache.hadoop.fs.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getReferenceFilePaths-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getReferenceFilePaths</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                      org.apache.hadoop.fs.Path&nbsp;familyDir)</code>&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>static <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="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/javas [...]
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionDegreeLocalityMappingFromFS-org.apache.hadoop.conf.Configuration-">getRegionDegreeLocalityMappingFromFS</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">This function is to scan the root path of the file system to get the
@@ -408,7 +423,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  one block of that region.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>static <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="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/javas [...]
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionDegreeLocalityMappingFromFS-org.apache.hadoop.conf.Configuration-java.lang.String-int-">getRegionDegreeLocalityMappingFromFS</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                     <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;desiredTable,
@@ -418,22 +433,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  one block of that region.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionDirFromRootDir-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.client.RegionInfo-">getRegionDirFromRootDir</a></span>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                        <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionDirFromTableDir-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.client.RegionInfo-">getRegionDirFromTableDir</a></span>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                         <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionDirFromTableDir-org.apache.hadoop.fs.Path-java.lang.String-">getRegionDirFromTableDir</a></span>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                         <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;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>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;org.apache.hadoop.fs.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionDirs-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getRegionDirs</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
              org.apache.hadoop.fs.Path&nbsp;tableDir)</code>
@@ -441,7 +456,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  .tableinfo</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionLocalityMappingFromFS-org.apache.hadoop.conf.Configuration-java.lang.String-int-java.util.Map-">getRegionLocalityMappingFromFS</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                               <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;desiredTable,
@@ -453,17 +468,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  one block of that region.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionReferenceAndLinkFileCount-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getRegionReferenceAndLinkFileCount</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                                  org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
+</tr>
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getRegionReferenceFileCount-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getRegionReferenceFileCount</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                            org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>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;org.apache.hadoop.fs.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableDirs-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getTableDirs</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
             org.apache.hadoop.fs.Path&nbsp;rootdir)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>static <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="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableFragmentation-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getTableFragmentation</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                      org.apache.hadoop.fs.Path&nbsp;hbaseRootDir)</code>
@@ -471,14 +491,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  have more than one file in them.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>static <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="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableFragmentation-org.apache.hadoop.hbase.master.HMaster-">getTableFragmentation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master)</code>
 <div class="block">Runs through the HBase rootdir and checks how many stores for each table
  have more than one file in them.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>static <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.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableStoreFilePathMap-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getTableStoreFilePathMap</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.Path&nbsp;hbaseRootDir)</code>
@@ -486,7 +506,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  table StoreFile names to the full Path.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>static <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.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableStoreFilePathMap-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.PathFilter-java.util.concurrent.ExecutorService-org.apache.hadoop.hbase.util.FSUtils.ProgressReporter-">getTableStoreFilePathMap</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.Path&nbsp;hbaseRootDir,
@@ -497,7 +517,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  table StoreFile names to the full Path.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>static <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.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableStoreFilePathMap-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.PathFilter-java.util.concurrent.ExecutorService-org.apache.hadoop.hbase.util.HbckErrorReporter-">getTableStoreFilePathMap</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.Path&nbsp;hbaseRootDir,
@@ -509,7 +529,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>static <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.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableStoreFilePathMap-java.util.Map-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-">getTableStoreFilePathMap</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="https://docs.oracle.com/javase/8/docs/api/java/lang/St [...]
                         org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -519,7 +539,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  table StoreFile names to the full Path.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>static <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.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableStoreFilePathMap-java.util.Map-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-org.apache.hadoop.fs.PathFilter-java.util.concurrent.ExecutorService-org.apache.hadoop.hbase.util.FSUtils.ProgressReporter-">getTableStoreFilePathMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-extern [...]
                         org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -532,7 +552,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  table StoreFile names to the full Path.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>static <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.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTableStoreFilePathMap-java.util.Map-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-org.apache.hadoop.fs.PathFilter-java.util.concurrent.ExecutorService-org.apache.hadoop.hbase.util.HbckErrorReporter-">getTableStoreFilePathMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true [...]
                         org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -546,43 +566,43 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getTotalTableFragmentation-org.apache.hadoop.hbase.master.HMaster-">getTotalTableFragmentation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master)</code>
 <div class="block">Returns the total overall fragmentation percentage.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#getVersion-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">getVersion</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
           org.apache.hadoop.fs.Path&nbsp;rootdir)</code>
 <div class="block">Verifies current version of file system</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#isDistributedFileSystem-org.apache.hadoop.fs.FileSystem-">isDistributedFileSystem</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code>private static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#isInSafeMode-org.apache.hadoop.hdfs.DistributedFileSystem-">isInSafeMode</a></span>(org.apache.hadoop.hdfs.DistributedFileSystem&nbsp;dfs)</code>
 <div class="block">Inquire the Active NameNode's safe mode status.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#isMatchingTail-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">isMatchingTail</a></span>(org.apache.hadoop.fs.Path&nbsp;pathToSearch,
               org.apache.hadoop.fs.Path&nbsp;pathTail)</code>
 <div class="block">Compare path component of the Path URI; e.g.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#isSameHdfs-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.FileSystem-">isSameHdfs</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
           org.apache.hadoop.fs.FileSystem&nbsp;srcFs,
           org.apache.hadoop.fs.FileSystem&nbsp;desFs)</code>&nbsp;</td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>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;org.apache.hadoop.fs.FileStatus&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#listStatusWithStatusFilter-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.util.FileStatusFilter-">listStatusWithStatusFilter</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                           org.apache.hadoop.fs.Path&nbsp;dir,
@@ -593,33 +613,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  while Hadoop 2 will throw FileNotFoundException.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#metaRegionExists-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">metaRegionExists</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                 org.apache.hadoop.fs.Path&nbsp;rootDir)</code>
 <div class="block">Checks if meta region exists</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#parseVersionFrom-byte:A-">parseVersionFrom</a></span>(byte[]&nbsp;bytes)</code>
 <div class="block">Parse the content of the ${HBASE_ROOTDIR}/hbase.version file.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#renameFile-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">renameFile</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
           org.apache.hadoop.fs.Path&nbsp;src,
           org.apache.hadoop.fs.Path&nbsp;dst)</code>&nbsp;</td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#rewriteAsPb-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.ClusterId-">rewriteAsPb</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
            org.apache.hadoop.fs.Path&nbsp;rootdir,
            org.apache.hadoop.fs.Path&nbsp;p,
            <a href="../../../../../org/apache/hadoop/hbase/ClusterId.html" title="class in org.apache.hadoop.hbase">ClusterId</a>&nbsp;cid)</code>&nbsp;</td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#setClusterId-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.ClusterId-long-">setClusterId</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
             org.apache.hadoop.fs.Path&nbsp;rootdir,
@@ -629,20 +649,20 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  directory.</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#setupShortCircuitRead-org.apache.hadoop.conf.Configuration-">setupShortCircuitRead</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Do our short circuit read setup.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#setVersion-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">setVersion</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
           org.apache.hadoop.fs.Path&nbsp;rootdir)</code>
 <div class="block">Sets version of file system</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#setVersion-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-int-int-">setVersion</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
           org.apache.hadoop.fs.Path&nbsp;rootdir,
@@ -651,7 +671,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">Sets version of file system</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#setVersion-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-int-int-">setVersion</a></span>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
           org.apache.hadoop.fs.Path&nbsp;rootdir,
@@ -661,13 +681,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">Sets version of file system</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>(package private) static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#toVersionByteArray-java.lang.String-">toVersionByteArray</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;version)</code>
 <div class="block">Create the content to write into the ${HBASE_ROOTDIR}/hbase.version file.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html#waitOnSafeMode-org.apache.hadoop.conf.Configuration-long-">waitOnSafeMode</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
               long&nbsp;wait)</code>
@@ -1451,7 +1471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getReferenceFilePaths</h4>
-<pre>public 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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1070">getReferenceFilePaths</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public 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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1065">getReferenceFilePaths</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                     org.apache.hadoop.fs.Path&nbsp;familyDir)
                                                              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>
@@ -1460,13 +1480,54 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="getReferenceAndLinkFilePaths-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getReferenceAndLinkFilePaths</h4>
+<pre>public 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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1070">getReferenceAndLinkFilePaths</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                                                                           org.apache.hadoop.fs.Path&nbsp;familyDir)
+                                                                    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>
+</li>
+</ul>
+<a name="getFilePaths-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.PathFilter-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFilePaths</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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1075">getFilePaths</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                                                            org.apache.hadoop.fs.Path&nbsp;dir,
+                                                            org.apache.hadoop.fs.PathFilter&nbsp;pathFilter)
+                                                     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>
+</li>
+</ul>
+<a name="getRegionReferenceAndLinkFileCount-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getRegionReferenceAndLinkFileCount</h4>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1086">getRegionReferenceAndLinkFileCount</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                                                     org.apache.hadoop.fs.Path&nbsp;p)</pre>
+</li>
+</ul>
 <a name="getTableStoreFilePathMap-java.util.Map-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.TableName-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStoreFilePathMap</h4>
-<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1173">getTableStoreFilePathMap</a>(<a href="https://docs.oracle.com/java [...]
+<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1210">getTableStoreFilePathMap</a>(<a href="https://docs.oracle.com/java [...]
                                                                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                              org.apache.hadoop.fs.Path&nbsp;hbaseRootDir,
                                                                              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
@@ -1499,7 +1560,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>getTableStoreFilePathMap</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;<a href="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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1204">getTableStoreFilePathMap</a>(<a href="https://docs.oracle.com/javase/8/ [...]
+public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1241">getTableStoreFilePathMap</a>(<a href="https://docs.oracle.com/javase/8/ [...]
                                                                                          org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                                          org.apache.hadoop.fs.Path&nbsp;hbaseRootDir,
                                                                                          <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -1542,7 +1603,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStoreFilePathMap</h4>
-<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1242">getTableStoreFilePathMap</a>(<a href="https://docs.oracle.com/java [...]
+<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1279">getTableStoreFilePathMap</a>(<a href="https://docs.oracle.com/java [...]
                                                                              org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                              org.apache.hadoop.fs.Path&nbsp;hbaseRootDir,
                                                                              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -1585,7 +1646,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionReferenceFileCount</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1357">getRegionReferenceFileCount</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1394">getRegionReferenceFileCount</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                               org.apache.hadoop.fs.Path&nbsp;p)</pre>
 </li>
 </ul>
@@ -1595,7 +1656,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStoreFilePathMap</h4>
-<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1382">getTableStoreFilePathMap</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1419">getTableStoreFilePathMap</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                              org.apache.hadoop.fs.Path&nbsp;hbaseRootDir)
                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -1624,7 +1685,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <li class="blockList">
 <h4>getTableStoreFilePathMap</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;<a href="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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1408">getTableStoreFilePathMap</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1445">getTableStoreFilePathMap</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                                          org.apache.hadoop.fs.Path&nbsp;hbaseRootDir,
                                                                                          org.apache.hadoop.fs.PathFilter&nbsp;sfFilter,
                                                                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
@@ -1660,7 +1721,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStoreFilePathMap</h4>
-<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1440">getTableStoreFilePathMap</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&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.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1477">getTableStoreFilePathMap</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                              org.apache.hadoop.fs.Path&nbsp;hbaseRootDir,
                                                                              org.apache.hadoop.fs.PathFilter&nbsp;sfFilter,
                                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
@@ -1695,7 +1756,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>filterFileStatuses</h4>
-<pre>public 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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1464">filterFileStatuses</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;input,
+<pre>public 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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1501">filterFileStatuses</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;input,
                                                                        <a href="../../../../../org/apache/hadoop/hbase/util/FileStatusFilter.html" title="interface in org.apache.hadoop.hbase.util">FileStatusFilter</a>&nbsp;filter)</pre>
 <div class="block">Filters FileStatuses in an array and returns a list</div>
 <dl>
@@ -1713,7 +1774,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>filterFileStatuses</h4>
-<pre>public 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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1477">filterFileStatuses</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;org.apache.hadoop.fs.FileSta [...]
+<pre>public 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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1514">filterFileStatuses</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;org.apache.hadoop.fs.FileSta [...]
                                                                        <a href="../../../../../org/apache/hadoop/hbase/util/FileStatusFilter.html" title="interface in org.apache.hadoop.hbase.util">FileStatusFilter</a>&nbsp;filter)</pre>
 <div class="block">Filters FileStatuses in an iterator and returns a list</div>
 <dl>
@@ -1731,7 +1792,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>listStatusWithStatusFilter</h4>
-<pre>public 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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1501">listStatusWithStatusFilter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public 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;org.apache.hadoop.fs.FileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1538">listStatusWithStatusFilter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                                org.apache.hadoop.fs.Path&nbsp;dir,
                                                                                <a href="../../../../../org/apache/hadoop/hbase/util/FileStatusFilter.html" title="interface in org.apache.hadoop.hbase.util">FileStatusFilter</a>&nbsp;filter)
                                                                         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>
@@ -1757,7 +1818,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionDegreeLocalityMappingFromFS</h4>
-<pre>public static&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>,<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/a [...]
+<pre>public static&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>,<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/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">This function is to scan the root path of the file system to get the
  degree of locality for each region on each of the servers having at least
@@ -1780,7 +1841,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionDegreeLocalityMappingFromFS</h4>
-<pre>public static&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>,<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/a [...]
+<pre>public static&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>,<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/a [...]
                                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;desiredTable,
                                                                                  int&nbsp;threadPoolSize)
                                                                           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>
@@ -1806,7 +1867,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocalityMappingFromFS</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1590">getRegionLocalityMappingFromFS</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1627">getRegionLocalityMappingFromFS</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                    <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;desiredTable,
                                                    int&nbsp;threadPoolSize,
                                                    <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="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 [...]
@@ -1833,7 +1894,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>setupShortCircuitRead</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1692">setupShortCircuitRead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1729">setupShortCircuitRead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Do our short circuit read setup.
  Checks buffer size to use and whether to do checksumming in hbase or hdfs.</div>
 <dl>
@@ -1848,7 +1909,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>checkShortCircuitReadBufferSize</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1710">checkShortCircuitReadBufferSize</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1747">checkShortCircuitReadBufferSize</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Check if short circuit read buffer size is set and if not, set it to hbase value.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1862,7 +1923,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getDFSHedgedReadMetrics</h4>
-<pre>public static&nbsp;org.apache.hadoop.hdfs.DFSHedgedReadMetrics&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1728">getDFSHedgedReadMetrics</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>public static&nbsp;org.apache.hadoop.hdfs.DFSHedgedReadMetrics&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1765">getDFSHedgedReadMetrics</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1880,7 +1941,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFilesParallel</h4>
-<pre>public 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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1760">copyFilesParallel</a>(org.apache.hadoop.fs.FileSystem&nbsp;srcFS,
+<pre>public 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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1797">copyFilesParallel</a>(org.apache.hadoop.fs.FileSystem&nbsp;srcFS,
                                                                 org.apache.hadoop.fs.Path&nbsp;src,
                                                                 org.apache.hadoop.fs.FileSystem&nbsp;dstFS,
                                                                 org.apache.hadoop.fs.Path&nbsp;dst,
@@ -1899,7 +1960,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>copyFiles</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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1778">copyFiles</a>(org.apache.hadoop.fs.FileSystem&nbsp;srcFS,
+<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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1815">copyFiles</a>(org.apache.hadoop.fs.FileSystem&nbsp;srcFS,
                                                          org.apache.hadoop.fs.Path&nbsp;src,
                                                          org.apache.hadoop.fs.FileSystem&nbsp;dstFS,
                                                          org.apache.hadoop.fs.Path&nbsp;dst,
@@ -1919,7 +1980,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockList">
 <li class="blockList">
 <h4>getNNAddresses</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1805">getNNAddresses</a>(org.apache.hadoop.hdfs.DistributedFileSystem&nbsp;fs,
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1842">getNNAddresses</a>(org.apache.hadoop.hdfs.DistributedFileSystem&nbsp;fs,
                                                      org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1933,7 +1994,7 @@ public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isSameHdfs</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1843">isSameHdfs</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/FSUtils.html#line.1880">isSameHdfs</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  org.apache.hadoop.fs.FileSystem&nbsp;srcFs,
                                  org.apache.hadoop.fs.FileSystem&nbsp;desFs)</pre>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/FSUtils.ReferenceAndLinkFileFilter.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/FSUtils.ReferenceAndLinkFileFilter.html
new file mode 100644
index 0000000..93e1e40
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/FSUtils.ReferenceAndLinkFileFilter.html
@@ -0,0 +1,125 @@
+<!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.util.FSUtils.ReferenceAndLinkFileFilter (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.util.FSUtils.ReferenceAndLinkFileFilter (Apache HBase 3.0.0-alpha-2-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">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/util/class-use/FSUtils.ReferenceAndLinkFileFilter.html" target="_top">Frames</a></li>
+<li><a href="FSUtils.ReferenceAndLinkFileFilter.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.util.FSUtils.ReferenceAndLinkFileFilter" class="title">Uses of Class<br>org.apache.hadoop.hbase.util.FSUtils.ReferenceAndLinkFileFilter</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.util.FSUtils.ReferenceAndLinkFileFilter</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/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">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/util/class-use/FSUtils.ReferenceAndLinkFileFilter.html" target="_top">Frames</a></li>
+<li><a href="FSUtils.ReferenceAndLinkFileFilter.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-frame.html b/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
index df95d87..4c388df 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
@@ -117,6 +117,7 @@
 <li><a href="FSUtils.FileFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.FileFilter</a></li>
 <li><a href="FSUtils.HFileFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.HFileFilter</a></li>
 <li><a href="FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.HFileLinkFilter</a></li>
+<li><a href="FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.ReferenceAndLinkFileFilter</a></li>
 <li><a href="FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.ReferenceFileFilter</a></li>
 <li><a href="FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.RegionDirFilter</a></li>
 <li><a href="FSUtils.UserTableDirFilter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FSUtils.UserTableDirFilter</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-summary.html b/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
index 7eba6ff..1d7a79e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
@@ -674,222 +674,226 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceAndLinkFileFilter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceFileFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.ReferenceFileFilter</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.RegionDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.RegionDirFilter</a></td>
 <td class="colLast">
 <div class="block">Filter for all dirs that don't start with '.'</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.UserTableDirFilter.html" title="class in org.apache.hadoop.hbase.util">FSUtils.UserTableDirFilter</a></td>
 <td class="colLast">
 <div class="block">A <code>PathFilter</code> that returns usertable directories.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSVisitor.html" title="class in org.apache.hadoop.hbase.util">FSVisitor</a></td>
 <td class="colLast">
 <div class="block">Utility methods for interacting with the hbase.root file system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FutureUtils.html" title="class in org.apache.hadoop.hbase.util">FutureUtils</a></td>
 <td class="colLast">
 <div class="block">Helper class for processing futures.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/GetJavaProperty.html" title="class in org.apache.hadoop.hbase.util">GetJavaProperty</a></td>
 <td class="colLast">
 <div class="block">A generic way for querying Java properties.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/GsonUtil.html" title="class in org.apache.hadoop.hbase.util">GsonUtil</a></td>
 <td class="colLast">
 <div class="block">Helper class for gson.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Hash.html" title="class in org.apache.hadoop.hbase.util">Hash</a></td>
 <td class="colLast">
 <div class="block">This class represents a common API for hashing functions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a></td>
 <td class="colLast">
 <div class="block">This class encapsulates a byte array and overrides hashCode and equals so
  that it's identity is based on the data rather than the array instance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HashKey.html" title="class in org.apache.hadoop.hbase.util">HashKey</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">Used to calculate the hash <a href="../../../../../org/apache/hadoop/hbase/util/Hash.html" title="class in org.apache.hadoop.hbase.util"><code>Hash</code></a> algorithms for Bloomfilters.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseConfTool.html" title="class in org.apache.hadoop.hbase.util">HBaseConfTool</a></td>
 <td class="colLast">
 <div class="block">Tool that prints out a configuration.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">For removal in hbase-4.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.FileLockCallable</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HBaseFsckTool</a></td>
 <td class="colLast">
 <div class="block">This is a Tool wrapper that gathers -Dxxx=yyy configuration settings from the command line.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.PrintingErrorReporter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.RegionBoundariesInformation</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.WorkItemHdfsRegionInfo</a></td>
 <td class="colLast">
 <div class="block">Contact hdfs and get all information about specified table directory into
  regioninfo list.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.WorkItemOverlapMerge</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.WorkItemRegion</a></td>
 <td class="colLast">
 <div class="block">Contact a region server and get all information from it</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsckRepair.html" title="class in org.apache.hadoop.hbase.util">HBaseFsckRepair</a></td>
 <td class="colLast">
 <div class="block">This class contains helper methods that repair parts of hbase's filesystem
  contents.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HbckRegionInfo.html" title="class in org.apache.hadoop.hbase.util">HbckRegionInfo</a></td>
 <td class="colLast">
 <div class="block">Maintain information about a particular region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HbckRegionInfo.HdfsEntry.html" title="class in org.apache.hadoop.hbase.util">HbckRegionInfo.HdfsEntry</a></td>
 <td class="colLast">
 <div class="block">Stores the regioninfo entries from HDFS</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HbckRegionInfo.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HbckRegionInfo.MetaEntry</a></td>
 <td class="colLast">
 <div class="block">Stores the regioninfo entries scanned from META</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HbckRegionInfo.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HbckRegionInfo.OnlineEntry</a></td>
 <td class="colLast">
 <div class="block">Stores the regioninfo retrieved from Online region servers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HbckTableInfo.html" title="class in org.apache.hadoop.hbase.util">HbckTableInfo</a></td>
 <td class="colLast">
 <div class="block">Maintain information about a particular table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HFileArchiveUtil.html" title="class in org.apache.hadoop.hbase.util">HFileArchiveUtil</a></td>
 <td class="colLast">
 <div class="block">Helper class for all utilities related to archival/retrieval of HFiles</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></td>
 <td class="colLast">
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with a minimal
  memory overhead.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdLock.Entry.html" title="class in org.apache.hadoop.hbase.util">IdLock.Entry</a></td>
 <td class="colLast">
 <div class="block">An entry returned to the client as a lock object</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">IdReadWriteLock</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with ReentrantReadWriteLock.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockStrongRef.html" title="class in org.apache.hadoop.hbase.util">IdReadWriteLockStrongRef</a>&lt;T&gt;</td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.html" title="class in org.apache.hadoop.hbase.util">IdReadWriteLockWithObjectPool</a>&lt;T&gt;</td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ImmutableByteArray.html" title="class in org.apache.hadoop.hbase.util">ImmutableByteArray</a></td>
 <td class="colLast">
 <div class="block">Mainly used as keys for HashMap.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">IncrementingEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Uses an incrementing algorithm instead of the default.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JenkinsHash.html" title="class in org.apache.hadoop.hbase.util">JenkinsHash</a></td>
 <td class="colLast">
 <div class="block">Produces 32-bit hash for hash table lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JRubyFormat.html" title="class in org.apache.hadoop.hbase.util">JRubyFormat</a></td>
 <td class="colLast">
 <div class="block">Utility class for converting objects to JRuby.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JSONBean.html" title="class in org.apache.hadoop.hbase.util">JSONBean</a></td>
 <td class="colLast">
 <div class="block">Utility for doing JSON and MBeans.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JsonMapper.html" title="class in org.apache.hadoop.hbase.util">JsonMapper</a></td>
 <td class="colLast">
 <div class="block">Utility class for converting objects to JSON</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JSONMetricUtil.html" title="class in org.apache.hadoop.hbase.util">JSONMetricUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVM.html" title="class in org.apache.hadoop.hbase.util">JVM</a></td>
 <td class="colLast">
 <div class="block">This class is a wrapper for the implementation of
@@ -898,110 +902,110 @@
  depending on the runtime (vendor) used.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil</a></td>
 <td class="colLast">
 <div class="block">Utility used running a cluster all in the one JVM.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.MasterThread.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil.MasterThread</a></td>
 <td class="colLast">
 <div class="block">Datastructure to hold Master Thread and Master instance</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.RegionServerThread.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil.RegionServerThread</a></td>
 <td class="colLast">
 <div class="block">Datastructure to hold RegionServer Thread and RegionServer instance</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a></td>
 <td class="colLast">
 <div class="block">Class which sets up a simple thread which runs in a loop sleeping
  for a short interval of time.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.GcTimes.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor.GcTimes</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JvmVersion.html" title="class in org.apache.hadoop.hbase.util">JvmVersion</a></td>
 <td class="colLast">
 <div class="block">Utility class to get and check the current JVM version.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;K&gt;</td>
 <td class="colLast">
 <div class="block">A utility class to manage a set of locks.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/LogMonitoring.html" title="class in org.apache.hadoop.hbase.util">LogMonitoring</a></td>
 <td class="colLast">
 <div class="block">Utility functions for reading the log4j logs that are being written by HBase.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/LossyCounting.html" title="class in org.apache.hadoop.hbase.util">LossyCounting</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">LossyCounting utility, bounded data structure that maintains approximate high frequency
  elements in data stream.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ManualEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">ManualEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">An environment edge that uses a manually set value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MapreduceDependencyClasspathTool.html" title="class in org.apache.hadoop.hbase.util">MapreduceDependencyClasspathTool</a></td>
 <td class="colLast">
 <div class="block">Generate a classpath string containing any jars required by mapreduce jobs.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MapReduceExtendedCell.html" title="class in org.apache.hadoop.hbase.util">MapReduceExtendedCell</a></td>
 <td class="colLast">
 <div class="block">A wrapper for a cell to be used with mapreduce, as the output value class for mappers/reducers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MD5Hash.html" title="class in org.apache.hadoop.hbase.util">MD5Hash</a></td>
 <td class="colLast">
 <div class="block">Utility class for MD5
  MD5 hash produces a 128-bit digest.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Methods.html" title="class in org.apache.hadoop.hbase.util">Methods</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ModifyRegionUtils.html" title="class in org.apache.hadoop.hbase.util">ModifyRegionUtils</a></td>
 <td class="colLast">
 <div class="block">Utility methods for interacting with the regions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MoveWithAck.html" title="class in org.apache.hadoop.hbase.util">MoveWithAck</a></td>
 <td class="colLast">
 <div class="block">Move Regions and make sure that they are up on the target server.If a region movement fails we
  exit as failure</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MoveWithoutAck.html" title="class in org.apache.hadoop.hbase.util">MoveWithoutAck</a></td>
 <td class="colLast">
 <div class="block">Move Regions without Acknowledging.Usefule in case of RS shutdown as we might want to shut the
  RS down anyways and not abort on a stuck region.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MovingAverage.html" title="class in org.apache.hadoop.hbase.util">MovingAverage</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">The purpose of introduction of <a href="../../../../../org/apache/hadoop/hbase/util/MovingAverage.html" title="class in org.apache.hadoop.hbase.util"><code>MovingAverage</code></a> mainly is to measure execution time of a
@@ -1009,7 +1013,7 @@
  machine states or situations, better case, then to act accordingly.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MunkresAssignment.html" title="class in org.apache.hadoop.hbase.util">MunkresAssignment</a></td>
 <td class="colLast">
 <div class="block">Computes the optimal (minimal cost) assignment of jobs to workers (or other
@@ -1020,135 +1024,135 @@
  Problem: An Improved Version of Munkres' Algorithm".</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MurmurHash.html" title="class in org.apache.hadoop.hbase.util">MurmurHash</a></td>
 <td class="colLast">
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/MurmurHash3.html" title="class in org.apache.hadoop.hbase.util">MurmurHash3</a></td>
 <td class="colLast">
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a></td>
 <td class="colLast">
 <div class="block">Event loop group related config.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a></td>
 <td class="colLast">
 <div class="block">This implementation is not smart and just treats nonce group and nonce as random bits.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">A generic class for pair of an Object and and a primitive int value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ObjectPool.html" title="class in org.apache.hadoop.hbase.util">ObjectPool</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">A thread-safe shared object pool in which object creation is expected to be lightweight, and the
  objects may be excessively created and discarded.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/OOMEChecker.html" title="class in org.apache.hadoop.hbase.util">OOMEChecker</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></td>
 <td class="colLast">
 <div class="block">Utility class that handles ordered byte arrays.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;T1,T2&gt;</td>
 <td class="colLast">
 <div class="block">A generic class for pairs.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PairOfSameType.html" title="class in org.apache.hadoop.hbase.util">PairOfSameType</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">A generic, immutable class for pairs of objects both of type <code>T</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.html" title="class in org.apache.hadoop.hbase.util">PoolMap</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">The <code>PoolMap</code> maps a key to a collection of values, the elements
  of which are managed by a pool.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.RoundRobinPool.html" title="class in org.apache.hadoop.hbase.util">PoolMap.RoundRobinPool</a>&lt;R&gt;</td>
 <td class="colLast">
 <div class="block">The <code>RoundRobinPool</code> represents a <a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.Pool.html" title="interface in org.apache.hadoop.hbase.util"><code>PoolMap.Pool</code></a>, which
  stores its resources in an <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util"><code>ArrayList</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.ThreadLocalPool.html" title="class in org.apache.hadoop.hbase.util">PoolMap.ThreadLocalPool</a>&lt;R&gt;</td>
 <td class="colLast">
 <div class="block">The <code>ThreadLocalPool</code> represents a <a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.Pool.html" title="interface in org.apache.hadoop.hbase.util"><code>PoolMap.Pool</code></a> that
  works similarly to <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang"><code>ThreadLocal</code></a> class.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.html" title="class in org.apache.hadoop.hbase.util">PrettyPrinter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ProcessUtils.html" title="class in org.apache.hadoop.hbase.util">ProcessUtils</a></td>
 <td class="colLast">
 <div class="block">Process related utilities.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Random64.html" title="class in org.apache.hadoop.hbase.util">Random64</a></td>
 <td class="colLast">
 <div class="block">An instance of this class is used to generate a stream of
  pseudorandom numbers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RecoverLeaseFSUtils.html" title="class in org.apache.hadoop.hbase.util">RecoverLeaseFSUtils</a></td>
 <td class="colLast">
 <div class="block">Utility methods for recovering file lease for hdfs.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ReflectionUtils.html" title="class in org.apache.hadoop.hbase.util">ReflectionUtils</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util">RegionMover</a></td>
 <td class="colLast">
 <div class="block">Tool for loading/unloading regions to/from given regionserver This tool can be run from Command
  line directly as a utility.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionMover.RegionMoverBuilder.html" title="class in org.apache.hadoop.hbase.util">RegionMover.RegionMoverBuilder</a></td>
 <td class="colLast">
 <div class="block">Builder for Region mover.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;R extends <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a>&gt;</td>
 <td class="colLast">
 <div class="block">This is a generic region split calculator.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter</a></td>
 <td class="colLast">
 <div class="block">The <a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util"><code>RegionSplitter</code></a> class provides several utilities to help in the
@@ -1156,254 +1160,254 @@
  instead of having HBase handle that automatically.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.DecimalStringSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.DecimalStringSplit</a></td>
 <td class="colLast">
 <div class="block">The format of a DecimalStringSplit region boundary is the ASCII representation of
  reversed sequential number, or any other uniformly distributed decimal value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.HexStringSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.HexStringSplit</a></td>
 <td class="colLast">
 <div class="block">HexStringSplit is a well-known <a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.SplitAlgorithm.html" title="interface in org.apache.hadoop.hbase.util"><code>RegionSplitter.SplitAlgorithm</code></a> for choosing region
  boundaries.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.NumberStringSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.NumberStringSplit</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.UniformSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.UniformSplit</a></td>
 <td class="colLast">
 <div class="block">A SplitAlgorithm that divides the space of possible keys evenly.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ReservoirSample.html" title="class in org.apache.hadoop.hbase.util">ReservoirSample</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">The simple version of reservoir sampling implementation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></td>
 <td class="colLast">
 <div class="block">Operation retry accounting.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.BackoffPolicy.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.BackoffPolicy</a></td>
 <td class="colLast">
 <div class="block">Policy for calculating sleeping intervals between retry attempts</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.ExponentialBackoffPolicy.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.ExponentialBackoffPolicy</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.ExponentialBackoffPolicyWithLimit.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.ExponentialBackoffPolicyWithLimit</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.RetryConfig.html" title="class in org.apache.hadoop.hbase.util">RetryCounter.RetryConfig</a></td>
 <td class="colLast">
 <div class="block">Configuration for a retry counter</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounterFactory.html" title="class in org.apache.hadoop.hbase.util">RetryCounterFactory</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RollingStatCalculator.html" title="class in org.apache.hadoop.hbase.util">RollingStatCalculator</a></td>
 <td class="colLast">
 <div class="block">This class maintains mean and variation for any sequence of input provided to it.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RowBloomContext.html" title="class in org.apache.hadoop.hbase.util">RowBloomContext</a></td>
 <td class="colLast">
 <div class="block">Handles ROW bloom related context.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RowBloomHashKey.html" title="class in org.apache.hadoop.hbase.util">RowBloomHashKey</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RowColBloomContext.html" title="class in org.apache.hadoop.hbase.util">RowColBloomContext</a></td>
 <td class="colLast">
 <div class="block">Handles ROWCOL bloom related context.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RowColBloomHashKey.html" title="class in org.apache.hadoop.hbase.util">RowColBloomHashKey</a></td>
 <td class="colLast">
 <div class="block">An hash key for ROWCOL bloom.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RowPrefixFixedLengthBloomContext.html" title="class in org.apache.hadoop.hbase.util">RowPrefixFixedLengthBloomContext</a></td>
 <td class="colLast">
 <div class="block">Handles ROWPREFIX bloom related context.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ServerCommandLine.html" title="class in org.apache.hadoop.hbase.util">ServerCommandLine</a></td>
 <td class="colLast">
 <div class="block">Base class for command lines that start up various HBase daemons.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.html" title="class in org.apache.hadoop.hbase.util">ServerRegionReplicaUtil</a></td>
 <td class="colLast">
 <div class="block">Similar to <a href="../../../../../org/apache/hadoop/hbase/client/RegionReplicaUtil.html" title="class in org.apache.hadoop.hbase.client"><code>RegionReplicaUtil</code></a> but for the server side</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ShutdownHookManager.html" title="class in org.apache.hadoop.hbase.util">ShutdownHookManager</a></td>
 <td class="colLast">
 <div class="block">This class provides ShutdownHookManager shims for HBase to interact with the Hadoop 1.0.x and the
  Hadoop 2.0+ series.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ShutdownHookManager.ShutdownHookManagerV1.html" title="class in org.apache.hadoop.hbase.util">ShutdownHookManager.ShutdownHookManagerV1</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ShutdownHookManager.ShutdownHookManagerV2.html" title="class in org.apache.hadoop.hbase.util">ShutdownHookManager.ShutdownHookManagerV2</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimpleByteRange.html" title="class in org.apache.hadoop.hbase.util">SimpleByteRange</a></td>
 <td class="colLast">
 <div class="block">A read only version of the <a href="../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util"><code>ByteRange</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimpleMovingAverage.html" title="class in org.apache.hadoop.hbase.util">SimpleMovingAverage</a></td>
 <td class="colLast">
 <div class="block">SMA measure the overall average execution time of a specific method.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimpleMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">SimpleMutableByteRange</a></td>
 <td class="colLast">
 <div class="block">A basic mutable <a href="../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util"><code>ByteRange</code></a> implementation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimplePositionedByteRange.html" title="class in org.apache.hadoop.hbase.util">SimplePositionedByteRange</a></td>
 <td class="colLast">
 <div class="block">Extends the basic <a href="../../../../../org/apache/hadoop/hbase/util/SimpleMutableByteRange.html" title="class in org.apache.hadoop.hbase.util"><code>SimpleMutableByteRange</code></a> implementation with position
  support and it is a readonly version.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">SimplePositionedMutableByteRange</a></td>
 <td class="colLast">
 <div class="block">Extends the basic <a href="../../../../../org/apache/hadoop/hbase/util/AbstractPositionedByteRange.html" title="class in org.apache.hadoop.hbase.util"><code>AbstractPositionedByteRange</code></a> implementation with
  position support and it is a mutable version.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a></td>
 <td class="colLast">
 <div class="block">Sleeper for current thread.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SoftObjectPool.html" title="class in org.apache.hadoop.hbase.util">SoftObjectPool</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">A <code>SoftReference</code> based shared object pool.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/SortedList.html" title="class in org.apache.hadoop.hbase.util">SortedList</a>&lt;E&gt;</td>
 <td class="colLast">
 <div class="block">Simple sorted list implementation that uses <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util"><code>ArrayList</code></a> as
  the underlying collection so we can support RandomAccess.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/StealJobQueue.html" title="class in org.apache.hadoop.hbase.util">StealJobQueue</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">This queue allows a ThreadPoolExecutor to steal jobs from another ThreadPoolExecutor.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Strings.html" title="class in org.apache.hadoop.hbase.util">Strings</a></td>
 <td class="colLast">
 <div class="block">Utility for Strings.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TableDescriptorChecker.html" title="class in org.apache.hadoop.hbase.util">TableDescriptorChecker</a></td>
 <td class="colLast">
 <div class="block">Only used for master to sanity check <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client"><code>TableDescriptor</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Threads.html" title="class in org.apache.hadoop.hbase.util">Threads</a></td>
 <td class="colLast">
 <div class="block">Thread Utility</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Triple.html" title="class in org.apache.hadoop.hbase.util">Triple</a>&lt;A,B,C&gt;</td>
 <td class="colLast">
 <div class="block">Utility class to manage a triple.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/UnsafeAccess.html" title="class in org.apache.hadoop.hbase.util">UnsafeAccess</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/UnsafeAvailChecker.html" title="class in org.apache.hadoop.hbase.util">UnsafeAvailChecker</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/VersionInfo.html" title="class in org.apache.hadoop.hbase.util">VersionInfo</a></td>
 <td class="colLast">
 <div class="block">This class finds the Version information for HBase.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/WeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">WeakObjectPool</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">A <code>WeakReference</code> based shared object pool.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/WeightedMovingAverage.html" title="class in org.apache.hadoop.hbase.util">WeightedMovingAverage</a></td>
 <td class="colLast">
 <div class="block">Different from SMA <a href="../../../../../org/apache/hadoop/hbase/util/SimpleMovingAverage.html" title="class in org.apache.hadoop.hbase.util"><code>SimpleMovingAverage</code></a>, WeightedMovingAverage gives each data different
  weight.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/WindowMovingAverage.html" title="class in org.apache.hadoop.hbase.util">WindowMovingAverage</a></td>
 <td class="colLast">
 <div class="block">Instead of calculate a whole time average, this class focus on the last N.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Writables.html" title="class in org.apache.hadoop.hbase.util">Writables</a></td>
 <td class="colLast">
 <div class="block">Utility class with methods for manipulating Writable objects</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/YammerHistogramUtils.html" title="class in org.apache.hadoop.hbase.util">YammerHistogramUtils</a></td>
 <td class="colLast">
 <div class="block">Utility functions for working with Yammer Metrics.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ZKDataMigrator.html" title="class in org.apache.hadoop.hbase.util">ZKDataMigrator</a></td>
 <td class="colLast">Deprecated
 <div class="block"><span class="deprecationComment">Since 2.0.0.</span></div>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index a100ec0..b95e10f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -243,6 +243,7 @@
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSTableDescriptors</span></a> (implements org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils.HFileLinkFilter</span></a> (implements org.apache.hadoop.fs.PathFilter)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils.ReferenceAndLinkFileFilter</span></a> (implements org.apache.hadoop.fs.PathFilter)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/FSVisitor.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSVisitor</span></a></li>
 <li type="circle">java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><span class="typeNameLink">FutureTask</span></a>&lt;V&gt; (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RunnableFuture.html?is-external=true" title="class or interface in java.util.concurrent">RunnableFuture</a>&lt;V&gt;)
 <ul>
@@ -533,15 +534,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <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/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/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/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 5921874..61f35f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -198,8 +198,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.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index af663f4..20a8f48 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -1853,6 +1853,7 @@
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSTableDescriptors</span></a> (implements org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.HFileLinkFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils.HFileLinkFilter</span></a> (implements org.apache.hadoop.fs.PathFilter)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSUtils.ReferenceAndLinkFileFilter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSUtils.ReferenceAndLinkFileFilter</span></a> (implements org.apache.hadoop.fs.PathFilter)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSVisitor.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">FSVisitor</span></a></li>
 <li type="circle">java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><span class="typeNameLink">FutureTask</span></a>&lt;V&gt; (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RunnableFuture.html?is-external=true" title="class or interface in java.util.concurrent">RunnableFuture</a>&lt;V&gt;)
 <ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/HFileLink.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/HFileLink.html
index faff4d0..a75eb63 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/HFileLink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/HFileLink.html
@@ -87,459 +87,483 @@
 <span class="sourceLineNo">079</span>        RegionInfoBuilder.ENCODED_REGION_NAME_REGEX, StoreFileInfo.HFILE_NAME_REGEX);<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
 <span class="sourceLineNo">081</span>  /** Define the HFile Link name parser in the form of: table=region-hfile */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  //made package private for testing<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  static final Pattern LINK_NAME_PATTERN =<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Pattern.compile(String.format("^(?:(%s)(?:\\=))?(%s)=(%s)-(%s)$",<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      TableName.VALID_NAMESPACE_REGEX, TableName.VALID_TABLE_QUALIFIER_REGEX,<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      RegionInfoBuilder.ENCODED_REGION_NAME_REGEX, StoreFileInfo.HFILE_NAME_REGEX));<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * The pattern should be used for hfile and reference links<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * that can be found in /hbase/table/region/family/<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private static final Pattern REF_OR_HFILE_LINK_PATTERN =<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    Pattern.compile(String.format("^(?:(%s)(?:=))?(%s)=(%s)-(.+)$",<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      TableName.VALID_NAMESPACE_REGEX, TableName.VALID_TABLE_QUALIFIER_REGEX,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        RegionInfoBuilder.ENCODED_REGION_NAME_REGEX));<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final Path archivePath;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private final Path originPath;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final Path mobPath;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private final Path tempPath;<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  /**<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * Dead simple hfile link constructor<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public HFileLink(final Path originPath, final Path tempPath, final Path mobPath,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>                   final Path archivePath) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    this.tempPath = tempPath;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.originPath = originPath;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.mobPath = mobPath;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    this.archivePath = archivePath;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    setLocations(originPath, tempPath, mobPath, archivePath);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">082</span>  public static final Pattern LINK_NAME_PATTERN =<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    Pattern.compile(String.format("^(?:(%s)(?:\\=))?(%s)=(%s)-(%s)$",<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      TableName.VALID_NAMESPACE_REGEX, TableName.VALID_TABLE_QUALIFIER_REGEX,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      RegionInfoBuilder.ENCODED_REGION_NAME_REGEX, StoreFileInfo.HFILE_NAME_REGEX));<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  /**<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * The pattern should be used for hfile and reference links<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * that can be found in /hbase/table/region/family/<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static final Pattern REF_OR_HFILE_LINK_PATTERN =<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    Pattern.compile(String.format("^(?:(%s)(?:=))?(%s)=(%s)-(.+)$",<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      TableName.VALID_NAMESPACE_REGEX, TableName.VALID_TABLE_QUALIFIER_REGEX,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        RegionInfoBuilder.ENCODED_REGION_NAME_REGEX));<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private final Path archivePath;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private final Path originPath;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final Path mobPath;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private final Path tempPath;<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  /**<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * Dead simple hfile link constructor<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public HFileLink(final Path originPath, final Path tempPath, final Path mobPath,<a name="line.104"></a>
+<span class="sourceLineNo">105</span>                   final Path archivePath) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.tempPath = tempPath;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.originPath = originPath;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.mobPath = mobPath;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    this.archivePath = archivePath;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    setLocations(originPath, tempPath, mobPath, archivePath);<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>  /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} from which to extract specific archive locations<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @param hFileLinkPattern The path ending with a HFileLink pattern. (table=region-hfile)<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @throws IOException on unexpected error.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public static final HFileLink buildFromHFileLinkPattern(Configuration conf, Path hFileLinkPattern)<a name="line.120"></a>
-<span class="sourceLineNo">121</span>          throws IOException {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    return buildFromHFileLinkPattern(CommonFSUtils.getRootDir(conf),<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            HFileArchiveUtil.getArchivePath(conf), hFileLinkPattern);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">114</span>  /**<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} from which to extract specific archive locations<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * @param hFileLinkPattern The path ending with a HFileLink pattern. (table=region-hfile)<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @throws IOException on unexpected error.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public static final HFileLink buildFromHFileLinkPattern(Configuration conf, Path hFileLinkPattern)<a name="line.119"></a>
+<span class="sourceLineNo">120</span>          throws IOException {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return buildFromHFileLinkPattern(CommonFSUtils.getRootDir(conf),<a name="line.121"></a>
+<span class="sourceLineNo">122</span>            HFileArchiveUtil.getArchivePath(conf), hFileLinkPattern);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
 <span class="sourceLineNo">125</span><a name="line.125"></a>
 <span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>  /**<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @param rootDir Path to the root directory where hbase files are stored<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * @param archiveDir Path to the hbase archive directory<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * @param hFileLinkPattern The path of the HFile Link.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   */<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  public final static HFileLink buildFromHFileLinkPattern(final Path rootDir,<a name="line.133"></a>
-<span class="sourceLineNo">134</span>                                                          final Path archiveDir,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>                                                          final Path hFileLinkPattern) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    Path hfilePath = getHFileLinkPatternRelativePath(hFileLinkPattern);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Path tempPath = new Path(new Path(rootDir, HConstants.HBASE_TEMP_DIRECTORY), hfilePath);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    Path originPath = new Path(rootDir, hfilePath);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Path mobPath = new Path(new Path(rootDir, MobConstants.MOB_DIR_NAME), hfilePath);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    Path archivePath = new Path(archiveDir, hfilePath);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return new HFileLink(originPath, tempPath, mobPath, archivePath);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Create an HFileLink relative path for the table/region/family/hfile location<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param table Table name<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @param region Region Name<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param family Family Name<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param hfile HFile Name<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @return the relative Path to open the specified table/region/family/hfile link<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public static Path createPath(final TableName table, final String region,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>                                final String family, final String hfile) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    if (HFileLink.isHFileLink(hfile)) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      return new Path(family, hfile);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return new Path(family, HFileLink.createHFileLinkName(table, region, hfile));<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * Create an HFileLink instance from table/region/family/hfile location<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param conf {@link Configuration} from which to extract specific archive locations<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   * @param table Table name<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @param region Region Name<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * @param family Family Name<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * @param hfile HFile Name<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * @return Link to the file with the specified table/region/family/hfile location<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @throws IOException on unexpected error.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public static HFileLink build(final Configuration conf, final TableName table,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>                                 final String region, final String family, final String hfile)<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return HFileLink.buildFromHFileLinkPattern(conf, createPath(table, region, family, hfile));<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>   * @return the origin path of the hfile.<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public Path getOriginPath() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    return this.originPath;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * @return the path of the archived hfile.<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  public Path getArchivePath() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    return this.archivePath;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @return the path of the mob hfiles.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public Path getMobPath() {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    return this.mobPath;<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>   * @param path Path to check.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * @return True if the path is a HFileLink.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  public static boolean isHFileLink(final Path path) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    return isHFileLink(path.getName());<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">127</span>  /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param rootDir Path to the root directory where hbase files are stored<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param archiveDir Path to the hbase archive directory<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param hFileLinkPattern The path of the HFile Link.<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public final static HFileLink buildFromHFileLinkPattern(final Path rootDir,<a name="line.132"></a>
+<span class="sourceLineNo">133</span>                                                          final Path archiveDir,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>                                                          final Path hFileLinkPattern) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    Path hfilePath = getHFileLinkPatternRelativePath(hFileLinkPattern);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    Path tempPath = new Path(new Path(rootDir, HConstants.HBASE_TEMP_DIRECTORY), hfilePath);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    Path originPath = new Path(rootDir, hfilePath);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Path mobPath = new Path(new Path(rootDir, MobConstants.MOB_DIR_NAME), hfilePath);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    Path archivePath = new Path(archiveDir, hfilePath);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return new HFileLink(originPath, tempPath, mobPath, archivePath);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Create an HFileLink relative path for the table/region/family/hfile location<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * @param table Table name<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * @param region Region Name<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param family Family Name<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param hfile HFile Name<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @return the relative Path to open the specified table/region/family/hfile link<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public static Path createPath(final TableName table, final String region,<a name="line.151"></a>
+<span class="sourceLineNo">152</span>                                final String family, final String hfile) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (HFileLink.isHFileLink(hfile)) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      return new Path(family, hfile);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return new Path(family, HFileLink.createHFileLinkName(table, region, hfile));<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Create an HFileLink instance from table/region/family/hfile location<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param conf {@link Configuration} from which to extract specific archive locations<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param table Table name<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param region Region Name<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param family Family Name<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param hfile HFile Name<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @return Link to the file with the specified table/region/family/hfile location<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @throws IOException on unexpected error.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public static HFileLink build(final Configuration conf, final TableName table,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>                                 final String region, final String family, final String hfile)<a name="line.170"></a>
+<span class="sourceLineNo">171</span>          throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    return HFileLink.buildFromHFileLinkPattern(conf, createPath(table, region, family, hfile));<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  /**<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @return the origin path of the hfile.<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  public Path getOriginPath() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return this.originPath;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  /**<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return the path of the archived hfile.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public Path getArchivePath() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    return this.archivePath;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @return the path of the mob hfiles.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public Path getMobPath() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    return this.mobPath;<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>
+<span class="sourceLineNo">196</span>    /**<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * @param path Path to check.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @return True if the path is a HFileLink.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  public static boolean isHFileLink(final Path path) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    return isHFileLink(path.getName());<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
 <span class="sourceLineNo">204</span><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>   * @param fileName File name to check.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * @return True if the path is a HFileLink.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  public static boolean isHFileLink(String fileName) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Matcher m = LINK_NAME_PATTERN.matcher(fileName);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    if (!m.matches()) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      return false;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return m.groupCount() &gt; 2 &amp;&amp; m.group(4) != null &amp;&amp; m.group(3) != null &amp;&amp; m.group(2) != null;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * Convert a HFileLink path to a table relative path.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * e.g. the link: /hbase/test/0123/cf/testtb=4567-abcd<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   *      becomes: /hbase/testtb/4567/cf/abcd<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   *<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param path HFileLink path<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @return Relative table path<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @throws IOException on unexpected error.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private static Path getHFileLinkPatternRelativePath(final Path path) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // table=region-hfile<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(path.getName());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    if (!m.matches()) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      throw new IllegalArgumentException(path.getName() + " is not a valid HFileLink pattern!");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>    // Convert the HFileLink name into a real table/region/cf/hfile path.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    TableName tableName = TableName.valueOf(m.group(1), m.group(2));<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    String regionName = m.group(3);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    String hfileName = m.group(4);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    String familyName = path.getParent().getName();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    Path tableDir = CommonFSUtils.getTableDir(new Path("./"), tableName);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return new Path(tableDir, new Path(regionName, new Path(familyName,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        hfileName)));<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Get the HFile name of the referenced link<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   *<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * @param fileName HFileLink file name<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @return the name of the referenced HFile<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public static String getReferencedHFileName(final String fileName) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(fileName);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    if (!m.matches()) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      throw new IllegalArgumentException(fileName + " is not a valid HFileLink name!");<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return(m.group(4));<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Get the Region name of the referenced link<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   *<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @param fileName HFileLink file name<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @return the name of the referenced Region<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  public static String getReferencedRegionName(final String fileName) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(fileName);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (!m.matches()) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      throw new IllegalArgumentException(fileName + " is not a valid HFileLink name!");<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    return(m.group(3));<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * Get the Table name of the referenced link<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   *<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @param fileName HFileLink file name<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @return the name of the referenced Table<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public static TableName getReferencedTableName(final String fileName) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(fileName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (!m.matches()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      throw new IllegalArgumentException(fileName + " is not a valid HFileLink name!");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return(TableName.valueOf(m.group(1), m.group(2)));<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Create a new HFileLink name<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   *<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * @param hfileRegionInfo - Linked HFile Region Info<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @param hfileName - Linked HFile name<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @return file name of the HFile Link<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public static String createHFileLinkName(final RegionInfo hfileRegionInfo,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      final String hfileName) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return createHFileLinkName(hfileRegionInfo.getTable(),<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            hfileRegionInfo.getEncodedName(), hfileName);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * Create a new HFileLink name<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   *<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @param tableName - Linked HFile table name<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * @param regionName - Linked HFile region name<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @param hfileName - Linked HFile name<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * @return file name of the HFile Link<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   */<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  public static String createHFileLinkName(final TableName tableName,<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      final String regionName, final String hfileName) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    String s = String.format("%s=%s-%s",<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        tableName.getNameAsString().replace(TableName.NAMESPACE_DELIM, '='),<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        regionName, hfileName);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    return s;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>  /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * Create a new HFileLink<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   *<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * to simplify the reference-count and the cleaning process.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @param hfileRegionInfo - Linked HFile Region Info<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @param hfileName - Linked HFile name<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @return true if the file is created, otherwise the file exists.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @throws IOException on file or parent directory creation failure<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      final Path dstFamilyPath, final RegionInfo hfileRegionInfo,<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      final String hfileName) throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return create(conf, fs, dstFamilyPath, hfileRegionInfo, hfileName, true);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * Create a new HFileLink<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   *<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * to simplify the reference-count and the cleaning process.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   *<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @param hfileRegionInfo - Linked HFile Region Info<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * @param hfileName - Linked HFile name<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @return true if the file is created, otherwise the file exists.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @throws IOException on file or parent directory creation failure<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      final Path dstFamilyPath, final RegionInfo hfileRegionInfo,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      final String hfileName, final boolean createBackRef) throws IOException {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    TableName linkedTable = hfileRegionInfo.getTable();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    String linkedRegion = hfileRegionInfo.getEncodedName();<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return create(conf, fs, dstFamilyPath, linkedTable, linkedRegion, hfileName, createBackRef);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Create a new HFileLink<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   *<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * to simplify the reference-count and the cleaning process.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   *<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param linkedTable - Linked Table Name<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @param linkedRegion - Linked Region Name<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @param hfileName - Linked HFile name<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return true if the file is created, otherwise the file exists.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @throws IOException on file or parent directory creation failure<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      final Path dstFamilyPath, final TableName linkedTable, final String linkedRegion,<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      final String hfileName) throws IOException {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return create(conf, fs, dstFamilyPath, linkedTable, linkedRegion, hfileName, true);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  /**<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * Create a new HFileLink<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   *<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * to simplify the reference-count and the cleaning process.<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   *<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * @param linkedTable - Linked Table Name<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param linkedRegion - Linked Region Name<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param hfileName - Linked HFile name<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @return true if the file is created, otherwise the file exists.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @throws IOException on file or parent directory creation failure<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   */<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      final Path dstFamilyPath, final TableName linkedTable, final String linkedRegion,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      final String hfileName, final boolean createBackRef) throws IOException {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    String familyName = dstFamilyPath.getName();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    String regionName = dstFamilyPath.getParent().getName();<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    String tableName = CommonFSUtils.getTableName(dstFamilyPath.getParent().getParent())<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        .getNameAsString();<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>    String name = createHFileLinkName(linkedTable, linkedRegion, hfileName);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    String refName = createBackReferenceName(tableName, regionName);<a name="line.404"></a>
+<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param fileName File name to check.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @return True if the path is a HFileLink.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public static boolean isHFileLink(String fileName) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    Matcher m = LINK_NAME_PATTERN.matcher(fileName);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    if (!m.matches()) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      return false;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    return m.groupCount() &gt; 2 &amp;&amp; m.group(4) != null &amp;&amp; m.group(3) != null &amp;&amp; m.group(2) != null;<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>  /**<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * Convert a HFileLink path to a table relative path.<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * e.g. the link: /hbase/test/0123/cf/testtb=4567-abcd<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   *      becomes: /hbase/testtb/4567/cf/abcd<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   *<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * @param path HFileLink path<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * @return Relative table path<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @throws IOException on unexpected error.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  private static Path getHFileLinkPatternRelativePath(final Path path) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    // table=region-hfile<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(path.getName());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    if (!m.matches()) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      throw new IllegalArgumentException(path.getName() + " is not a valid HFileLink pattern!");<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // Convert the HFileLink name into a real table/region/cf/hfile path.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    TableName tableName = TableName.valueOf(m.group(1), m.group(2));<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    String regionName = m.group(3);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    String hfileName = m.group(4);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    String familyName = path.getParent().getName();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    Path tableDir = CommonFSUtils.getTableDir(new Path("./"), tableName);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return new Path(tableDir, new Path(regionName, new Path(familyName,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        hfileName)));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * Get the HFile name of the referenced link<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   *<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param fileName HFileLink file name<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @return the name of the referenced HFile<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public static String getReferencedHFileName(final String fileName) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(fileName);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    if (!m.matches()) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      throw new IllegalArgumentException(fileName + " is not a valid HFileLink name!");<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    return(m.group(4));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the Region name of the referenced link<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   *<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @param fileName HFileLink file name<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @return the name of the referenced Region<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  public static String getReferencedRegionName(final String fileName) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(fileName);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    if (!m.matches()) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      throw new IllegalArgumentException(fileName + " is not a valid HFileLink name!");<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    return(m.group(3));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * Get the Table name of the referenced link<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   *<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * @param fileName HFileLink file name<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * @return the name of the referenced Table<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  public static TableName getReferencedTableName(final String fileName) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    Matcher m = REF_OR_HFILE_LINK_PATTERN.matcher(fileName);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    if (!m.matches()) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      throw new IllegalArgumentException(fileName + " is not a valid HFileLink name!");<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return(TableName.valueOf(m.group(1), m.group(2)));<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * Create a new HFileLink name<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   *<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @param hfileRegionInfo - Linked HFile Region Info<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * @param hfileName - Linked HFile name<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * @return file name of the HFile Link<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  public static String createHFileLinkName(final RegionInfo hfileRegionInfo,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      final String hfileName) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return createHFileLinkName(hfileRegionInfo.getTable(),<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            hfileRegionInfo.getEncodedName(), hfileName);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * Create a new HFileLink name<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @param tableName - Linked HFile table name<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @param regionName - Linked HFile region name<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @param hfileName - Linked HFile name<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @return file name of the HFile Link<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public static String createHFileLinkName(final TableName tableName,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      final String regionName, final String hfileName) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    String s = String.format("%s=%s-%s",<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        tableName.getNameAsString().replace(TableName.NAMESPACE_DELIM, '='),<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        regionName, hfileName);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    return s;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * Create a new HFileLink<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   *<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * to simplify the reference-count and the cleaning process.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   *<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param hfileRegionInfo - Linked HFile Region Info<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * @param hfileName - Linked HFile name<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * @return true if the file is created, otherwise the file exists.<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @throws IOException on file or parent directory creation failure<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      final Path dstFamilyPath, final RegionInfo hfileRegionInfo,<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      final String hfileName) throws IOException {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return create(conf, fs, dstFamilyPath, hfileRegionInfo, hfileName, true);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * Create a new HFileLink<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   *<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * to simplify the reference-count and the cleaning process.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   *<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * @param hfileRegionInfo - Linked HFile Region Info<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * @param hfileName - Linked HFile name<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @return true if the file is created, otherwise the file exists.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @throws IOException on file or parent directory creation failure<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      final Path dstFamilyPath, final RegionInfo hfileRegionInfo,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      final String hfileName, final boolean createBackRef) throws IOException {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    TableName linkedTable = hfileRegionInfo.getTable();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    String linkedRegion = hfileRegionInfo.getEncodedName();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    return create(conf, fs, dstFamilyPath, linkedTable, linkedRegion, hfileName, createBackRef);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * Create a new HFileLink<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   *<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * to simplify the reference-count and the cleaning process.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   *<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * @param linkedTable - Linked Table Name<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * @param linkedRegion - Linked Region Name<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @param hfileName - Linked HFile name<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @return true if the file is created, otherwise the file exists.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @throws IOException on file or parent directory creation failure<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      final Path dstFamilyPath, final TableName linkedTable, final String linkedRegion,<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      final String hfileName) throws IOException {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return create(conf, fs, dstFamilyPath, linkedTable, linkedRegion, hfileName, true);<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>  /**<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * Create a new HFileLink<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   *<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * to simplify the reference-count and the cleaning process.<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   *<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * @param linkedTable - Linked Table Name<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * @param linkedRegion - Linked Region Name<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * @param hfileName - Linked HFile name<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @return true if the file is created, otherwise the file exists.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @throws IOException on file or parent directory creation failure<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   */<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      final Path dstFamilyPath, final TableName linkedTable, final String linkedRegion,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      final String hfileName, final boolean createBackRef) throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    String familyName = dstFamilyPath.getName();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    String regionName = dstFamilyPath.getParent().getName();<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    String tableName = CommonFSUtils.getTableName(dstFamilyPath.getParent().getParent())<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        .getNameAsString();<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    return create(conf, fs, dstFamilyPath, familyName, tableName, regionName, linkedTable,<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      linkedRegion, hfileName, createBackRef);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>  }<a name="line.404"></a>
 <span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>    // Make sure the destination directory exists<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    fs.mkdirs(dstFamilyPath);<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>    // Make sure the FileLink reference directory exists<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    Path archiveStoreDir = HFileArchiveUtil.getStoreArchivePath(conf,<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          linkedTable, linkedRegion, familyName);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    Path backRefPath = null;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    if (createBackRef) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      Path backRefssDir = getBackReferencesDir(archiveStoreDir, hfileName);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      fs.mkdirs(backRefssDir);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      // Create the reference for the link<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      backRefPath = new Path(backRefssDir, refName);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      fs.createNewFile(backRefPath);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      // Create the link<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return fs.createNewFile(new Path(dstFamilyPath, name));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } catch (IOException e) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      LOG.error("couldn't create the link=" + name + " for " + dstFamilyPath, e);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      // Revert the reference if the link creation failed<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      if (createBackRef) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        fs.delete(backRefPath, false);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      throw e;<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /**<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * Create a new HFileLink starting from a hfileLink name<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   *<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * to simplify the reference-count and the cleaning process.<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   *<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @param hfileLinkName - HFileLink name (it contains hfile-region-table)<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * @return true if the file is created, otherwise the file exists.<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * @throws IOException on file or parent directory creation failure<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public static boolean createFromHFileLink(final Configuration conf, final FileSystem fs,<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      final Path dstFamilyPath, final String hfileLinkName)<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          throws IOException {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    return createFromHFileLink(conf, fs, dstFamilyPath, hfileLinkName, true);<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>   * Create a new HFileLink starting from a hfileLink name<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   *<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * to simplify the reference-count and the cleaning process.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param hfileLinkName - HFileLink name (it contains hfile-region-table)<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return true if the file is created, otherwise the file exists.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IOException on file or parent directory creation failure<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public static boolean createFromHFileLink(final Configuration conf, final FileSystem fs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final Path dstFamilyPath, final String hfileLinkName, final boolean createBackRef)<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    Matcher m = LINK_NAME_PATTERN.matcher(hfileLinkName);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (!m.matches()) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      throw new IllegalArgumentException(hfileLinkName + " is not a valid HFileLink name!");<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return create(conf, fs, dstFamilyPath, TableName.valueOf(m.group(1), m.group(2)),<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        m.group(3), m.group(4), createBackRef);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * Create the back reference name<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  //package-private for testing<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  static String createBackReferenceName(final String tableNameStr,<a name="line.482"></a>
-<span class="sourceLineNo">483</span>                                        final String regionName) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return regionName + "." + tableNameStr.replace(TableName.NAMESPACE_DELIM, '=');<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>  /**<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * Get the full path of the HFile referenced by the back reference<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   *<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * @param rootDir root hbase directory<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param linkRefPath Link Back Reference path<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @return full path of the referenced hfile<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   */<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  public static Path getHFileFromBackReference(final Path rootDir, final Path linkRefPath) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    Pair&lt;TableName, String&gt; p = parseBackReferenceName(linkRefPath.getName());<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    TableName linkTableName = p.getFirst();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    String linkRegionName = p.getSecond();<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    String hfileName = getBackReferenceFileName(linkRefPath.getParent());<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    Path familyPath = linkRefPath.getParent().getParent();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Path regionPath = familyPath.getParent();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    Path tablePath = regionPath.getParent();<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>    String linkName = createHFileLinkName(CommonFSUtils.getTableName(tablePath),<a name="line.505"></a>
-<span class="sourceLineNo">506</span>            regionPath.getName(), hfileName);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    Path linkTableDir = CommonFSUtils.getTableDir(rootDir, linkTableName);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    Path regionDir = HRegion.getRegionDir(linkTableDir, linkRegionName);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    return new Path(new Path(regionDir, familyPath.getName()), linkName);<a name="line.509"></a>
+<span class="sourceLineNo">406</span>  /**<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * Create a new HFileLink<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   *<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * to simplify the reference-count and the cleaning process.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @param dstTableName - Destination table name<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @param dstRegionName - Destination region name<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @param linkedTable - Linked Table Name<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @param linkedRegion - Linked Region Name<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param hfileName - Linked HFile name<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * @return true if the file is created, otherwise the file exists.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @throws IOException on file or parent directory creation failure<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  public static boolean create(final Configuration conf, final FileSystem fs,<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      final Path dstFamilyPath, final String familyName, final String dstTableName,<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      final String dstRegionName, final TableName linkedTable, final String linkedRegion,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      final String hfileName, final boolean createBackRef) throws IOException {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    String name = createHFileLinkName(linkedTable, linkedRegion, hfileName);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    String refName = createBackReferenceName(dstTableName, dstRegionName);<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Make sure the destination directory exists<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    fs.mkdirs(dstFamilyPath);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Make sure the FileLink reference directory exists<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path archiveStoreDir = HFileArchiveUtil.getStoreArchivePath(conf,<a name="line.434"></a>
+<span class="sourceLineNo">435</span>        linkedTable, linkedRegion, familyName);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    Path backRefPath = null;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (createBackRef) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      Path backRefssDir = getBackReferencesDir(archiveStoreDir, hfileName);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      fs.mkdirs(backRefssDir);<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // Create the reference for the link<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      backRefPath = new Path(backRefssDir, refName);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      fs.createNewFile(backRefPath);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    try {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // Create the link<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      return fs.createNewFile(new Path(dstFamilyPath, name));<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    } catch (IOException e) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      LOG.error("couldn't create the link=" + name + " for " + dstFamilyPath, e);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Revert the reference if the link creation failed<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      if (createBackRef) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        fs.delete(backRefPath, false);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      throw e;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>  /**<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * Create a new HFileLink starting from a hfileLink name<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   *<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * to simplify the reference-count and the cleaning process.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   *<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param hfileLinkName - HFileLink name (it contains hfile-region-table)<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @return true if the file is created, otherwise the file exists.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @throws IOException on file or parent directory creation failure<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   */<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  public static boolean createFromHFileLink(final Configuration conf, final FileSystem fs,<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      final Path dstFamilyPath, final String hfileLinkName)<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          throws IOException {<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    return createFromHFileLink(conf, fs, dstFamilyPath, hfileLinkName, true);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>  /**<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * Create a new HFileLink starting from a hfileLink name<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   *<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * &lt;p&gt;It also adds a back-reference to the hfile back-reference directory<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * to simplify the reference-count and the cleaning process.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   *<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @param fs {@link FileSystem} on which to write the HFileLink<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * @param dstFamilyPath - Destination path (table/region/cf/)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * @param hfileLinkName - HFileLink name (it contains hfile-region-table)<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   * @param createBackRef - Whether back reference should be created. Defaults to true.<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @return true if the file is created, otherwise the file exists.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * @throws IOException on file or parent directory creation failure<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
+<span class="sourceLineNo">491</span>  public static boolean createFromHFileLink(final Configuration conf, final FileSystem fs,<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      final Path dstFamilyPath, final String hfileLinkName, final boolean createBackRef)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throws IOException {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    Matcher m = LINK_NAME_PATTERN.matcher(hfileLinkName);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    if (!m.matches()) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      throw new IllegalArgumentException(hfileLinkName + " is not a valid HFileLink name!");<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    return create(conf, fs, dstFamilyPath, TableName.valueOf(m.group(1), m.group(2)),<a name="line.498"></a>
+<span class="sourceLineNo">499</span>        m.group(3), m.group(4), createBackRef);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  /**<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * Create the back reference name<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  //package-private for testing<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  static String createBackReferenceName(final String tableNameStr,<a name="line.506"></a>
+<span class="sourceLineNo">507</span>                                        final String regionName) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>    return regionName + "." + tableNameStr.replace(TableName.NAMESPACE_DELIM, '=');<a name="line.509"></a>
 <span class="sourceLineNo">510</span>  }<a name="line.510"></a>
 <span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>  public static Pair&lt;TableName, String&gt; parseBackReferenceName(String name) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    int separatorIndex = name.indexOf('.');<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    String linkRegionName = name.substring(0, separatorIndex);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    String tableSubstr = name.substring(separatorIndex + 1)<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        .replace('=', TableName.NAMESPACE_DELIM);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    TableName linkTableName = TableName.valueOf(tableSubstr);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    return new Pair&lt;&gt;(linkTableName, linkRegionName);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>  /**<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   * Get the full path of the HFile referenced by the back reference<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   *<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param linkRefPath Link Back Reference path<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @return full path of the referenced hfile<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * @throws IOException on unexpected error.<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   */<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  public static Path getHFileFromBackReference(final Configuration conf, final Path linkRefPath)<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      throws IOException {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    return getHFileFromBackReference(CommonFSUtils.getRootDir(conf), linkRefPath);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>}<a name="line.534"></a>
+<span class="sourceLineNo">512</span>  /**<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * Get the full path of the HFile referenced by the back reference<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   *<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param rootDir root hbase directory<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param linkRefPath Link Back Reference path<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @return full path of the referenced hfile<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   */<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public static Path getHFileFromBackReference(final Path rootDir, final Path linkRefPath) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    Pair&lt;TableName, String&gt; p = parseBackReferenceName(linkRefPath.getName());<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    TableName linkTableName = p.getFirst();<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    String linkRegionName = p.getSecond();<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    String hfileName = getBackReferenceFileName(linkRefPath.getParent());<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    Path familyPath = linkRefPath.getParent().getParent();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path regionPath = familyPath.getParent();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    Path tablePath = regionPath.getParent();<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    String linkName = createHFileLinkName(CommonFSUtils.getTableName(tablePath),<a name="line.529"></a>
+<span class="sourceLineNo">530</span>            regionPath.getName(), hfileName);<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    Path linkTableDir = CommonFSUtils.getTableDir(rootDir, linkTableName);<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    Path regionDir = HRegion.getRegionDir(linkTableDir, linkRegionName);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    return new Path(new Path(regionDir, familyPath.getName()), linkName);<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  public static Pair&lt;TableName, String&gt; parseBackReferenceName(String name) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int separatorIndex = name.indexOf('.');<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    String linkRegionName = name.substring(0, separatorIndex);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    String tableSubstr = name.substring(separatorIndex + 1)<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        .replace('=', TableName.NAMESPACE_DELIM);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    TableName linkTableName = TableName.valueOf(tableSubstr);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    return new Pair&lt;&gt;(linkTableName, linkRegionName);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>  /**<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * Get the full path of the HFile referenced by the back reference<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   *<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   * @param conf {@link Configuration} to read for the archive directory name<a name="line.548"></a>
+<span class="sourceLineNo">549</span>   * @param linkRefPath Link Back Reference path<a name="line.549"></a>
+<span class="sourceLineNo">550</span>   * @return full path of the referenced hfile<a name="line.550"></a>
+<span class="sourceLineNo">551</span>   * @throws IOException on unexpected error.<a name="line.551"></a>
+<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  public static Path getHFileFromBackReference(final Configuration conf, final Path linkRefPath)<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      throws IOException {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return getHFileFromBackReference(CommonFSUtils.getRootDir(conf), linkRefPath);<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>}<a name="line.558"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
index 6cc457d..76e2819 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
@@ -41,901 +41,907 @@
 <span class="sourceLineNo">033</span>import java.util.concurrent.Future;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.util.concurrent.TimeUnit;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.stream.Stream;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileSystem;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.Path;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.quotas.QuotaExceededException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.regionserver.RegionSplitRestriction;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.regionserver.StoreUtils;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.wal.WALSplitUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.slf4j.Logger;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.slf4j.LoggerFactory;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>/**<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * The procedure to split a region in a table.<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * Takes lock on the parent region.<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * It holds the lock for the life of the procedure.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * &lt;p&gt;Throws exception on construction if determines context hostile to spllt (cluster going<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * down or master is shutting down or table is disabled).&lt;/p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> */<a name="line.93"></a>
-<span class="sourceLineNo">094</span>@InterfaceAudience.Private<a name="line.94"></a>
-<span class="sourceLineNo">095</span>public class SplitTableRegionProcedure<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    extends AbstractStateMachineRegionProcedure&lt;SplitTableRegionState&gt; {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static final Logger LOG = LoggerFactory.getLogger(SplitTableRegionProcedure.class);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private RegionInfo daughterOneRI;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private RegionInfo daughterTwoRI;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private byte[] bestSplitRow;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private RegionSplitPolicy splitPolicy;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public SplitTableRegionProcedure() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    // Required by the Procedure framework to create the procedure on replay<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>  public SplitTableRegionProcedure(final MasterProcedureEnv env,<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      final RegionInfo regionToSplit, final byte[] splitRow) throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    super(env, regionToSplit);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    preflightChecks(env, true);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // When procedure goes to run in its prepare step, it also does these checkOnline checks. Here<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    // we fail-fast on construction. There it skips the split with just a warning.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    checkOnline(env, regionToSplit);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.bestSplitRow = splitRow;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    TableDescriptor tableDescriptor = env.getMasterServices().getTableDescriptors()<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      .get(getTableName());<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    Configuration conf = env.getMasterConfiguration();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    if (hasBestSplitRow()) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      // Apply the split restriction for the table to the user-specified split point<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      RegionSplitRestriction splitRestriction =<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        RegionSplitRestriction.create(tableDescriptor, conf);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      byte[] restrictedSplitRow = splitRestriction.getRestrictedSplitPoint(bestSplitRow);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      if (!Bytes.equals(bestSplitRow, restrictedSplitRow)) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        LOG.warn("The specified split point {} violates the split restriction of the table. "<a name="line.124"></a>
-<span class="sourceLineNo">125</span>            + "Using {} as a split point.", Bytes.toStringBinary(bestSplitRow),<a name="line.125"></a>
-<span class="sourceLineNo">126</span>          Bytes.toStringBinary(restrictedSplitRow));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        bestSplitRow = restrictedSplitRow;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    checkSplittable(env, regionToSplit);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    final TableName table = regionToSplit.getTable();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    final long rid = getDaughterRegionIdTimestamp(regionToSplit);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.daughterOneRI = RegionInfoBuilder.newBuilder(table)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        .setStartKey(regionToSplit.getStartKey())<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        .setEndKey(bestSplitRow)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        .setSplit(false)<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        .setRegionId(rid)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        .build();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    this.daughterTwoRI = RegionInfoBuilder.newBuilder(table)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        .setStartKey(bestSplitRow)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        .setEndKey(regionToSplit.getEndKey())<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        .setSplit(false)<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        .setRegionId(rid)<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        .build();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    if(tableDescriptor.getRegionSplitPolicyClassName() != null) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      // Since we don't have region reference here, creating the split policy instance without it.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      // This can be used to invoke methods which don't require Region reference. This instantiation<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // of a class on Master-side though it only makes sense on the RegionServer-side is<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      // for Phoenix Local Indexing. Refer HBASE-12583 for more information.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      Class&lt;? extends RegionSplitPolicy&gt; clazz =<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        RegionSplitPolicy.getSplitPolicyClass(tableDescriptor, conf);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      this.splitPolicy = ReflectionUtils.newInstance(clazz, conf);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>  @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    if (env.getProcedureScheduler().waitRegions(this, getTableName(), getParentRegion(),<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      daughterOneRI, daughterTwoRI)) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      try {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        LOG.debug(LockState.LOCK_EVENT_WAIT + " " + env.getProcedureScheduler().dumpLocks());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      } catch (IOException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        // Ignore, just for logging<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return LockState.LOCK_ACQUIRED;<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>  @Override<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  protected void releaseLock(final MasterProcedureEnv env) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    env.getProcedureScheduler().wakeRegions(this, getTableName(), getParentRegion(), daughterOneRI,<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      daughterTwoRI);<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>  public RegionInfo getDaughterOneRI() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return daughterOneRI;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public RegionInfo getDaughterTwoRI() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return daughterTwoRI;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private boolean hasBestSplitRow() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    return bestSplitRow != null &amp;&amp; bestSplitRow.length &gt; 0;<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>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Check whether the region is splittable<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param env MasterProcedureEnv<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param regionToSplit parent Region to be split<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private void checkSplittable(final MasterProcedureEnv env,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      final RegionInfo regionToSplit) throws IOException {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // Ask the remote RS if this region is splittable.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // If we get an IOE, report it along w/ the failure so can see why we are not splittable at<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // this time.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if(regionToSplit.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      throw new IllegalArgumentException("Can't invoke split on non-default regions directly");<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    RegionStateNode node =<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    IOException splittableCheckIOE = null;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    boolean splittable = false;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (node != null) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      try {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        GetRegionInfoResponse response;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (!hasBestSplitRow()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          LOG.info(<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            "{} splitKey isn't explicitly specified, will try to find a best split key from RS {}",<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            node.getRegionInfo().getRegionNameAsString(), node.getRegionLocation());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.212"></a>
-<span class="sourceLineNo">213</span>            node.getRegionInfo(), true);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          bestSplitRow =<a name="line.214"></a>
-<span class="sourceLineNo">215</span>            response.hasBestSplitRow() ? response.getBestSplitRow().toByteArray() : null;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        } else {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.217"></a>
-<span class="sourceLineNo">218</span>            node.getRegionInfo(), false);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        splittable = response.hasSplittable() &amp;&amp; response.getSplittable();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        if (LOG.isDebugEnabled()) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          LOG.debug("Splittable=" + splittable + " " + node.toShortString());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      } catch (IOException e) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        splittableCheckIOE = e;<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>    if (!splittable) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      IOException e =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        new DoNotRetryIOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      if (splittableCheckIOE != null) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        e.initCause(splittableCheckIOE);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      throw e;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (!hasBestSplitRow()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      throw new DoNotRetryIOException("Region not splittable because bestSplitPoint = null, " +<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        "maybe table is too small for auto split. For force split, try specifying split row");<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    if (Bytes.equals(regionToSplit.getStartKey(), bestSplitRow)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      throw new DoNotRetryIOException(<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        "Split row is equal to startkey: " + Bytes.toStringBinary(bestSplitRow));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (!regionToSplit.containsRow(bestSplitRow)) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      throw new DoNotRetryIOException("Split row is not inside region key range splitKey:" +<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        Bytes.toStringBinary(bestSplitRow) + " region: " + regionToSplit);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Calculate daughter regionid to use.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param hri Parent {@link RegionInfo}<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @return Daughter region id (timestamp) to use.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private static long getDaughterRegionIdTimestamp(final RegionInfo hri) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    long rid = EnvironmentEdgeManager.currentTime();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // Regionid is timestamp.  Can't be less than that of parent else will insert<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    // at wrong location in hbase:meta (See HBASE-710).<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    if (rid &lt; hri.getRegionId()) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      LOG.warn("Clock skew; parent regions id is " + hri.getRegionId() +<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        " but current time here is " + rid);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      rid = hri.getRegionId() + 1;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    return rid;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  private void removeNonDefaultReplicas(MasterProcedureEnv env) throws IOException {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    AssignmentManagerUtil.removeNonDefaultReplicas(env, Stream.of(getParentRegion()),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      getRegionReplication(env));<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private void checkClosedRegions(MasterProcedureEnv env) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // theoretically this should not happen any more after we use TRSP, but anyway let's add a check<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // here<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    AssignmentManagerUtil.checkClosedRegion(env, getParentRegion());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  protected Flow executeFromState(MasterProcedureEnv env, SplitTableRegionState state)<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      throws InterruptedException {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    LOG.trace("{} execute state={}", this, state);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      switch (state) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (prepareSplitRegion(env)) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            break;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>          } else {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            return Flow.NO_MORE_STATE;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          preSplitRegion(env);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CLOSE_PARENT_REGION);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          break;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          addChildProcedure(createUnassignProcedures(env));<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          break;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          checkClosedRegions(env);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          break;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          removeNonDefaultReplicas(env);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          createDaughterRegions(env);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          break;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          writeMaxSequenceIdFile(env);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          break;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          preSplitRegionBeforeMETA(env);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_UPDATE_META);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          break;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          updateMeta(env);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          break;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          preSplitRegionAfterMETA(env);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          break;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          addChildProcedure(createAssignProcedures(env));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_POST_OPERATION);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          break;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          postSplitRegion(env);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          return Flow.NO_MORE_STATE;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        default:<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      }<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } catch (IOException e) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      String msg = "Splitting " + getParentRegion().getEncodedName() + ", " + this;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!isRollbackSupported(state)) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // We reach a state that cannot be rolled back. We just need to keep retrying.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        LOG.warn(msg, e);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      } else {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        LOG.error(msg, e);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        setFailure("master-split-regions", e);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // if split fails,  need to call ((HRegion)parent).clearSplit() when it is a force split<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return Flow.HAS_MORE_STATE;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  /**<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * To rollback {@link SplitTableRegionProcedure}, an AssignProcedure is asynchronously<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   * submitted for parent region to be split (rollback doesn't wait on the completion of the<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   * AssignProcedure) . This can be improved by changing rollback() to support sub-procedures.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * See HBASE-19851 for details.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   */<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  protected void rollbackState(final MasterProcedureEnv env, final SplitTableRegionState state)<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throws IOException, InterruptedException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    LOG.trace("{} rollback state={}", this, state);<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    try {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      switch (state) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.367"></a>
-<span class="sourceLineNo">368</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          // PONR<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          break;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          deleteDaughterRegions(env);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          break;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          // Doing nothing, in SPLIT_TABLE_REGION_CLOSE_PARENT_REGION,<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          // we will bring parent region online<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          break;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          openParentRegion(env);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          break;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          postRollBackSplitRegion(env);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          break;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          break; // nothing to do<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        default:<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    } catch (IOException e) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      // This will be retried. Unless there is a bug in the code,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      // this should be just a "temporary error" (e.g. network down)<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      LOG.warn("pid=" + getProcId() + " failed rollback attempt step " + state +<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          " for splitting the region "<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        + getParentRegion().getEncodedName() + " in table " + getTableName(), e);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      throw e;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  /*<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * Check whether we are in the state that can be rollback<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  @Override<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  protected boolean isRollbackSupported(final SplitTableRegionState state) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    switch (state) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        // It is not safe to rollback if we reach to these states.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        return false;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      default:<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        break;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return true;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  protected SplitTableRegionState getState(final int stateId) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    return SplitTableRegionState.forNumber(stateId);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  protected int getStateId(final SplitTableRegionState state) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return state.getNumber();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  @Override<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected SplitTableRegionState getInitialState() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    return SplitTableRegionState.SPLIT_TABLE_REGION_PREPARE;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    super.serializeStateData(serializer);<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>    final MasterProcedureProtos.SplitTableRegionStateData.Builder splitTableRegionMsg =<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        MasterProcedureProtos.SplitTableRegionStateData.newBuilder()<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        .setParentRegionInfo(ProtobufUtil.toRegionInfo(getRegion()))<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterOneRI))<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterTwoRI));<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    serializer.serialize(splitTableRegionMsg.build());<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>  @Override<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      throws IOException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    super.deserializeStateData(serializer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    final MasterProcedureProtos.SplitTableRegionStateData splitTableRegionsMsg =<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        serializer.deserialize(MasterProcedureProtos.SplitTableRegionStateData.class);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    setUser(MasterProcedureUtil.toUserInfo(splitTableRegionsMsg.getUserInfo()));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    setRegion(ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getParentRegionInfo()));<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    assert(splitTableRegionsMsg.getChildRegionInfoCount() == 2);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    daughterOneRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(0));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    daughterTwoRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(1));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  public void toStringClassDetails(StringBuilder sb) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    sb.append(getClass().getSimpleName());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    sb.append(" table=");<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    sb.append(getTableName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    sb.append(", parent=");<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    sb.append(getParentRegion().getShortNameToLog());<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    sb.append(", daughterA=");<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    sb.append(daughterOneRI.getShortNameToLog());<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    sb.append(", daughterB=");<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    sb.append(daughterTwoRI.getShortNameToLog());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private RegionInfo getParentRegion() {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    return getRegion();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>  @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  public TableOperationType getTableOperationType() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return TableOperationType.REGION_SPLIT;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  @Override<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    return env.getAssignmentManager().getAssignmentManagerMetrics().getSplitProcMetrics();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  private byte[] getSplitRow() {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    return daughterTwoRI.getStartKey();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  private static final State[] EXPECTED_SPLIT_STATES = new State[] { State.OPEN, State.CLOSED };<a name="line.495"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileSystem;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.Path;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HConstants;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerName;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.quotas.QuotaExceededException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.regionserver.RegionSplitRestriction;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.regionserver.StoreUtils;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.wal.WALSplitUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.slf4j.Logger;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.slf4j.LoggerFactory;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>/**<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * The procedure to split a region in a table.<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * Takes lock on the parent region.<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * It holds the lock for the life of the procedure.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * &lt;p&gt;Throws exception on construction if determines context hostile to spllt (cluster going<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * down or master is shutting down or table is disabled).&lt;/p&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>@InterfaceAudience.Private<a name="line.95"></a>
+<span class="sourceLineNo">096</span>public class SplitTableRegionProcedure<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    extends AbstractStateMachineRegionProcedure&lt;SplitTableRegionState&gt; {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static final Logger LOG = LoggerFactory.getLogger(SplitTableRegionProcedure.class);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private RegionInfo daughterOneRI;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private RegionInfo daughterTwoRI;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private byte[] bestSplitRow;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private RegionSplitPolicy splitPolicy;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public SplitTableRegionProcedure() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    // Required by the Procedure framework to create the procedure on replay<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>  public SplitTableRegionProcedure(final MasterProcedureEnv env,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      final RegionInfo regionToSplit, final byte[] splitRow) throws IOException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    super(env, regionToSplit);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    preflightChecks(env, true);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    // When procedure goes to run in its prepare step, it also does these checkOnline checks. Here<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    // we fail-fast on construction. There it skips the split with just a warning.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    checkOnline(env, regionToSplit);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.bestSplitRow = splitRow;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    TableDescriptor tableDescriptor = env.getMasterServices().getTableDescriptors()<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      .get(getTableName());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    Configuration conf = env.getMasterConfiguration();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (hasBestSplitRow()) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      // Apply the split restriction for the table to the user-specified split point<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      RegionSplitRestriction splitRestriction =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        RegionSplitRestriction.create(tableDescriptor, conf);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      byte[] restrictedSplitRow = splitRestriction.getRestrictedSplitPoint(bestSplitRow);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      if (!Bytes.equals(bestSplitRow, restrictedSplitRow)) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        LOG.warn("The specified split point {} violates the split restriction of the table. "<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            + "Using {} as a split point.", Bytes.toStringBinary(bestSplitRow),<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          Bytes.toStringBinary(restrictedSplitRow));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        bestSplitRow = restrictedSplitRow;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    checkSplittable(env, regionToSplit);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    final TableName table = regionToSplit.getTable();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    final long rid = getDaughterRegionIdTimestamp(regionToSplit);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.daughterOneRI = RegionInfoBuilder.newBuilder(table)<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        .setStartKey(regionToSplit.getStartKey())<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        .setEndKey(bestSplitRow)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        .setSplit(false)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        .setRegionId(rid)<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        .build();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    this.daughterTwoRI = RegionInfoBuilder.newBuilder(table)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        .setStartKey(bestSplitRow)<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        .setEndKey(regionToSplit.getEndKey())<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        .setSplit(false)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        .setRegionId(rid)<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        .build();<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    if (tableDescriptor.getRegionSplitPolicyClassName() != null) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      // Since we don't have region reference here, creating the split policy instance without it.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      // This can be used to invoke methods which don't require Region reference. This instantiation<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      // of a class on Master-side though it only makes sense on the RegionServer-side is<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      // for Phoenix Local Indexing. Refer HBASE-12583 for more information.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      Class&lt;? extends RegionSplitPolicy&gt; clazz =<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          RegionSplitPolicy.getSplitPolicyClass(tableDescriptor, conf);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      this.splitPolicy = ReflectionUtils.newInstance(clazz, conf);<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>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (env.getProcedureScheduler().waitRegions(this, getTableName(), getParentRegion(),<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      daughterOneRI, daughterTwoRI)) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      try {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        LOG.debug(LockState.LOCK_EVENT_WAIT + " " + env.getProcedureScheduler().dumpLocks());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      } catch (IOException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        // Ignore, just for logging<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return LockState.LOCK_ACQUIRED;<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>  @Override<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  protected void releaseLock(final MasterProcedureEnv env) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    env.getProcedureScheduler().wakeRegions(this, getTableName(), getParentRegion(), daughterOneRI,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      daughterTwoRI);<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>  public RegionInfo getDaughterOneRI() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return daughterOneRI;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  public RegionInfo getDaughterTwoRI() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return daughterTwoRI;<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 boolean hasBestSplitRow() {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return bestSplitRow != null &amp;&amp; bestSplitRow.length &gt; 0;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * Check whether the region is splittable<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param env MasterProcedureEnv<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param regionToSplit parent Region to be split<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  private void checkSplittable(final MasterProcedureEnv env,<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      final RegionInfo regionToSplit) throws IOException {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // Ask the remote RS if this region is splittable.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // If we get an IOE, report it along w/ the failure so can see why we are not splittable at<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // this time.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if(regionToSplit.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw new IllegalArgumentException("Can't invoke split on non-default regions directly");<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    RegionStateNode node =<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    IOException splittableCheckIOE = null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    boolean splittable = false;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (node != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      try {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        GetRegionInfoResponse response;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (!hasBestSplitRow()) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          LOG.info(<a name="line.211"></a>
+<span class="sourceLineNo">212</span>            "{} splitKey isn't explicitly specified, will try to find a best split key from RS {}",<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            node.getRegionInfo().getRegionNameAsString(), node.getRegionLocation());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.214"></a>
+<span class="sourceLineNo">215</span>            node.getRegionInfo(), true);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          bestSplitRow =<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            response.hasBestSplitRow() ? response.getBestSplitRow().toByteArray() : null;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        } else {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            node.getRegionInfo(), false);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        splittable = response.hasSplittable() &amp;&amp; response.getSplittable();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        if (LOG.isDebugEnabled()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          LOG.debug("Splittable=" + splittable + " " + node.toShortString());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      } catch (IOException e) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        splittableCheckIOE = e;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (!splittable) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      IOException e =<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        new DoNotRetryIOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      if (splittableCheckIOE != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        e.initCause(splittableCheckIOE);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      throw e;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    if (!hasBestSplitRow()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      throw new DoNotRetryIOException("Region not splittable because bestSplitPoint = null, " +<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        "maybe table is too small for auto split. For force split, try specifying split row");<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 (Bytes.equals(regionToSplit.getStartKey(), bestSplitRow)) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throw new DoNotRetryIOException(<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        "Split row is equal to startkey: " + Bytes.toStringBinary(bestSplitRow));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (!regionToSplit.containsRow(bestSplitRow)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      throw new DoNotRetryIOException("Split row is not inside region key range splitKey:" +<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        Bytes.toStringBinary(bestSplitRow) + " region: " + regionToSplit);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * Calculate daughter regionid to use.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * @param hri Parent {@link RegionInfo}<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @return Daughter region id (timestamp) to use.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private static long getDaughterRegionIdTimestamp(final RegionInfo hri) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    long rid = EnvironmentEdgeManager.currentTime();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // Regionid is timestamp.  Can't be less than that of parent else will insert<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    // at wrong location in hbase:meta (See HBASE-710).<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    if (rid &lt; hri.getRegionId()) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      LOG.warn("Clock skew; parent regions id is " + hri.getRegionId() +<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        " but current time here is " + rid);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      rid = hri.getRegionId() + 1;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return rid;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private void removeNonDefaultReplicas(MasterProcedureEnv env) throws IOException {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    AssignmentManagerUtil.removeNonDefaultReplicas(env, Stream.of(getParentRegion()),<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      getRegionReplication(env));<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private void checkClosedRegions(MasterProcedureEnv env) throws IOException {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // theoretically this should not happen any more after we use TRSP, but anyway let's add a check<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // here<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    AssignmentManagerUtil.checkClosedRegion(env, getParentRegion());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @Override<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  protected Flow executeFromState(MasterProcedureEnv env, SplitTableRegionState state)<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      throws InterruptedException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    LOG.trace("{} execute state={}", this, state);<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    try {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      switch (state) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          if (prepareSplitRegion(env)) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>            break;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          } else {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            return Flow.NO_MORE_STATE;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>          }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          preSplitRegion(env);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CLOSE_PARENT_REGION);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          break;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.302"></a>
+<span class="sourceLineNo">303</span>          addChildProcedure(createUnassignProcedures(env));<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          break;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          checkClosedRegions(env);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          break;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          removeNonDefaultReplicas(env);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          createDaughterRegions(env);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          break;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          writeMaxSequenceIdFile(env);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          break;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          preSplitRegionBeforeMETA(env);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_UPDATE_META);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          break;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          updateMeta(env);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          break;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          preSplitRegionAfterMETA(env);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          break;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          addChildProcedure(createAssignProcedures(env));<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_POST_OPERATION);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          break;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          postSplitRegion(env);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          return Flow.NO_MORE_STATE;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        default:<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    } catch (IOException e) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      String msg = "Splitting " + getParentRegion().getEncodedName() + ", " + this;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      if (!isRollbackSupported(state)) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        // We reach a state that cannot be rolled back. We just need to keep retrying.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        LOG.warn(msg, e);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      } else {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        LOG.error(msg, e);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        setFailure("master-split-regions", e);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // if split fails,  need to call ((HRegion)parent).clearSplit() when it is a force split<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return Flow.HAS_MORE_STATE;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * To rollback {@link SplitTableRegionProcedure}, an AssignProcedure is asynchronously<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * submitted for parent region to be split (rollback doesn't wait on the completion of the<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * AssignProcedure) . This can be improved by changing rollback() to support sub-procedures.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * See HBASE-19851 for details.<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>  protected void rollbackState(final MasterProcedureEnv env, final SplitTableRegionState state)<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      throws IOException, InterruptedException {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    LOG.trace("{} rollback state={}", this, state);<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      switch (state) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          // PONR<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          break;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          deleteDaughterRegions(env);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          break;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          // Doing nothing, in SPLIT_TABLE_REGION_CLOSE_PARENT_REGION,<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          // we will bring parent region online<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          break;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          openParentRegion(env);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          break;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          postRollBackSplitRegion(env);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          break;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          break; // nothing to do<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        default:<a name="line.392"></a>
+<span class="sourceLineNo">393</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    } catch (IOException e) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      // This will be retried. Unless there is a bug in the code,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      // this should be just a "temporary error" (e.g. network down)<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      LOG.warn("pid=" + getProcId() + " failed rollback attempt step " + state +<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          " for splitting the region "<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        + getParentRegion().getEncodedName() + " in table " + getTableName(), e);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      throw e;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  /*<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Check whether we are in the state that can be rollback<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  @Override<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  protected boolean isRollbackSupported(final SplitTableRegionState state) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    switch (state) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        // It is not safe to rollback if we reach to these states.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        return false;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      default:<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        break;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    return true;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  protected SplitTableRegionState getState(final int stateId) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    return SplitTableRegionState.forNumber(stateId);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>  @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  protected int getStateId(final SplitTableRegionState state) {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return state.getNumber();<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  @Override<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  protected SplitTableRegionState getInitialState() {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    return SplitTableRegionState.SPLIT_TABLE_REGION_PREPARE;<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>  @Override<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      throws IOException {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    super.serializeStateData(serializer);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    final MasterProcedureProtos.SplitTableRegionStateData.Builder splitTableRegionMsg =<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        MasterProcedureProtos.SplitTableRegionStateData.newBuilder()<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        .setParentRegionInfo(ProtobufUtil.toRegionInfo(getRegion()))<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterOneRI))<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterTwoRI));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    serializer.serialize(splitTableRegionMsg.build());<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>  @Override<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      throws IOException {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    super.deserializeStateData(serializer);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>    final MasterProcedureProtos.SplitTableRegionStateData splitTableRegionsMsg =<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        serializer.deserialize(MasterProcedureProtos.SplitTableRegionStateData.class);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    setUser(MasterProcedureUtil.toUserInfo(splitTableRegionsMsg.getUserInfo()));<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    setRegion(ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getParentRegionInfo()));<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    assert(splitTableRegionsMsg.getChildRegionInfoCount() == 2);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    daughterOneRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(0));<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    daughterTwoRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(1));<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  @Override<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  public void toStringClassDetails(StringBuilder sb) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    sb.append(getClass().getSimpleName());<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    sb.append(" table=");<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    sb.append(getTableName());<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    sb.append(", parent=");<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    sb.append(getParentRegion().getShortNameToLog());<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    sb.append(", daughterA=");<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    sb.append(daughterOneRI.getShortNameToLog());<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    sb.append(", daughterB=");<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    sb.append(daughterTwoRI.getShortNameToLog());<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private RegionInfo getParentRegion() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return getRegion();<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  @Override<a name="line.483"></a>
+<span class="sourceLineNo">484</span>  public TableOperationType getTableOperationType() {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    return TableOperationType.REGION_SPLIT;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  @Override<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    return env.getAssignmentManager().getAssignmentManagerMetrics().getSplitProcMetrics();<a name="line.490"></a>
+<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span>  private byte[] getSplitRow() {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return daughterTwoRI.getStartKey();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
 <span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * Prepare to Split region.<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * @param env MasterProcedureEnv<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   */<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  public boolean prepareSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Fail if we are taking snapshot for the given table<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    if (env.getMasterServices().getSnapshotManager()<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      .isTakingSnapshot(getParentRegion().getTable())) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      setFailure(new IOException("Skip splitting region " + getParentRegion().getShortNameToLog() +<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        ", because we are taking snapshot for the table " + getParentRegion().getTable()));<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      return false;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // Check whether the region is splittable<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RegionStateNode node =<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>    if (node == null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      throw new UnknownRegionException(getParentRegion().getRegionNameAsString());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    RegionInfo parentHRI = node.getRegionInfo();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    if (parentHRI == null) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      LOG.info("Unsplittable; parent region is null; node={}", node);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return false;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    // Lookup the parent HRI state from the AM, which has the latest updated info.<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Protect against the case where concurrent SPLIT requests came in and succeeded<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    // just before us.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (node.isInState(State.SPLIT)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      LOG.info("Split of " + parentHRI + " skipped; state is already SPLIT");<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return false;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    if (parentHRI.isSplit() || parentHRI.isOffline()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      LOG.info("Split of " + parentHRI + " skipped because offline/split.");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      return false;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>    // expected parent to be online or closed<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    if (!node.isInState(EXPECTED_SPLIT_STATES)) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      // We may have SPLIT already?<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      setFailure(new IOException("Split " + parentHRI.getRegionNameAsString() +<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          " FAILED because state=" + node.getState() + "; expected " +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          Arrays.toString(EXPECTED_SPLIT_STATES)));<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return false;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    // Mostly this check is not used because we already check the switch before submit a split<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    // procedure. Just for safe, check the switch again. This procedure can be rollbacked if<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    // the switch was set to false after submit.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    if (!env.getMasterServices().isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      LOG.warn("pid=" + getProcId() + " split switch is off! skip split of " + parentHRI);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString() +<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          " failed due to split switch off"));<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return false;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    if (!env.getMasterServices().getTableDescriptors().get(getTableName()).isSplitEnabled()) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      LOG.warn("pid={}, split is disabled for the table! Skipping split of {}", getProcId(),<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        parentHRI);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString()<a name="line.556"></a>
-<span class="sourceLineNo">557</span>          + " failed as region split is disabled for the table"));<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      return false;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // set node state as SPLITTING<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    node.setState(State.SPLITTING);<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    // Since we have the lock and the master is coordinating the operation<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    // we are always able to split the region<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return true;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * Action before splitting region in a table.<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @param env MasterProcedureEnv<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  private void preSplitRegion(final MasterProcedureEnv env)<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      throws IOException, InterruptedException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    if (cpHost != null) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      cpHost.preSplitRegionAction(getTableName(), getSplitRow(), getUser());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>    // TODO: Clean up split and merge. Currently all over the place.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    // Notify QuotaManager and RegionNormalizer<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    try {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      env.getMasterServices().getMasterQuotaManager().onRegionSplit(this.getParentRegion());<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    } catch (QuotaExceededException e) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      // TODO: why is this here? split requests can be submitted by actors other than the normalizer<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      env.getMasterServices()<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        .getRegionNormalizerManager()<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        .planSkipped(NormalizationPlan.PlanType.SPLIT);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      throw e;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * Action after rollback a split table region action.<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param env MasterProcedureEnv<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   */<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  private void postRollBackSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    if (cpHost != null) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      cpHost.postRollBackSplitRegionAction(getUser());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>  /**<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * Rollback close parent region<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   */<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  private void openParentRegion(MasterProcedureEnv env) throws IOException {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    AssignmentManagerUtil.reopenRegionsForRollback(env,<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      Collections.singletonList((getParentRegion())), getRegionReplication(env),<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      getParentRegionServerName(env));<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Create daughter regions<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public void createDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    final FileSystem fs = mfs.getFileSystem();<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      env.getMasterConfiguration(), fs, tabledir, getParentRegion(), false);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    regionFs.createSplitsDir(daughterOneRI, daughterTwoRI);<a name="line.623"></a>
+<span class="sourceLineNo">497</span>  private static final State[] EXPECTED_SPLIT_STATES = new State[] { State.OPEN, State.CLOSED };<a name="line.497"></a>
+<span class="sourceLineNo">498</span><a name="line.498"></a>
+<span class="sourceLineNo">499</span>  /**<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * Prepare to Split region.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * @param env MasterProcedureEnv<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   */<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  public boolean prepareSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    // Fail if we are taking snapshot for the given table<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    if (env.getMasterServices().getSnapshotManager()<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      .isTakingSnapshot(getParentRegion().getTable())) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      setFailure(new IOException("Skip splitting region " + getParentRegion().getShortNameToLog() +<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        ", because we are taking snapshot for the table " + getParentRegion().getTable()));<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      return false;<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // Check whether the region is splittable<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    RegionStateNode node =<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (node == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throw new UnknownRegionException(getParentRegion().getRegionNameAsString());<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>    RegionInfo parentHRI = node.getRegionInfo();<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    if (parentHRI == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Unsplittable; parent region is null; node={}", node);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return false;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // Lookup the parent HRI state from the AM, which has the latest updated info.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    // Protect against the case where concurrent SPLIT requests came in and succeeded<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    // just before us.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    if (node.isInState(State.SPLIT)) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      LOG.info("Split of " + parentHRI + " skipped; state is already SPLIT");<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (parentHRI.isSplit() || parentHRI.isOffline()) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("Split of " + parentHRI + " skipped because offline/split.");<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    // expected parent to be online or closed<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (!node.isInState(EXPECTED_SPLIT_STATES)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      // We may have SPLIT already?<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      setFailure(new IOException("Split " + parentHRI.getRegionNameAsString() +<a name="line.539"></a>
+<span class="sourceLineNo">540</span>          " FAILED because state=" + node.getState() + "; expected " +<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          Arrays.toString(EXPECTED_SPLIT_STATES)));<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      return false;<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>    // Mostly this check is not used because we already check the switch before submit a split<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    // procedure. Just for safe, check the switch again. This procedure can be rollbacked if<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    // the switch was set to false after submit.<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    if (!env.getMasterServices().isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      LOG.warn("pid=" + getProcId() + " split switch is off! skip split of " + parentHRI);<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString() +<a name="line.550"></a>
+<span class="sourceLineNo">551</span>          " failed due to split switch off"));<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      return false;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    if (!env.getMasterServices().getTableDescriptors().get(getTableName()).isSplitEnabled()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      LOG.warn("pid={}, split is disabled for the table! Skipping split of {}", getProcId(),<a name="line.556"></a>
+<span class="sourceLineNo">557</span>        parentHRI);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString()<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          + " failed as region split is disabled for the table"));<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      return false;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    // set node state as SPLITTING<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    node.setState(State.SPLITTING);<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>    // Since we have the lock and the master is coordinating the operation<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // we are always able to split the region<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    return true;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>  /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * Action before splitting region in a table.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   * @param env MasterProcedureEnv<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
+<span class="sourceLineNo">575</span>  private void preSplitRegion(final MasterProcedureEnv env)<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      throws IOException, InterruptedException {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    if (cpHost != null) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      cpHost.preSplitRegionAction(getTableName(), getSplitRow(), getUser());<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>    // TODO: Clean up split and merge. Currently all over the place.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    // Notify QuotaManager and RegionNormalizer<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    try {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      env.getMasterServices().getMasterQuotaManager().onRegionSplit(this.getParentRegion());<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    } catch (QuotaExceededException e) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      // TODO: why is this here? split requests can be submitted by actors other than the normalizer<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      env.getMasterServices()<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        .getRegionNormalizerManager()<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        .planSkipped(NormalizationPlan.PlanType.SPLIT);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      throw e;<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   * Action after rollback a split table region action.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>   * @param env MasterProcedureEnv<a name="line.597"></a>
+<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
+<span class="sourceLineNo">599</span>  private void postRollBackSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    if (cpHost != null) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cpHost.postRollBackSplitRegionAction(getUser());<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * Rollback close parent region<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   */<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  private void openParentRegion(MasterProcedureEnv env) throws IOException {<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    AssignmentManagerUtil.reopenRegionsForRollback(env,<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      Collections.singletonList((getParentRegion())), getRegionReplication(env),<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      getParentRegionServerName(env));<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  /**<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   * Create daughter regions<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  public void createDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    final FileSystem fs = mfs.getFileSystem();<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      env.getMasterConfiguration(), fs, tabledir, getParentRegion(), false);<a name="line.623"></a>
 <span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>    Pair&lt;Integer, Integer&gt; expectedReferences = splitStoreFiles(env, regionFs);<a name="line.625"></a>
+<span class="sourceLineNo">625</span>    regionFs.createSplitsDir(daughterOneRI, daughterTwoRI);<a name="line.625"></a>
 <span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>    assertReferenceFileCount(fs, expectedReferences.getFirst(),<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      regionFs.getSplitsDir(daughterOneRI));<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    regionFs.commitDaughterRegion(daughterOneRI);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    assertReferenceFileCount(fs, expectedReferences.getFirst(),<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      new Path(tabledir, daughterOneRI.getEncodedName()));<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    assertReferenceFileCount(fs, expectedReferences.getSecond(),<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      regionFs.getSplitsDir(daughterTwoRI));<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    regionFs.commitDaughterRegion(daughterTwoRI);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    assertReferenceFileCount(fs, expectedReferences.getSecond(),<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      new Path(tabledir, daughterTwoRI.getEncodedName()));<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  private void deleteDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    HRegionFileSystem.deleteRegionFromFileSystem(env.getMasterConfiguration(),<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      mfs.getFileSystem(), tabledir, daughterOneRI);<a name="line.644"></a>
+<span class="sourceLineNo">627</span>    Pair&lt;Integer, Integer&gt; expectedReferences = splitStoreFiles(env, regionFs);<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>    assertSplitResultFilesCount(fs, expectedReferences.getFirst(),<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      regionFs.getSplitsDir(daughterOneRI));<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    regionFs.commitDaughterRegion(daughterOneRI);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    assertSplitResultFilesCount(fs, expectedReferences.getFirst(),<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      new Path(tabledir, daughterOneRI.getEncodedName()));<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>    assertSplitResultFilesCount(fs, expectedReferences.getSecond(),<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      regionFs.getSplitsDir(daughterTwoRI));<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    regionFs.commitDaughterRegion(daughterTwoRI);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    assertSplitResultFilesCount(fs, expectedReferences.getSecond(),<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      new Path(tabledir, daughterTwoRI.getEncodedName()));<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>  private void deleteDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.644"></a>
 <span class="sourceLineNo">645</span>    HRegionFileSystem.deleteRegionFromFileSystem(env.getMasterConfiguration(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      mfs.getFileSystem(), tabledir, daughterTwoRI);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>  }<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span>  /**<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * Create Split directory<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   * @param env MasterProcedureEnv<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   */<a name="line.652"></a>
-<span class="sourceLineNo">653</span>  private Pair&lt;Integer, Integer&gt; splitStoreFiles(final MasterProcedureEnv env,<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      final HRegionFileSystem regionFs) throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    final Configuration conf = env.getMasterConfiguration();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // The following code sets up a thread pool executor with as many slots as<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    // there's files to split. It then fires up everything, waits for<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    // completion and finally checks for any exception<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    //<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    // Note: From HBASE-26187, splitStoreFiles now creates daughter region dirs straight under the<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    // table dir. In case of failure, the proc would go through this again, already existing<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    // region dirs and split files would just be ignored, new split files should get created.<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    int nbFiles = 0;<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    final Map&lt;String, Collection&lt;StoreFileInfo&gt;&gt; files =<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        new HashMap&lt;String, Collection&lt;StoreFileInfo&gt;&gt;(htd.getColumnFamilyCount());<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    for (ColumnFamilyDescriptor cfd : htd.getColumnFamilies()) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      String family = cfd.getNameAsString();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      Collection&lt;StoreFileInfo&gt; sfis = regionFs.getStoreFiles(family);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (sfis == null) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        continue;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      Collection&lt;StoreFileInfo&gt; filteredSfis = null;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      for (StoreFileInfo sfi : sfis) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        // Filter. There is a lag cleaning up compacted reference files. They get cleared<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        // after a delay in case outstanding Scanners still have references. Because of this,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        // the listing of the Store content may have straggler reference files. Skip these.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        // It should be safe to skip references at this point because we checked above with<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        // the region if it thinks it is splittable and if we are here, it thinks it is<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // splitable.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        if (sfi.isReference()) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          LOG.info("Skipping split of " + sfi + "; presuming ready for archiving.");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          continue;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        if (filteredSfis == null) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          filteredSfis = new ArrayList&lt;StoreFileInfo&gt;(sfis.size());<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          files.put(family, filteredSfis);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        filteredSfis.add(sfi);<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        nbFiles++;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    if (nbFiles == 0) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      // no file needs to be splitted.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      return new Pair&lt;Integer, Integer&gt;(0, 0);<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    }<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    // Max #threads is the smaller of the number of storefiles or the default max determined above.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    int maxThreads = Math.min(<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      conf.getInt(HConstants.REGION_SPLIT_THREADS_MAX,<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        conf.getInt(HStore.BLOCKING_STOREFILES_KEY, HStore.DEFAULT_BLOCKING_STOREFILE_COUNT)),<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      nbFiles);<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    LOG.info("pid=" + getProcId() + " splitting " + nbFiles + " storefiles, region=" +<a name="line.702"></a>
-<span class="sourceLineNo">703</span>        getParentRegion().getShortNameToLog() + ", threads=" + maxThreads);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    final ExecutorService threadPool = Executors.newFixedThreadPool(maxThreads,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      new ThreadFactoryBuilder().setNameFormat("StoreFileSplitter-pool-%d").setDaemon(true)<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        .setUncaughtExceptionHandler(Threads.LOGGING_EXCEPTION_HANDLER).build());<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    final List&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt; futures = new ArrayList&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt;(nbFiles);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    // Split each store file.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    for (Map.Entry&lt;String, Collection&lt;StoreFileInfo&gt;&gt; e : files.entrySet()) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      byte[] familyName = Bytes.toBytes(e.getKey());<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      final ColumnFamilyDescriptor hcd = htd.getColumnFamily(familyName);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      final Collection&lt;StoreFileInfo&gt; storeFiles = e.getValue();<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      if (storeFiles != null &amp;&amp; storeFiles.size() &gt; 0) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        final Configuration storeConfiguration =<a name="line.715"></a>
-<span class="sourceLineNo">716</span>          StoreUtils.createStoreConfiguration(env.getMasterConfiguration(), htd, hcd);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        for (StoreFileInfo storeFileInfo : storeFiles) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          // As this procedure is running on master, use CacheConfig.DISABLED means<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          // don't cache any block.<a name="line.719"></a>
-<span class="sourceLineNo">720</span>          // We also need to pass through a suitable CompoundConfiguration as if this<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          // is running in a regionserver's Store context, or we might not be able<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          // to read the hfiles.<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          storeFileInfo.setConf(storeConfiguration);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          StoreFileSplitter sfs = new StoreFileSplitter(regionFs, familyName,<a name="line.724"></a>
-<span class="sourceLineNo">725</span>            new HStoreFile(storeFileInfo, hcd.getBloomFilterType(), CacheConfig.DISABLED));<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          futures.add(threadPool.submit(sfs));<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Shutdown the pool<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    threadPool.shutdown();<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>    // Wait for all the tasks to finish.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // When splits ran on the RegionServer, how-long-to-wait-configuration was named<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // hbase.regionserver.fileSplitTimeout. If set, use its value.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    long fileSplitTimeout = conf.getLong("hbase.master.fileSplitTimeout",<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      conf.getLong("hbase.regionserver.fileSplitTimeout", 600000));<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    try {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      boolean stillRunning = !threadPool.awaitTermination(fileSplitTimeout, TimeUnit.MILLISECONDS);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (stillRunning) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        threadPool.shutdownNow();<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        // wait for the thread to shutdown completely.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        while (!threadPool.isTerminated()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>          Thread.sleep(50);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        }<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        throw new IOException(<a name="line.746"></a>
-<span class="sourceLineNo">747</span>            "Took too long to split the" + " files and create the references, aborting split");<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    } catch (InterruptedException e) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    }<a name="line.751"></a>
-<span class="sourceLineNo">752</span><a name="line.752"></a>
-<span class="sourceLineNo">753</span>    int daughterA = 0;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    int daughterB = 0;<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    // Look for any exception<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    for (Future&lt;Pair&lt;Path, Path&gt;&gt; future : futures) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      try {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>        Pair&lt;Path, Path&gt; p = future.get();<a name="line.758"></a>
-<span class="sourceLineNo">759</span>        daughterA += p.getFirst() != null ? 1 : 0;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        daughterB += p.getSecond() != null ? 1 : 0;<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      } catch (InterruptedException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>        throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      } catch (ExecutionException e) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>        throw new IOException(e);<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span>    if (LOG.isDebugEnabled()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      LOG.debug("pid=" + getProcId() + " split storefiles for region " +<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          getParentRegion().getShortNameToLog() + " Daughter A: " + daughterA +<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          " storefiles, Daughter B: " + daughterB + " storefiles.");<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    return new Pair&lt;Integer, Integer&gt;(daughterA, daughterB);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>  }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>  private void assertReferenceFileCount(final FileSystem fs, final int expectedReferenceFileCount,<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      final Path dir) throws IOException {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    if (expectedReferenceFileCount != 0 &amp;&amp;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        expectedReferenceFileCount != FSUtils.getRegionReferenceFileCount(fs, dir)) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      throw new IOException("Failing split. Expected reference file count isn't equal.");<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  private Pair&lt;Path, Path&gt; splitStoreFile(HRegionFileSystem regionFs, byte[] family, HStoreFile sf)<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    throws IOException {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    if (LOG.isDebugEnabled()) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      LOG.debug("pid=" + getProcId() + " splitting started for store file: " +<a name="line.787"></a>
-<span class="sourceLineNo">788</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span><a name="line.790"></a>
-<span class="sourceLineNo">791</span>    final byte[] splitRow = getSplitRow();<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    final String familyName = Bytes.toString(family);<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    final Path path_first = regionFs.splitStoreFile(this.daughterOneRI, familyName, sf, splitRow,<a name="line.793"></a>
-<span class="sourceLineNo">794</span>        false, splitPolicy);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    final Path path_second = regionFs.splitStoreFile(this.daughterTwoRI, familyName, sf, splitRow,<a name="line.795"></a>
-<span class="sourceLineNo">796</span>       true, splitPolicy);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    if (LOG.isDebugEnabled()) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      LOG.debug("pid=" + getProcId() + " splitting complete for store file: " +<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    return new Pair&lt;Path,Path&gt;(path_first, path_second);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Utility class used to do the file splitting / reference writing<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * in parallel instead of sequentially.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   */<a name="line.807"></a>
-<span class="sourceLineNo">808</span>  private class StoreFileSplitter implements Callable&lt;Pair&lt;Path,Path&gt;&gt; {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    private final HRegionFileSystem regionFs;<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    private final byte[] family;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    private final HStoreFile sf;<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    /**<a name="line.813"></a>
-<span class="sourceLineNo">814</span>     * Constructor that takes what it needs to split<a name="line.814"></a>
-<span class="sourceLineNo">815</span>     * @param regionFs the file system<a name="line.815"></a>
-<span class="sourceLineNo">816</span>     * @param family Family that contains the store file<a name="line.816"></a>
-<span class="sourceLineNo">817</span>     * @param sf which file<a name="line.817"></a>
-<span class="sourceLineNo">818</span>     */<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    public StoreFileSplitter(HRegionFileSystem regionFs, byte[] family, HStoreFile sf) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      this.regionFs = regionFs;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      this.sf = sf;<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      this.family = family;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>    @Override<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    public Pair&lt;Path,Path&gt; call() throws IOException {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      return splitStoreFile(regionFs, family, sf);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    }<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
+<span class="sourceLineNo">646</span>      mfs.getFileSystem(), tabledir, daughterOneRI);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    HRegionFileSystem.deleteRegionFromFileSystem(env.getMasterConfiguration(),<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      mfs.getFileSystem(), tabledir, daughterTwoRI);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * Create Split directory<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param env MasterProcedureEnv<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   */<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  private Pair&lt;Integer, Integer&gt; splitStoreFiles(final MasterProcedureEnv env,<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      final HRegionFileSystem regionFs) throws IOException {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    final Configuration conf = env.getMasterConfiguration();<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    // The following code sets up a thread pool executor with as many slots as<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    // there's files to split. It then fires up everything, waits for<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    // completion and finally checks for any exception<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    //<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    // Note: From HBASE-26187, splitStoreFiles now creates daughter region dirs straight under the<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    // table dir. In case of failure, the proc would go through this again, already existing<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    // region dirs and split files would just be ignored, new split files should get created.<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    int nbFiles = 0;<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    final Map&lt;String, Collection&lt;StoreFileInfo&gt;&gt; files =<a name="line.667"></a>
+<span class="sourceLineNo">668</span>        new HashMap&lt;String, Collection&lt;StoreFileInfo&gt;&gt;(htd.getColumnFamilyCount());<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    for (ColumnFamilyDescriptor cfd : htd.getColumnFamilies()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      String family = cfd.getNameAsString();<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      Collection&lt;StoreFileInfo&gt; sfis = regionFs.getStoreFiles(family);<a name="line.671"></a>
+<span class="sourceLineNo">672</span>      if (sfis == null) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        continue;<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      Collection&lt;StoreFileInfo&gt; filteredSfis = null;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      for (StoreFileInfo sfi : sfis) {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        // Filter. There is a lag cleaning up compacted reference files. They get cleared<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        // after a delay in case outstanding Scanners still have references. Because of this,<a name="line.678"></a>
+<span class="sourceLineNo">679</span>        // the listing of the Store content may have straggler reference files. Skip these.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        // It should be safe to skip references at this point because we checked above with<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        // the region if it thinks it is splittable and if we are here, it thinks it is<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        // splitable.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>        if (sfi.isReference()) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>          LOG.info("Skipping split of " + sfi + "; presuming ready for archiving.");<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          continue;<a name="line.685"></a>
+<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        if (filteredSfis == null) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>          filteredSfis = new ArrayList&lt;StoreFileInfo&gt;(sfis.size());<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          files.put(family, filteredSfis);<a name="line.689"></a>
+<span class="sourceLineNo">690</span>        }<a name="line.690"></a>
+<span class="sourceLineNo">691</span>        filteredSfis.add(sfi);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>        nbFiles++;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (nbFiles == 0) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      // no file needs to be splitted.<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      return new Pair&lt;Integer, Integer&gt;(0, 0);<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Max #threads is the smaller of the number of storefiles or the default max determined above.<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    int maxThreads = Math.min(<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      conf.getInt(HConstants.REGION_SPLIT_THREADS_MAX,<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        conf.getInt(HStore.BLOCKING_STOREFILES_KEY, HStore.DEFAULT_BLOCKING_STOREFILE_COUNT)),<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      nbFiles);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    LOG.info("pid=" + getProcId() + " splitting " + nbFiles + " storefiles, region=" +<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        getParentRegion().getShortNameToLog() + ", threads=" + maxThreads);<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    final ExecutorService threadPool = Executors.newFixedThreadPool(maxThreads,<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      new ThreadFactoryBuilder().setNameFormat("StoreFileSplitter-pool-%d").setDaemon(true)<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        .setUncaughtExceptionHandler(Threads.LOGGING_EXCEPTION_HANDLER).build());<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    final List&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt; futures = new ArrayList&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt;(nbFiles);<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span>    // Split each store file.<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    for (Map.Entry&lt;String, Collection&lt;StoreFileInfo&gt;&gt; e : files.entrySet()) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      byte[] familyName = Bytes.toBytes(e.getKey());<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      final ColumnFamilyDescriptor hcd = htd.getColumnFamily(familyName);<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      final Collection&lt;StoreFileInfo&gt; storeFiles = e.getValue();<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      if (storeFiles != null &amp;&amp; storeFiles.size() &gt; 0) {<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        final Configuration storeConfiguration =<a name="line.717"></a>
+<span class="sourceLineNo">718</span>          StoreUtils.createStoreConfiguration(env.getMasterConfiguration(), htd, hcd);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>        for (StoreFileInfo storeFileInfo : storeFiles) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>          // As this procedure is running on master, use CacheConfig.DISABLED means<a name="line.720"></a>
+<span class="sourceLineNo">721</span>          // don't cache any block.<a name="line.721"></a>
+<span class="sourceLineNo">722</span>          // We also need to pass through a suitable CompoundConfiguration as if this<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          // is running in a regionserver's Store context, or we might not be able<a name="line.723"></a>
+<span class="sourceLineNo">724</span>          // to read the hfiles.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>          storeFileInfo.setConf(storeConfiguration);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>          StoreFileSplitter sfs = new StoreFileSplitter(regionFs, familyName,<a name="line.726"></a>
+<span class="sourceLineNo">727</span>            new HStoreFile(storeFileInfo, hcd.getBloomFilterType(), CacheConfig.DISABLED));<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          futures.add(threadPool.submit(sfs));<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    // Shutdown the pool<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    threadPool.shutdown();<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    // Wait for all the tasks to finish.<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    // When splits ran on the RegionServer, how-long-to-wait-configuration was named<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    // hbase.regionserver.fileSplitTimeout. If set, use its value.<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    long fileSplitTimeout = conf.getLong("hbase.master.fileSplitTimeout",<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      conf.getLong("hbase.regionserver.fileSplitTimeout", 600000));<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    try {<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      boolean stillRunning = !threadPool.awaitTermination(fileSplitTimeout, TimeUnit.MILLISECONDS);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      if (stillRunning) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        threadPool.shutdownNow();<a name="line.743"></a>
+<span class="sourceLineNo">744</span>        // wait for the thread to shutdown completely.<a name="line.744"></a>
+<span class="sourceLineNo">745</span>        while (!threadPool.isTerminated()) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>          Thread.sleep(50);<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        }<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        throw new IOException(<a name="line.748"></a>
+<span class="sourceLineNo">749</span>            "Took too long to split the" + " files and create the references, aborting split");<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span>    } catch (InterruptedException e) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span>    int daughterA = 0;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    int daughterB = 0;<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    // Look for any exception<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    for (Future&lt;Pair&lt;Path, Path&gt;&gt; future : futures) {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      try {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>        Pair&lt;Path, Path&gt; p = future.get();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>        daughterA += p.getFirst() != null ? 1 : 0;<a name="line.761"></a>
+<span class="sourceLineNo">762</span>        daughterB += p.getSecond() != null ? 1 : 0;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      } catch (InterruptedException e) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      } catch (ExecutionException e) {<a name="line.765"></a>
+<span class="sourceLineNo">766</span>        throw new IOException(e);<a name="line.766"></a>
+<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    if (LOG.isDebugEnabled()) {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      LOG.debug("pid=" + getProcId() + " split storefiles for region " +<a name="line.771"></a>
+<span class="sourceLineNo">772</span>          getParentRegion().getShortNameToLog() + " Daughter A: " + daughterA +<a name="line.772"></a>
+<span class="sourceLineNo">773</span>          " storefiles, Daughter B: " + daughterB + " storefiles.");<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return new Pair&lt;Integer, Integer&gt;(daughterA, daughterB);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>  private void assertSplitResultFilesCount(final FileSystem fs,<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      final int expectedSplitResultFileCount, Path dir)<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    throws IOException {<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    if (expectedSplitResultFileCount != 0) {<a name="line.781"></a>
+<span class="sourceLineNo">782</span>      int resultFileCount = FSUtils.getRegionReferenceAndLinkFileCount(fs, dir);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      if (expectedSplitResultFileCount != resultFileCount) {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        throw new IOException("Failing split. Didn't have expected reference and HFileLink files"<a name="line.784"></a>
+<span class="sourceLineNo">785</span>            + ", expected=" + expectedSplitResultFileCount + ", actual=" + resultFileCount);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      }<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    }<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  private Pair&lt;Path, Path&gt; splitStoreFile(HRegionFileSystem regionFs, byte[] family, HStoreFile sf)<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    throws IOException {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    if (LOG.isDebugEnabled()) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      LOG.debug("pid=" + getProcId() + " splitting started for store file: " +<a name="line.793"></a>
+<span class="sourceLineNo">794</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    }<a name="line.795"></a>
+<span class="sourceLineNo">796</span><a name="line.796"></a>
+<span class="sourceLineNo">797</span>    final byte[] splitRow = getSplitRow();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>    final String familyName = Bytes.toString(family);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    final Path path_first = regionFs.splitStoreFile(this.daughterOneRI, familyName, sf, splitRow,<a name="line.799"></a>
+<span class="sourceLineNo">800</span>        false, splitPolicy);<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    final Path path_second = regionFs.splitStoreFile(this.daughterTwoRI, familyName, sf, splitRow,<a name="line.801"></a>
+<span class="sourceLineNo">802</span>       true, splitPolicy);<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    if (LOG.isDebugEnabled()) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>      LOG.debug("pid=" + getProcId() + " splitting complete for store file: " +<a name="line.804"></a>
+<span class="sourceLineNo">805</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.805"></a>
+<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    return new Pair&lt;Path,Path&gt;(path_first, path_second);<a name="line.807"></a>
+<span class="sourceLineNo">808</span>  }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span>  /**<a name="line.810"></a>
+<span class="sourceLineNo">811</span>   * Utility class used to do the file splitting / reference writing<a name="line.811"></a>
+<span class="sourceLineNo">812</span>   * in parallel instead of sequentially.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  private class StoreFileSplitter implements Callable&lt;Pair&lt;Path,Path&gt;&gt; {<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    private final HRegionFileSystem regionFs;<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    private final byte[] family;<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    private final HStoreFile sf;<a name="line.817"></a>
+<span class="sourceLineNo">818</span><a name="line.818"></a>
+<span class="sourceLineNo">819</span>    /**<a name="line.819"></a>
+<span class="sourceLineNo">820</span>     * Constructor that takes what it needs to split<a name="line.820"></a>
+<span class="sourceLineNo">821</span>     * @param regionFs the file system<a name="line.821"></a>
+<span class="sourceLineNo">822</span>     * @param family Family that contains the store file<a name="line.822"></a>
+<span class="sourceLineNo">823</span>     * @param sf which file<a name="line.823"></a>
+<span class="sourceLineNo">824</span>     */<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    public StoreFileSplitter(HRegionFileSystem regionFs, byte[] family, HStoreFile sf) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      this.regionFs = regionFs;<a name="line.826"></a>
+<span class="sourceLineNo">827</span>      this.sf = sf;<a name="line.827"></a>
+<span class="sourceLineNo">828</span>      this.family = family;<a name="line.828"></a>
+<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
 <span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>  /**<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * Post split region actions before the Point-of-No-Return step<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @param env MasterProcedureEnv<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   **/<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  private void preSplitRegionBeforeMETA(final MasterProcedureEnv env)<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      throws IOException, InterruptedException {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    final List&lt;Mutation&gt; metaEntries = new ArrayList&lt;Mutation&gt;();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    if (cpHost != null) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      cpHost.preSplitBeforeMETAAction(getSplitRow(), metaEntries, getUser());<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      try {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        for (Mutation p : metaEntries) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          RegionInfo.parseRegionName(p.getRow());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        }<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      } catch (IOException e) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        LOG.error("pid=" + getProcId() + " row key of mutation from coprocessor not parsable as "<a name="line.846"></a>
-<span class="sourceLineNo">847</span>            + "region name."<a name="line.847"></a>
-<span class="sourceLineNo">848</span>            + "Mutations from coprocessor should only for hbase:meta table.");<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        throw e;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    }<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * Add daughter regions to META<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * @param env MasterProcedureEnv<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   */<a name="line.857"></a>
-<span class="sourceLineNo">858</span>  private void updateMeta(final MasterProcedureEnv env) throws IOException {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    env.getAssignmentManager().markRegionAsSplit(getParentRegion(), getParentRegionServerName(env),<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        daughterOneRI, daughterTwoRI);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<a name="line.861"></a>
-<span class="sourceLineNo">862</span><a name="line.862"></a>
-<span class="sourceLineNo">863</span>  /**<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * Pre split region actions after the Point-of-No-Return step<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * @param env MasterProcedureEnv<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   **/<a name="line.866"></a>
-<span class="sourceLineNo">867</span>  private void preSplitRegionAfterMETA(final MasterProcedureEnv env)<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      throws IOException, InterruptedException {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    if (cpHost != null) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      cpHost.preSplitAfterMETAAction(getUser());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  }<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>  /**<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * Post split region actions<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * @param env MasterProcedureEnv<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   **/<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  private void postSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    if (cpHost != null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      cpHost.postCompletedSplitRegionAction(daughterOneRI, daughterTwoRI, getUser());<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>  private ServerName getParentRegionServerName(final MasterProcedureEnv env) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return env.getMasterServices().getAssignmentManager().getRegionStates()<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      .getRegionServerOfRegion(getParentRegion());<a name="line.888"></a>
-<span class="sourceLineNo">889</span>  }<a name="line.889"></a>
-<span class="sourceLineNo">890</span><a name="line.890"></a>
-<span class="sourceLineNo">891</span>  private TransitRegionStateProcedure[] createUnassignProcedures(MasterProcedureEnv env)<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      throws IOException {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    return AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(env,<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      Stream.of(getParentRegion()), getRegionReplication(env));<a name="line.894"></a>
+<span class="sourceLineNo">831</span>    @Override<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    public Pair&lt;Path,Path&gt; call() throws IOException {<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      return splitStoreFile(regionFs, family, sf);<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
+<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>  /**<a name="line.837"></a>
+<span class="sourceLineNo">838</span>   * Post split region actions before the Point-of-No-Return step<a name="line.838"></a>
+<span class="sourceLineNo">839</span>   * @param env MasterProcedureEnv<a name="line.839"></a>
+<span class="sourceLineNo">840</span>   **/<a name="line.840"></a>
+<span class="sourceLineNo">841</span>  private void preSplitRegionBeforeMETA(final MasterProcedureEnv env)<a name="line.841"></a>
+<span class="sourceLineNo">842</span>      throws IOException, InterruptedException {<a name="line.842"></a>
+<span class="sourceLineNo">843</span>    final List&lt;Mutation&gt; metaEntries = new ArrayList&lt;Mutation&gt;();<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    if (cpHost != null) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      cpHost.preSplitBeforeMETAAction(getSplitRow(), metaEntries, getUser());<a name="line.846"></a>
+<span class="sourceLineNo">847</span>      try {<a name="line.847"></a>
+<span class="sourceLineNo">848</span>        for (Mutation p : metaEntries) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          RegionInfo.parseRegionName(p.getRow());<a name="line.849"></a>
+<span class="sourceLineNo">850</span>        }<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      } catch (IOException e) {<a name="line.851"></a>
+<span class="sourceLineNo">852</span>        LOG.error("pid=" + getProcId() + " row key of mutation from coprocessor not parsable as "<a name="line.852"></a>
+<span class="sourceLineNo">853</span>            + "region name."<a name="line.853"></a>
+<span class="sourceLineNo">854</span>            + "Mutations from coprocessor should only for hbase:meta table.");<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        throw e;<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  /**<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * Add daughter regions to META<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   * @param env MasterProcedureEnv<a name="line.862"></a>
+<span class="sourceLineNo">863</span>   */<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  private void updateMeta(final MasterProcedureEnv env) throws IOException {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    env.getAssignmentManager().markRegionAsSplit(getParentRegion(), getParentRegionServerName(env),<a name="line.865"></a>
+<span class="sourceLineNo">866</span>        daughterOneRI, daughterTwoRI);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>  }<a name="line.867"></a>
+<span class="sourceLineNo">868</span><a name="line.868"></a>
+<span class="sourceLineNo">869</span>  /**<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * Pre split region actions after the Point-of-No-Return step<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * @param env MasterProcedureEnv<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   **/<a name="line.872"></a>
+<span class="sourceLineNo">873</span>  private void preSplitRegionAfterMETA(final MasterProcedureEnv env)<a name="line.873"></a>
+<span class="sourceLineNo">874</span>      throws IOException, InterruptedException {<a name="line.874"></a>
+<span class="sourceLineNo">875</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.875"></a>
+<span class="sourceLineNo">876</span>    if (cpHost != null) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>      cpHost.preSplitAfterMETAAction(getUser());<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    }<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  }<a name="line.879"></a>
+<span class="sourceLineNo">880</span><a name="line.880"></a>
+<span class="sourceLineNo">881</span>  /**<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   * Post split region actions<a name="line.882"></a>
+<span class="sourceLineNo">883</span>   * @param env MasterProcedureEnv<a name="line.883"></a>
+<span class="sourceLineNo">884</span>   **/<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  private void postSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    if (cpHost != null) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      cpHost.postCompletedSplitRegionAction(daughterOneRI, daughterTwoRI, getUser());<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
+<span class="sourceLineNo">891</span><a name="line.891"></a>
+<span class="sourceLineNo">892</span>  private ServerName getParentRegionServerName(final MasterProcedureEnv env) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return env.getMasterServices().getAssignmentManager().getRegionStates()<a name="line.893"></a>
+<span class="sourceLineNo">894</span>      .getRegionServerOfRegion(getParentRegion());<a name="line.894"></a>
 <span class="sourceLineNo">895</span>  }<a name="line.895"></a>
 <span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>  private TransitRegionStateProcedure[] createAssignProcedures(MasterProcedureEnv env)<a name="line.897"></a>
+<span class="sourceLineNo">897</span>  private TransitRegionStateProcedure[] createUnassignProcedures(MasterProcedureEnv env)<a name="line.897"></a>
 <span class="sourceLineNo">898</span>      throws IOException {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    List&lt;RegionInfo&gt; hris = new ArrayList&lt;RegionInfo&gt;(2);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    hris.add(daughterOneRI);<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    hris.add(daughterTwoRI);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    return AssignmentManagerUtil.createAssignProceduresForSplitDaughters(env, hris,<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      getRegionReplication(env), getParentRegionServerName(env));<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  }<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>  private int getRegionReplication(final MasterProcedureEnv env) throws IOException {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    final TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    return htd.getRegionReplication();<a name="line.908"></a>
-<span class="sourceLineNo">909</span>  }<a name="line.909"></a>
-<span class="sourceLineNo">910</span><a name="line.910"></a>
-<span class="sourceLineNo">911</span>  private void writeMaxSequenceIdFile(MasterProcedureEnv env) throws IOException {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    MasterFileSystem fs = env.getMasterFileSystem();<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    long maxSequenceId = WALSplitUtil.getMaxRegionSequenceId(env.getMasterConfiguration(),<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      getParentRegion(), fs::getFileSystem, fs::getWALFileSystem);<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    if (maxSequenceId &gt; 0) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.916"></a>
-<span class="sourceLineNo">917</span>        getWALRegionDir(env, daughterOneRI), maxSequenceId);<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        getWALRegionDir(env, daughterTwoRI), maxSequenceId);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  @Override<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  protected boolean abort(MasterProcedureEnv env) {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    // Abort means rollback. We can't rollback all steps. HBASE-18018 added abort to all<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // Procedures. Here is a Procedure that has a PONR and cannot be aborted wants it enters this<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    // range of steps; what do we do for these should an operator want to cancel them? HBASE-20022.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    return isRollbackSupported(getCurrentState())? super.abort(env): false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span>}<a name="line.930"></a>
+<span class="sourceLineNo">899</span>    return AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(env,<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      Stream.of(getParentRegion()), getRegionReplication(env));<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  }<a name="line.901"></a>
+<span class="sourceLineNo">902</span><a name="line.902"></a>
+<span class="sourceLineNo">903</span>  private TransitRegionStateProcedure[] createAssignProcedures(MasterProcedureEnv env)<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      throws IOException {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    List&lt;RegionInfo&gt; hris = new ArrayList&lt;RegionInfo&gt;(2);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    hris.add(daughterOneRI);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    hris.add(daughterTwoRI);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    return AssignmentManagerUtil.createAssignProceduresForSplitDaughters(env, hris,<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      getRegionReplication(env), getParentRegionServerName(env));<a name="line.909"></a>
+<span class="sourceLineNo">910</span>  }<a name="line.910"></a>
+<span class="sourceLineNo">911</span><a name="line.911"></a>
+<span class="sourceLineNo">912</span>  private int getRegionReplication(final MasterProcedureEnv env) throws IOException {<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    final TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    return htd.getRegionReplication();<a name="line.914"></a>
+<span class="sourceLineNo">915</span>  }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span>  private void writeMaxSequenceIdFile(MasterProcedureEnv env) throws IOException {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    MasterFileSystem fs = env.getMasterFileSystem();<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    long maxSequenceId = WALSplitUtil.getMaxRegionSequenceId(env.getMasterConfiguration(),<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      getParentRegion(), fs::getFileSystem, fs::getWALFileSystem);<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    if (maxSequenceId &gt; 0) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.922"></a>
+<span class="sourceLineNo">923</span>        getWALRegionDir(env, daughterOneRI), maxSequenceId);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.924"></a>
+<span class="sourceLineNo">925</span>        getWALRegionDir(env, daughterTwoRI), maxSequenceId);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    }<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  protected boolean abort(MasterProcedureEnv env) {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>    // Abort means rollback. We can't rollback all steps. HBASE-18018 added abort to all<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    // Procedures. Here is a Procedure that has a PONR and cannot be aborted wants it enters this<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    // range of steps; what do we do for these should an operator want to cancel them? HBASE-20022.<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    return isRollbackSupported(getCurrentState())? super.abort(env): false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span>  }<a name="line.935"></a>
+<span class="sourceLineNo">936</span>}<a name="line.936"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
index 6cc457d..76e2819 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
@@ -41,901 +41,907 @@
 <span class="sourceLineNo">033</span>import java.util.concurrent.Future;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.util.concurrent.TimeUnit;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.stream.Stream;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileSystem;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.Path;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.quotas.QuotaExceededException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.regionserver.RegionSplitRestriction;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.regionserver.StoreUtils;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.wal.WALSplitUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.slf4j.Logger;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.slf4j.LoggerFactory;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>/**<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * The procedure to split a region in a table.<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * Takes lock on the parent region.<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * It holds the lock for the life of the procedure.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * &lt;p&gt;Throws exception on construction if determines context hostile to spllt (cluster going<a name="line.91"></a>
-<span class="sourceLineNo">092</span> * down or master is shutting down or table is disabled).&lt;/p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> */<a name="line.93"></a>
-<span class="sourceLineNo">094</span>@InterfaceAudience.Private<a name="line.94"></a>
-<span class="sourceLineNo">095</span>public class SplitTableRegionProcedure<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    extends AbstractStateMachineRegionProcedure&lt;SplitTableRegionState&gt; {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private static final Logger LOG = LoggerFactory.getLogger(SplitTableRegionProcedure.class);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private RegionInfo daughterOneRI;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private RegionInfo daughterTwoRI;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private byte[] bestSplitRow;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private RegionSplitPolicy splitPolicy;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public SplitTableRegionProcedure() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    // Required by the Procedure framework to create the procedure on replay<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>  public SplitTableRegionProcedure(final MasterProcedureEnv env,<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      final RegionInfo regionToSplit, final byte[] splitRow) throws IOException {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    super(env, regionToSplit);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    preflightChecks(env, true);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // When procedure goes to run in its prepare step, it also does these checkOnline checks. Here<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    // we fail-fast on construction. There it skips the split with just a warning.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    checkOnline(env, regionToSplit);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.bestSplitRow = splitRow;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    TableDescriptor tableDescriptor = env.getMasterServices().getTableDescriptors()<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      .get(getTableName());<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    Configuration conf = env.getMasterConfiguration();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    if (hasBestSplitRow()) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      // Apply the split restriction for the table to the user-specified split point<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      RegionSplitRestriction splitRestriction =<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        RegionSplitRestriction.create(tableDescriptor, conf);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      byte[] restrictedSplitRow = splitRestriction.getRestrictedSplitPoint(bestSplitRow);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      if (!Bytes.equals(bestSplitRow, restrictedSplitRow)) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        LOG.warn("The specified split point {} violates the split restriction of the table. "<a name="line.124"></a>
-<span class="sourceLineNo">125</span>            + "Using {} as a split point.", Bytes.toStringBinary(bestSplitRow),<a name="line.125"></a>
-<span class="sourceLineNo">126</span>          Bytes.toStringBinary(restrictedSplitRow));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        bestSplitRow = restrictedSplitRow;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    checkSplittable(env, regionToSplit);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    final TableName table = regionToSplit.getTable();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    final long rid = getDaughterRegionIdTimestamp(regionToSplit);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.daughterOneRI = RegionInfoBuilder.newBuilder(table)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        .setStartKey(regionToSplit.getStartKey())<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        .setEndKey(bestSplitRow)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        .setSplit(false)<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        .setRegionId(rid)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        .build();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    this.daughterTwoRI = RegionInfoBuilder.newBuilder(table)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        .setStartKey(bestSplitRow)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        .setEndKey(regionToSplit.getEndKey())<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        .setSplit(false)<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        .setRegionId(rid)<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        .build();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    if(tableDescriptor.getRegionSplitPolicyClassName() != null) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      // Since we don't have region reference here, creating the split policy instance without it.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      // This can be used to invoke methods which don't require Region reference. This instantiation<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // of a class on Master-side though it only makes sense on the RegionServer-side is<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      // for Phoenix Local Indexing. Refer HBASE-12583 for more information.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      Class&lt;? extends RegionSplitPolicy&gt; clazz =<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        RegionSplitPolicy.getSplitPolicyClass(tableDescriptor, conf);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      this.splitPolicy = ReflectionUtils.newInstance(clazz, conf);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>  @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    if (env.getProcedureScheduler().waitRegions(this, getTableName(), getParentRegion(),<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      daughterOneRI, daughterTwoRI)) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      try {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        LOG.debug(LockState.LOCK_EVENT_WAIT + " " + env.getProcedureScheduler().dumpLocks());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      } catch (IOException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        // Ignore, just for logging<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return LockState.LOCK_ACQUIRED;<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>  @Override<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  protected void releaseLock(final MasterProcedureEnv env) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    env.getProcedureScheduler().wakeRegions(this, getTableName(), getParentRegion(), daughterOneRI,<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      daughterTwoRI);<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>  public RegionInfo getDaughterOneRI() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return daughterOneRI;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public RegionInfo getDaughterTwoRI() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return daughterTwoRI;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private boolean hasBestSplitRow() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    return bestSplitRow != null &amp;&amp; bestSplitRow.length &gt; 0;<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>  /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * Check whether the region is splittable<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param env MasterProcedureEnv<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param regionToSplit parent Region to be split<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  private void checkSplittable(final MasterProcedureEnv env,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      final RegionInfo regionToSplit) throws IOException {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // Ask the remote RS if this region is splittable.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // If we get an IOE, report it along w/ the failure so can see why we are not splittable at<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // this time.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if(regionToSplit.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      throw new IllegalArgumentException("Can't invoke split on non-default regions directly");<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    RegionStateNode node =<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    IOException splittableCheckIOE = null;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    boolean splittable = false;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (node != null) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      try {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        GetRegionInfoResponse response;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (!hasBestSplitRow()) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          LOG.info(<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            "{} splitKey isn't explicitly specified, will try to find a best split key from RS {}",<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            node.getRegionInfo().getRegionNameAsString(), node.getRegionLocation());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.212"></a>
-<span class="sourceLineNo">213</span>            node.getRegionInfo(), true);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          bestSplitRow =<a name="line.214"></a>
-<span class="sourceLineNo">215</span>            response.hasBestSplitRow() ? response.getBestSplitRow().toByteArray() : null;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        } else {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.217"></a>
-<span class="sourceLineNo">218</span>            node.getRegionInfo(), false);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        splittable = response.hasSplittable() &amp;&amp; response.getSplittable();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        if (LOG.isDebugEnabled()) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          LOG.debug("Splittable=" + splittable + " " + node.toShortString());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      } catch (IOException e) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        splittableCheckIOE = e;<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>    if (!splittable) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      IOException e =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        new DoNotRetryIOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      if (splittableCheckIOE != null) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        e.initCause(splittableCheckIOE);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      }<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      throw e;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (!hasBestSplitRow()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      throw new DoNotRetryIOException("Region not splittable because bestSplitPoint = null, " +<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        "maybe table is too small for auto split. For force split, try specifying split row");<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    if (Bytes.equals(regionToSplit.getStartKey(), bestSplitRow)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      throw new DoNotRetryIOException(<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        "Split row is equal to startkey: " + Bytes.toStringBinary(bestSplitRow));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (!regionToSplit.containsRow(bestSplitRow)) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      throw new DoNotRetryIOException("Split row is not inside region key range splitKey:" +<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        Bytes.toStringBinary(bestSplitRow) + " region: " + regionToSplit);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Calculate daughter regionid to use.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param hri Parent {@link RegionInfo}<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @return Daughter region id (timestamp) to use.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  private static long getDaughterRegionIdTimestamp(final RegionInfo hri) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    long rid = EnvironmentEdgeManager.currentTime();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // Regionid is timestamp.  Can't be less than that of parent else will insert<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    // at wrong location in hbase:meta (See HBASE-710).<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    if (rid &lt; hri.getRegionId()) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      LOG.warn("Clock skew; parent regions id is " + hri.getRegionId() +<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        " but current time here is " + rid);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      rid = hri.getRegionId() + 1;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    return rid;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  private void removeNonDefaultReplicas(MasterProcedureEnv env) throws IOException {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    AssignmentManagerUtil.removeNonDefaultReplicas(env, Stream.of(getParentRegion()),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      getRegionReplication(env));<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private void checkClosedRegions(MasterProcedureEnv env) throws IOException {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // theoretically this should not happen any more after we use TRSP, but anyway let's add a check<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // here<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    AssignmentManagerUtil.checkClosedRegion(env, getParentRegion());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  protected Flow executeFromState(MasterProcedureEnv env, SplitTableRegionState state)<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      throws InterruptedException {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    LOG.trace("{} execute state={}", this, state);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      switch (state) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (prepareSplitRegion(env)) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            break;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>          } else {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            return Flow.NO_MORE_STATE;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          preSplitRegion(env);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CLOSE_PARENT_REGION);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          break;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          addChildProcedure(createUnassignProcedures(env));<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          break;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          checkClosedRegions(env);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          break;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          removeNonDefaultReplicas(env);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          createDaughterRegions(env);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          break;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          writeMaxSequenceIdFile(env);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          break;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          preSplitRegionBeforeMETA(env);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_UPDATE_META);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          break;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          updateMeta(env);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          break;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          preSplitRegionAfterMETA(env);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          break;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          addChildProcedure(createAssignProcedures(env));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_POST_OPERATION);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          break;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          postSplitRegion(env);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          return Flow.NO_MORE_STATE;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        default:<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      }<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } catch (IOException e) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      String msg = "Splitting " + getParentRegion().getEncodedName() + ", " + this;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!isRollbackSupported(state)) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // We reach a state that cannot be rolled back. We just need to keep retrying.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        LOG.warn(msg, e);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      } else {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        LOG.error(msg, e);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        setFailure("master-split-regions", e);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // if split fails,  need to call ((HRegion)parent).clearSplit() when it is a force split<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    return Flow.HAS_MORE_STATE;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  /**<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * To rollback {@link SplitTableRegionProcedure}, an AssignProcedure is asynchronously<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   * submitted for parent region to be split (rollback doesn't wait on the completion of the<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   * AssignProcedure) . This can be improved by changing rollback() to support sub-procedures.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * See HBASE-19851 for details.<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   */<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  protected void rollbackState(final MasterProcedureEnv env, final SplitTableRegionState state)<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      throws IOException, InterruptedException {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    LOG.trace("{} rollback state={}", this, state);<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    try {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      switch (state) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.367"></a>
-<span class="sourceLineNo">368</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          // PONR<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          break;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          deleteDaughterRegions(env);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          break;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          // Doing nothing, in SPLIT_TABLE_REGION_CLOSE_PARENT_REGION,<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          // we will bring parent region online<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          break;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          openParentRegion(env);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          break;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          postRollBackSplitRegion(env);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          break;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          break; // nothing to do<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        default:<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    } catch (IOException e) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      // This will be retried. Unless there is a bug in the code,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      // this should be just a "temporary error" (e.g. network down)<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      LOG.warn("pid=" + getProcId() + " failed rollback attempt step " + state +<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          " for splitting the region "<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        + getParentRegion().getEncodedName() + " in table " + getTableName(), e);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      throw e;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  /*<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * Check whether we are in the state that can be rollback<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  @Override<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  protected boolean isRollbackSupported(final SplitTableRegionState state) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    switch (state) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        // It is not safe to rollback if we reach to these states.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        return false;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      default:<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        break;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return true;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  protected SplitTableRegionState getState(final int stateId) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    return SplitTableRegionState.forNumber(stateId);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  protected int getStateId(final SplitTableRegionState state) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return state.getNumber();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  @Override<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected SplitTableRegionState getInitialState() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    return SplitTableRegionState.SPLIT_TABLE_REGION_PREPARE;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    super.serializeStateData(serializer);<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>    final MasterProcedureProtos.SplitTableRegionStateData.Builder splitTableRegionMsg =<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        MasterProcedureProtos.SplitTableRegionStateData.newBuilder()<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        .setParentRegionInfo(ProtobufUtil.toRegionInfo(getRegion()))<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterOneRI))<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterTwoRI));<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    serializer.serialize(splitTableRegionMsg.build());<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>  @Override<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      throws IOException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    super.deserializeStateData(serializer);<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    final MasterProcedureProtos.SplitTableRegionStateData splitTableRegionsMsg =<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        serializer.deserialize(MasterProcedureProtos.SplitTableRegionStateData.class);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    setUser(MasterProcedureUtil.toUserInfo(splitTableRegionsMsg.getUserInfo()));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    setRegion(ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getParentRegionInfo()));<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    assert(splitTableRegionsMsg.getChildRegionInfoCount() == 2);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    daughterOneRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(0));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    daughterTwoRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(1));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  public void toStringClassDetails(StringBuilder sb) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    sb.append(getClass().getSimpleName());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    sb.append(" table=");<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    sb.append(getTableName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    sb.append(", parent=");<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    sb.append(getParentRegion().getShortNameToLog());<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    sb.append(", daughterA=");<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    sb.append(daughterOneRI.getShortNameToLog());<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    sb.append(", daughterB=");<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    sb.append(daughterTwoRI.getShortNameToLog());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private RegionInfo getParentRegion() {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    return getRegion();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>  @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  public TableOperationType getTableOperationType() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return TableOperationType.REGION_SPLIT;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  @Override<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    return env.getAssignmentManager().getAssignmentManagerMetrics().getSplitProcMetrics();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  private byte[] getSplitRow() {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    return daughterTwoRI.getStartKey();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  private static final State[] EXPECTED_SPLIT_STATES = new State[] { State.OPEN, State.CLOSED };<a name="line.495"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileSystem;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.Path;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HConstants;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerName;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.MasterCoprocessorHost;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.quotas.QuotaExceededException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.regionserver.RegionSplitRestriction;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.regionserver.StoreUtils;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.wal.WALSplitUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.slf4j.Logger;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.slf4j.LoggerFactory;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>/**<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * The procedure to split a region in a table.<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * Takes lock on the parent region.<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * It holds the lock for the life of the procedure.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * &lt;p&gt;Throws exception on construction if determines context hostile to spllt (cluster going<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * down or master is shutting down or table is disabled).&lt;/p&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>@InterfaceAudience.Private<a name="line.95"></a>
+<span class="sourceLineNo">096</span>public class SplitTableRegionProcedure<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    extends AbstractStateMachineRegionProcedure&lt;SplitTableRegionState&gt; {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private static final Logger LOG = LoggerFactory.getLogger(SplitTableRegionProcedure.class);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private RegionInfo daughterOneRI;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private RegionInfo daughterTwoRI;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private byte[] bestSplitRow;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private RegionSplitPolicy splitPolicy;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public SplitTableRegionProcedure() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    // Required by the Procedure framework to create the procedure on replay<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>  public SplitTableRegionProcedure(final MasterProcedureEnv env,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      final RegionInfo regionToSplit, final byte[] splitRow) throws IOException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    super(env, regionToSplit);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    preflightChecks(env, true);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    // When procedure goes to run in its prepare step, it also does these checkOnline checks. Here<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    // we fail-fast on construction. There it skips the split with just a warning.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    checkOnline(env, regionToSplit);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.bestSplitRow = splitRow;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    TableDescriptor tableDescriptor = env.getMasterServices().getTableDescriptors()<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      .get(getTableName());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    Configuration conf = env.getMasterConfiguration();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (hasBestSplitRow()) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      // Apply the split restriction for the table to the user-specified split point<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      RegionSplitRestriction splitRestriction =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        RegionSplitRestriction.create(tableDescriptor, conf);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      byte[] restrictedSplitRow = splitRestriction.getRestrictedSplitPoint(bestSplitRow);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      if (!Bytes.equals(bestSplitRow, restrictedSplitRow)) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        LOG.warn("The specified split point {} violates the split restriction of the table. "<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            + "Using {} as a split point.", Bytes.toStringBinary(bestSplitRow),<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          Bytes.toStringBinary(restrictedSplitRow));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        bestSplitRow = restrictedSplitRow;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    checkSplittable(env, regionToSplit);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    final TableName table = regionToSplit.getTable();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    final long rid = getDaughterRegionIdTimestamp(regionToSplit);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    this.daughterOneRI = RegionInfoBuilder.newBuilder(table)<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        .setStartKey(regionToSplit.getStartKey())<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        .setEndKey(bestSplitRow)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        .setSplit(false)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        .setRegionId(rid)<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        .build();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    this.daughterTwoRI = RegionInfoBuilder.newBuilder(table)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        .setStartKey(bestSplitRow)<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        .setEndKey(regionToSplit.getEndKey())<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        .setSplit(false)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        .setRegionId(rid)<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        .build();<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    if (tableDescriptor.getRegionSplitPolicyClassName() != null) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      // Since we don't have region reference here, creating the split policy instance without it.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      // This can be used to invoke methods which don't require Region reference. This instantiation<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      // of a class on Master-side though it only makes sense on the RegionServer-side is<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      // for Phoenix Local Indexing. Refer HBASE-12583 for more information.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      Class&lt;? extends RegionSplitPolicy&gt; clazz =<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          RegionSplitPolicy.getSplitPolicyClass(tableDescriptor, conf);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      this.splitPolicy = ReflectionUtils.newInstance(clazz, conf);<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>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (env.getProcedureScheduler().waitRegions(this, getTableName(), getParentRegion(),<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      daughterOneRI, daughterTwoRI)) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      try {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        LOG.debug(LockState.LOCK_EVENT_WAIT + " " + env.getProcedureScheduler().dumpLocks());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      } catch (IOException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        // Ignore, just for logging<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return LockState.LOCK_ACQUIRED;<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>  @Override<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  protected void releaseLock(final MasterProcedureEnv env) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    env.getProcedureScheduler().wakeRegions(this, getTableName(), getParentRegion(), daughterOneRI,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      daughterTwoRI);<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>  public RegionInfo getDaughterOneRI() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return daughterOneRI;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  public RegionInfo getDaughterTwoRI() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return daughterTwoRI;<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 boolean hasBestSplitRow() {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return bestSplitRow != null &amp;&amp; bestSplitRow.length &gt; 0;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * Check whether the region is splittable<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * @param env MasterProcedureEnv<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @param regionToSplit parent Region to be split<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  private void checkSplittable(final MasterProcedureEnv env,<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      final RegionInfo regionToSplit) throws IOException {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // Ask the remote RS if this region is splittable.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // If we get an IOE, report it along w/ the failure so can see why we are not splittable at<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    // this time.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if(regionToSplit.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw new IllegalArgumentException("Can't invoke split on non-default regions directly");<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    RegionStateNode node =<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    IOException splittableCheckIOE = null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    boolean splittable = false;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (node != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      try {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        GetRegionInfoResponse response;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (!hasBestSplitRow()) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          LOG.info(<a name="line.211"></a>
+<span class="sourceLineNo">212</span>            "{} splitKey isn't explicitly specified, will try to find a best split key from RS {}",<a name="line.212"></a>
+<span class="sourceLineNo">213</span>            node.getRegionInfo().getRegionNameAsString(), node.getRegionLocation());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.214"></a>
+<span class="sourceLineNo">215</span>            node.getRegionInfo(), true);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          bestSplitRow =<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            response.hasBestSplitRow() ? response.getBestSplitRow().toByteArray() : null;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        } else {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(),<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            node.getRegionInfo(), false);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        splittable = response.hasSplittable() &amp;&amp; response.getSplittable();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        if (LOG.isDebugEnabled()) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          LOG.debug("Splittable=" + splittable + " " + node.toShortString());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      } catch (IOException e) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        splittableCheckIOE = e;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (!splittable) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      IOException e =<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        new DoNotRetryIOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      if (splittableCheckIOE != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        e.initCause(splittableCheckIOE);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      throw e;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    if (!hasBestSplitRow()) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      throw new DoNotRetryIOException("Region not splittable because bestSplitPoint = null, " +<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        "maybe table is too small for auto split. For force split, try specifying split row");<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 (Bytes.equals(regionToSplit.getStartKey(), bestSplitRow)) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      throw new DoNotRetryIOException(<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        "Split row is equal to startkey: " + Bytes.toStringBinary(bestSplitRow));<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (!regionToSplit.containsRow(bestSplitRow)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      throw new DoNotRetryIOException("Split row is not inside region key range splitKey:" +<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        Bytes.toStringBinary(bestSplitRow) + " region: " + regionToSplit);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * Calculate daughter regionid to use.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * @param hri Parent {@link RegionInfo}<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @return Daughter region id (timestamp) to use.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  private static long getDaughterRegionIdTimestamp(final RegionInfo hri) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    long rid = EnvironmentEdgeManager.currentTime();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // Regionid is timestamp.  Can't be less than that of parent else will insert<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    // at wrong location in hbase:meta (See HBASE-710).<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    if (rid &lt; hri.getRegionId()) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      LOG.warn("Clock skew; parent regions id is " + hri.getRegionId() +<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        " but current time here is " + rid);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      rid = hri.getRegionId() + 1;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return rid;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  private void removeNonDefaultReplicas(MasterProcedureEnv env) throws IOException {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    AssignmentManagerUtil.removeNonDefaultReplicas(env, Stream.of(getParentRegion()),<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      getRegionReplication(env));<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private void checkClosedRegions(MasterProcedureEnv env) throws IOException {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // theoretically this should not happen any more after we use TRSP, but anyway let's add a check<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // here<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    AssignmentManagerUtil.checkClosedRegion(env, getParentRegion());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @Override<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  protected Flow executeFromState(MasterProcedureEnv env, SplitTableRegionState state)<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      throws InterruptedException {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    LOG.trace("{} execute state={}", this, state);<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    try {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      switch (state) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          if (prepareSplitRegion(env)) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>            break;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          } else {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            return Flow.NO_MORE_STATE;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>          }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          preSplitRegion(env);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CLOSE_PARENT_REGION);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          break;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.302"></a>
+<span class="sourceLineNo">303</span>          addChildProcedure(createUnassignProcedures(env));<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          break;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          checkClosedRegions(env);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          break;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          removeNonDefaultReplicas(env);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          createDaughterRegions(env);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          break;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          writeMaxSequenceIdFile(env);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          break;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          preSplitRegionBeforeMETA(env);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_UPDATE_META);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          break;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          updateMeta(env);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          break;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          preSplitRegionAfterMETA(env);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          break;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          addChildProcedure(createAssignProcedures(env));<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          setNextState(SplitTableRegionState.SPLIT_TABLE_REGION_POST_OPERATION);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          break;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          postSplitRegion(env);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          return Flow.NO_MORE_STATE;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        default:<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    } catch (IOException e) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      String msg = "Splitting " + getParentRegion().getEncodedName() + ", " + this;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      if (!isRollbackSupported(state)) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        // We reach a state that cannot be rolled back. We just need to keep retrying.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        LOG.warn(msg, e);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      } else {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        LOG.error(msg, e);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        setFailure("master-split-regions", e);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // if split fails,  need to call ((HRegion)parent).clearSplit() when it is a force split<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return Flow.HAS_MORE_STATE;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * To rollback {@link SplitTableRegionProcedure}, an AssignProcedure is asynchronously<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * submitted for parent region to be split (rollback doesn't wait on the completion of the<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * AssignProcedure) . This can be improved by changing rollback() to support sub-procedures.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * See HBASE-19851 for details.<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>  protected void rollbackState(final MasterProcedureEnv env, final SplitTableRegionState state)<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      throws IOException, InterruptedException {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    LOG.trace("{} rollback state={}", this, state);<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      switch (state) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          // PONR<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        case SPLIT_TABLE_REGION_PRE_OPERATION_BEFORE_META:<a name="line.374"></a>
+<span class="sourceLineNo">375</span>          break;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        case SPLIT_TABLE_REGION_CREATE_DAUGHTER_REGIONS:<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        case SPLIT_TABLE_REGION_WRITE_MAX_SEQUENCE_ID_FILE:<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          deleteDaughterRegions(env);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          break;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        case SPLIT_TABLE_REGIONS_CHECK_CLOSED_REGIONS:<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          // Doing nothing, in SPLIT_TABLE_REGION_CLOSE_PARENT_REGION,<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          // we will bring parent region online<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          break;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        case SPLIT_TABLE_REGION_CLOSE_PARENT_REGION:<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          openParentRegion(env);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          break;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        case SPLIT_TABLE_REGION_PRE_OPERATION:<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          postRollBackSplitRegion(env);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          break;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        case SPLIT_TABLE_REGION_PREPARE:<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          break; // nothing to do<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        default:<a name="line.392"></a>
+<span class="sourceLineNo">393</span>          throw new UnsupportedOperationException(this + " unhandled state=" + state);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    } catch (IOException e) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      // This will be retried. Unless there is a bug in the code,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      // this should be just a "temporary error" (e.g. network down)<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      LOG.warn("pid=" + getProcId() + " failed rollback attempt step " + state +<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          " for splitting the region "<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        + getParentRegion().getEncodedName() + " in table " + getTableName(), e);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      throw e;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  /*<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Check whether we are in the state that can be rollback<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  @Override<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  protected boolean isRollbackSupported(final SplitTableRegionState state) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    switch (state) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      case SPLIT_TABLE_REGION_POST_OPERATION:<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      case SPLIT_TABLE_REGION_OPEN_CHILD_REGIONS:<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      case SPLIT_TABLE_REGION_PRE_OPERATION_AFTER_META:<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      case SPLIT_TABLE_REGION_UPDATE_META:<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        // It is not safe to rollback if we reach to these states.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        return false;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      default:<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        break;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    return true;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  protected SplitTableRegionState getState(final int stateId) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    return SplitTableRegionState.forNumber(stateId);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>  @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  protected int getStateId(final SplitTableRegionState state) {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return state.getNumber();<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  @Override<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  protected SplitTableRegionState getInitialState() {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    return SplitTableRegionState.SPLIT_TABLE_REGION_PREPARE;<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>  @Override<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      throws IOException {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    super.serializeStateData(serializer);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    final MasterProcedureProtos.SplitTableRegionStateData.Builder splitTableRegionMsg =<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        MasterProcedureProtos.SplitTableRegionStateData.newBuilder()<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        .setParentRegionInfo(ProtobufUtil.toRegionInfo(getRegion()))<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterOneRI))<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        .addChildRegionInfo(ProtobufUtil.toRegionInfo(daughterTwoRI));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    serializer.serialize(splitTableRegionMsg.build());<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>  @Override<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      throws IOException {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    super.deserializeStateData(serializer);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>    final MasterProcedureProtos.SplitTableRegionStateData splitTableRegionsMsg =<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        serializer.deserialize(MasterProcedureProtos.SplitTableRegionStateData.class);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    setUser(MasterProcedureUtil.toUserInfo(splitTableRegionsMsg.getUserInfo()));<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    setRegion(ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getParentRegionInfo()));<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    assert(splitTableRegionsMsg.getChildRegionInfoCount() == 2);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    daughterOneRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(0));<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    daughterTwoRI = ProtobufUtil.toRegionInfo(splitTableRegionsMsg.getChildRegionInfo(1));<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  @Override<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  public void toStringClassDetails(StringBuilder sb) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    sb.append(getClass().getSimpleName());<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    sb.append(" table=");<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    sb.append(getTableName());<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    sb.append(", parent=");<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    sb.append(getParentRegion().getShortNameToLog());<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    sb.append(", daughterA=");<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    sb.append(daughterOneRI.getShortNameToLog());<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    sb.append(", daughterB=");<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    sb.append(daughterTwoRI.getShortNameToLog());<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private RegionInfo getParentRegion() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return getRegion();<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  @Override<a name="line.483"></a>
+<span class="sourceLineNo">484</span>  public TableOperationType getTableOperationType() {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    return TableOperationType.REGION_SPLIT;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  @Override<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    return env.getAssignmentManager().getAssignmentManagerMetrics().getSplitProcMetrics();<a name="line.490"></a>
+<span class="sourceLineNo">491</span>  }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span>  private byte[] getSplitRow() {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    return daughterTwoRI.getStartKey();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
 <span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * Prepare to Split region.<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * @param env MasterProcedureEnv<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   */<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  public boolean prepareSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Fail if we are taking snapshot for the given table<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    if (env.getMasterServices().getSnapshotManager()<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      .isTakingSnapshot(getParentRegion().getTable())) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      setFailure(new IOException("Skip splitting region " + getParentRegion().getShortNameToLog() +<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        ", because we are taking snapshot for the table " + getParentRegion().getTable()));<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      return false;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // Check whether the region is splittable<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RegionStateNode node =<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>    if (node == null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      throw new UnknownRegionException(getParentRegion().getRegionNameAsString());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span>    RegionInfo parentHRI = node.getRegionInfo();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    if (parentHRI == null) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      LOG.info("Unsplittable; parent region is null; node={}", node);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return false;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    // Lookup the parent HRI state from the AM, which has the latest updated info.<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Protect against the case where concurrent SPLIT requests came in and succeeded<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    // just before us.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (node.isInState(State.SPLIT)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      LOG.info("Split of " + parentHRI + " skipped; state is already SPLIT");<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return false;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    if (parentHRI.isSplit() || parentHRI.isOffline()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      LOG.info("Split of " + parentHRI + " skipped because offline/split.");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      return false;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>    // expected parent to be online or closed<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    if (!node.isInState(EXPECTED_SPLIT_STATES)) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      // We may have SPLIT already?<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      setFailure(new IOException("Split " + parentHRI.getRegionNameAsString() +<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          " FAILED because state=" + node.getState() + "; expected " +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          Arrays.toString(EXPECTED_SPLIT_STATES)));<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return false;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    // Mostly this check is not used because we already check the switch before submit a split<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    // procedure. Just for safe, check the switch again. This procedure can be rollbacked if<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    // the switch was set to false after submit.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    if (!env.getMasterServices().isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      LOG.warn("pid=" + getProcId() + " split switch is off! skip split of " + parentHRI);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString() +<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          " failed due to split switch off"));<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return false;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    if (!env.getMasterServices().getTableDescriptors().get(getTableName()).isSplitEnabled()) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      LOG.warn("pid={}, split is disabled for the table! Skipping split of {}", getProcId(),<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        parentHRI);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString()<a name="line.556"></a>
-<span class="sourceLineNo">557</span>          + " failed as region split is disabled for the table"));<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      return false;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // set node state as SPLITTING<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    node.setState(State.SPLITTING);<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    // Since we have the lock and the master is coordinating the operation<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    // we are always able to split the region<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return true;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  /**<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * Action before splitting region in a table.<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @param env MasterProcedureEnv<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  private void preSplitRegion(final MasterProcedureEnv env)<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      throws IOException, InterruptedException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    if (cpHost != null) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      cpHost.preSplitRegionAction(getTableName(), getSplitRow(), getUser());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>    // TODO: Clean up split and merge. Currently all over the place.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    // Notify QuotaManager and RegionNormalizer<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    try {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      env.getMasterServices().getMasterQuotaManager().onRegionSplit(this.getParentRegion());<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    } catch (QuotaExceededException e) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      // TODO: why is this here? split requests can be submitted by actors other than the normalizer<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      env.getMasterServices()<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        .getRegionNormalizerManager()<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        .planSkipped(NormalizationPlan.PlanType.SPLIT);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      throw e;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * Action after rollback a split table region action.<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param env MasterProcedureEnv<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   */<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  private void postRollBackSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    if (cpHost != null) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      cpHost.postRollBackSplitRegionAction(getUser());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>  /**<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * Rollback close parent region<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   */<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  private void openParentRegion(MasterProcedureEnv env) throws IOException {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    AssignmentManagerUtil.reopenRegionsForRollback(env,<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      Collections.singletonList((getParentRegion())), getRegionReplication(env),<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      getParentRegionServerName(env));<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Create daughter regions<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  public void createDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    final FileSystem fs = mfs.getFileSystem();<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      env.getMasterConfiguration(), fs, tabledir, getParentRegion(), false);<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    regionFs.createSplitsDir(daughterOneRI, daughterTwoRI);<a name="line.623"></a>
+<span class="sourceLineNo">497</span>  private static final State[] EXPECTED_SPLIT_STATES = new State[] { State.OPEN, State.CLOSED };<a name="line.497"></a>
+<span class="sourceLineNo">498</span><a name="line.498"></a>
+<span class="sourceLineNo">499</span>  /**<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * Prepare to Split region.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * @param env MasterProcedureEnv<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   */<a name="line.502"></a>
+<span class="sourceLineNo">503</span>  public boolean prepareSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    // Fail if we are taking snapshot for the given table<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    if (env.getMasterServices().getSnapshotManager()<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      .isTakingSnapshot(getParentRegion().getTable())) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      setFailure(new IOException("Skip splitting region " + getParentRegion().getShortNameToLog() +<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        ", because we are taking snapshot for the table " + getParentRegion().getTable()));<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      return false;<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // Check whether the region is splittable<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    RegionStateNode node =<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        env.getAssignmentManager().getRegionStates().getRegionStateNode(getParentRegion());<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (node == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throw new UnknownRegionException(getParentRegion().getRegionNameAsString());<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>    RegionInfo parentHRI = node.getRegionInfo();<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    if (parentHRI == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Unsplittable; parent region is null; node={}", node);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return false;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // Lookup the parent HRI state from the AM, which has the latest updated info.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    // Protect against the case where concurrent SPLIT requests came in and succeeded<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    // just before us.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    if (node.isInState(State.SPLIT)) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      LOG.info("Split of " + parentHRI + " skipped; state is already SPLIT");<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      return false;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (parentHRI.isSplit() || parentHRI.isOffline()) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("Split of " + parentHRI + " skipped because offline/split.");<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return false;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    // expected parent to be online or closed<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (!node.isInState(EXPECTED_SPLIT_STATES)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      // We may have SPLIT already?<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      setFailure(new IOException("Split " + parentHRI.getRegionNameAsString() +<a name="line.539"></a>
+<span class="sourceLineNo">540</span>          " FAILED because state=" + node.getState() + "; expected " +<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          Arrays.toString(EXPECTED_SPLIT_STATES)));<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      return false;<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>    // Mostly this check is not used because we already check the switch before submit a split<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    // procedure. Just for safe, check the switch again. This procedure can be rollbacked if<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    // the switch was set to false after submit.<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    if (!env.getMasterServices().isSplitOrMergeEnabled(MasterSwitchType.SPLIT)) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      LOG.warn("pid=" + getProcId() + " split switch is off! skip split of " + parentHRI);<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString() +<a name="line.550"></a>
+<span class="sourceLineNo">551</span>          " failed due to split switch off"));<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      return false;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    if (!env.getMasterServices().getTableDescriptors().get(getTableName()).isSplitEnabled()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      LOG.warn("pid={}, split is disabled for the table! Skipping split of {}", getProcId(),<a name="line.556"></a>
+<span class="sourceLineNo">557</span>        parentHRI);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      setFailure(new IOException("Split region " + parentHRI.getRegionNameAsString()<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          + " failed as region split is disabled for the table"));<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      return false;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    // set node state as SPLITTING<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    node.setState(State.SPLITTING);<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>    // Since we have the lock and the master is coordinating the operation<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // we are always able to split the region<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    return true;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>  /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * Action before splitting region in a table.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   * @param env MasterProcedureEnv<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   */<a name="line.574"></a>
+<span class="sourceLineNo">575</span>  private void preSplitRegion(final MasterProcedureEnv env)<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      throws IOException, InterruptedException {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    if (cpHost != null) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      cpHost.preSplitRegionAction(getTableName(), getSplitRow(), getUser());<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>    // TODO: Clean up split and merge. Currently all over the place.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    // Notify QuotaManager and RegionNormalizer<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    try {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      env.getMasterServices().getMasterQuotaManager().onRegionSplit(this.getParentRegion());<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    } catch (QuotaExceededException e) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      // TODO: why is this here? split requests can be submitted by actors other than the normalizer<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      env.getMasterServices()<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        .getRegionNormalizerManager()<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        .planSkipped(NormalizationPlan.PlanType.SPLIT);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      throw e;<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   * Action after rollback a split table region action.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>   * @param env MasterProcedureEnv<a name="line.597"></a>
+<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
+<span class="sourceLineNo">599</span>  private void postRollBackSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    if (cpHost != null) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      cpHost.postRollBackSplitRegionAction(getUser());<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * Rollback close parent region<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   */<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  private void openParentRegion(MasterProcedureEnv env) throws IOException {<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    AssignmentManagerUtil.reopenRegionsForRollback(env,<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      Collections.singletonList((getParentRegion())), getRegionReplication(env),<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      getParentRegionServerName(env));<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  /**<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   * Create daughter regions<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  public void createDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    final FileSystem fs = mfs.getFileSystem();<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      env.getMasterConfiguration(), fs, tabledir, getParentRegion(), false);<a name="line.623"></a>
 <span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>    Pair&lt;Integer, Integer&gt; expectedReferences = splitStoreFiles(env, regionFs);<a name="line.625"></a>
+<span class="sourceLineNo">625</span>    regionFs.createSplitsDir(daughterOneRI, daughterTwoRI);<a name="line.625"></a>
 <span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>    assertReferenceFileCount(fs, expectedReferences.getFirst(),<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      regionFs.getSplitsDir(daughterOneRI));<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    regionFs.commitDaughterRegion(daughterOneRI);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    assertReferenceFileCount(fs, expectedReferences.getFirst(),<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      new Path(tabledir, daughterOneRI.getEncodedName()));<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    assertReferenceFileCount(fs, expectedReferences.getSecond(),<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      regionFs.getSplitsDir(daughterTwoRI));<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    regionFs.commitDaughterRegion(daughterTwoRI);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    assertReferenceFileCount(fs, expectedReferences.getSecond(),<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      new Path(tabledir, daughterTwoRI.getEncodedName()));<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  private void deleteDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    HRegionFileSystem.deleteRegionFromFileSystem(env.getMasterConfiguration(),<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      mfs.getFileSystem(), tabledir, daughterOneRI);<a name="line.644"></a>
+<span class="sourceLineNo">627</span>    Pair&lt;Integer, Integer&gt; expectedReferences = splitStoreFiles(env, regionFs);<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>    assertSplitResultFilesCount(fs, expectedReferences.getFirst(),<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      regionFs.getSplitsDir(daughterOneRI));<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    regionFs.commitDaughterRegion(daughterOneRI);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    assertSplitResultFilesCount(fs, expectedReferences.getFirst(),<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      new Path(tabledir, daughterOneRI.getEncodedName()));<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>    assertSplitResultFilesCount(fs, expectedReferences.getSecond(),<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      regionFs.getSplitsDir(daughterTwoRI));<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    regionFs.commitDaughterRegion(daughterTwoRI);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    assertSplitResultFilesCount(fs, expectedReferences.getSecond(),<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      new Path(tabledir, daughterTwoRI.getEncodedName()));<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  }<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>  private void deleteDaughterRegions(final MasterProcedureEnv env) throws IOException {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    final Path tabledir = CommonFSUtils.getTableDir(mfs.getRootDir(), getTableName());<a name="line.644"></a>
 <span class="sourceLineNo">645</span>    HRegionFileSystem.deleteRegionFromFileSystem(env.getMasterConfiguration(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      mfs.getFileSystem(), tabledir, daughterTwoRI);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>  }<a name="line.647"></a>
-<span class="sourceLineNo">648</span><a name="line.648"></a>
-<span class="sourceLineNo">649</span>  /**<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * Create Split directory<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   * @param env MasterProcedureEnv<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   */<a name="line.652"></a>
-<span class="sourceLineNo">653</span>  private Pair&lt;Integer, Integer&gt; splitStoreFiles(final MasterProcedureEnv env,<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      final HRegionFileSystem regionFs) throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    final Configuration conf = env.getMasterConfiguration();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // The following code sets up a thread pool executor with as many slots as<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    // there's files to split. It then fires up everything, waits for<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    // completion and finally checks for any exception<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    //<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    // Note: From HBASE-26187, splitStoreFiles now creates daughter region dirs straight under the<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    // table dir. In case of failure, the proc would go through this again, already existing<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    // region dirs and split files would just be ignored, new split files should get created.<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    int nbFiles = 0;<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    final Map&lt;String, Collection&lt;StoreFileInfo&gt;&gt; files =<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        new HashMap&lt;String, Collection&lt;StoreFileInfo&gt;&gt;(htd.getColumnFamilyCount());<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    for (ColumnFamilyDescriptor cfd : htd.getColumnFamilies()) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      String family = cfd.getNameAsString();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      Collection&lt;StoreFileInfo&gt; sfis = regionFs.getStoreFiles(family);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      if (sfis == null) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        continue;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      }<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      Collection&lt;StoreFileInfo&gt; filteredSfis = null;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      for (StoreFileInfo sfi : sfis) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        // Filter. There is a lag cleaning up compacted reference files. They get cleared<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        // after a delay in case outstanding Scanners still have references. Because of this,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        // the listing of the Store content may have straggler reference files. Skip these.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        // It should be safe to skip references at this point because we checked above with<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        // the region if it thinks it is splittable and if we are here, it thinks it is<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // splitable.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        if (sfi.isReference()) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          LOG.info("Skipping split of " + sfi + "; presuming ready for archiving.");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          continue;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>        }<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        if (filteredSfis == null) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          filteredSfis = new ArrayList&lt;StoreFileInfo&gt;(sfis.size());<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          files.put(family, filteredSfis);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        filteredSfis.add(sfi);<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        nbFiles++;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    if (nbFiles == 0) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      // no file needs to be splitted.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      return new Pair&lt;Integer, Integer&gt;(0, 0);<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    }<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    // Max #threads is the smaller of the number of storefiles or the default max determined above.<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    int maxThreads = Math.min(<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      conf.getInt(HConstants.REGION_SPLIT_THREADS_MAX,<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        conf.getInt(HStore.BLOCKING_STOREFILES_KEY, HStore.DEFAULT_BLOCKING_STOREFILE_COUNT)),<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      nbFiles);<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    LOG.info("pid=" + getProcId() + " splitting " + nbFiles + " storefiles, region=" +<a name="line.702"></a>
-<span class="sourceLineNo">703</span>        getParentRegion().getShortNameToLog() + ", threads=" + maxThreads);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    final ExecutorService threadPool = Executors.newFixedThreadPool(maxThreads,<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      new ThreadFactoryBuilder().setNameFormat("StoreFileSplitter-pool-%d").setDaemon(true)<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        .setUncaughtExceptionHandler(Threads.LOGGING_EXCEPTION_HANDLER).build());<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    final List&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt; futures = new ArrayList&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt;(nbFiles);<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>    // Split each store file.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    for (Map.Entry&lt;String, Collection&lt;StoreFileInfo&gt;&gt; e : files.entrySet()) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      byte[] familyName = Bytes.toBytes(e.getKey());<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      final ColumnFamilyDescriptor hcd = htd.getColumnFamily(familyName);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      final Collection&lt;StoreFileInfo&gt; storeFiles = e.getValue();<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      if (storeFiles != null &amp;&amp; storeFiles.size() &gt; 0) {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        final Configuration storeConfiguration =<a name="line.715"></a>
-<span class="sourceLineNo">716</span>          StoreUtils.createStoreConfiguration(env.getMasterConfiguration(), htd, hcd);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        for (StoreFileInfo storeFileInfo : storeFiles) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          // As this procedure is running on master, use CacheConfig.DISABLED means<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          // don't cache any block.<a name="line.719"></a>
-<span class="sourceLineNo">720</span>          // We also need to pass through a suitable CompoundConfiguration as if this<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          // is running in a regionserver's Store context, or we might not be able<a name="line.721"></a>
-<span class="sourceLineNo">722</span>          // to read the hfiles.<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          storeFileInfo.setConf(storeConfiguration);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          StoreFileSplitter sfs = new StoreFileSplitter(regionFs, familyName,<a name="line.724"></a>
-<span class="sourceLineNo">725</span>            new HStoreFile(storeFileInfo, hcd.getBloomFilterType(), CacheConfig.DISABLED));<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          futures.add(threadPool.submit(sfs));<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Shutdown the pool<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    threadPool.shutdown();<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>    // Wait for all the tasks to finish.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // When splits ran on the RegionServer, how-long-to-wait-configuration was named<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // hbase.regionserver.fileSplitTimeout. If set, use its value.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    long fileSplitTimeout = conf.getLong("hbase.master.fileSplitTimeout",<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      conf.getLong("hbase.regionserver.fileSplitTimeout", 600000));<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    try {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      boolean stillRunning = !threadPool.awaitTermination(fileSplitTimeout, TimeUnit.MILLISECONDS);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      if (stillRunning) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        threadPool.shutdownNow();<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        // wait for the thread to shutdown completely.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        while (!threadPool.isTerminated()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>          Thread.sleep(50);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        }<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        throw new IOException(<a name="line.746"></a>
-<span class="sourceLineNo">747</span>            "Took too long to split the" + " files and create the references, aborting split");<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    } catch (InterruptedException e) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    }<a name="line.751"></a>
-<span class="sourceLineNo">752</span><a name="line.752"></a>
-<span class="sourceLineNo">753</span>    int daughterA = 0;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    int daughterB = 0;<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    // Look for any exception<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    for (Future&lt;Pair&lt;Path, Path&gt;&gt; future : futures) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      try {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>        Pair&lt;Path, Path&gt; p = future.get();<a name="line.758"></a>
-<span class="sourceLineNo">759</span>        daughterA += p.getFirst() != null ? 1 : 0;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        daughterB += p.getSecond() != null ? 1 : 0;<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      } catch (InterruptedException e) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>        throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      } catch (ExecutionException e) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>        throw new IOException(e);<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span>    if (LOG.isDebugEnabled()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      LOG.debug("pid=" + getProcId() + " split storefiles for region " +<a name="line.769"></a>
-<span class="sourceLineNo">770</span>          getParentRegion().getShortNameToLog() + " Daughter A: " + daughterA +<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          " storefiles, Daughter B: " + daughterB + " storefiles.");<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    }<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    return new Pair&lt;Integer, Integer&gt;(daughterA, daughterB);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>  }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>  private void assertReferenceFileCount(final FileSystem fs, final int expectedReferenceFileCount,<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      final Path dir) throws IOException {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    if (expectedReferenceFileCount != 0 &amp;&amp;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        expectedReferenceFileCount != FSUtils.getRegionReferenceFileCount(fs, dir)) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      throw new IOException("Failing split. Expected reference file count isn't equal.");<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>  private Pair&lt;Path, Path&gt; splitStoreFile(HRegionFileSystem regionFs, byte[] family, HStoreFile sf)<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    throws IOException {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    if (LOG.isDebugEnabled()) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      LOG.debug("pid=" + getProcId() + " splitting started for store file: " +<a name="line.787"></a>
-<span class="sourceLineNo">788</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span><a name="line.790"></a>
-<span class="sourceLineNo">791</span>    final byte[] splitRow = getSplitRow();<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    final String familyName = Bytes.toString(family);<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    final Path path_first = regionFs.splitStoreFile(this.daughterOneRI, familyName, sf, splitRow,<a name="line.793"></a>
-<span class="sourceLineNo">794</span>        false, splitPolicy);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    final Path path_second = regionFs.splitStoreFile(this.daughterTwoRI, familyName, sf, splitRow,<a name="line.795"></a>
-<span class="sourceLineNo">796</span>       true, splitPolicy);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    if (LOG.isDebugEnabled()) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      LOG.debug("pid=" + getProcId() + " splitting complete for store file: " +<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    return new Pair&lt;Path,Path&gt;(path_first, path_second);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  }<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>  /**<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * Utility class used to do the file splitting / reference writing<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * in parallel instead of sequentially.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   */<a name="line.807"></a>
-<span class="sourceLineNo">808</span>  private class StoreFileSplitter implements Callable&lt;Pair&lt;Path,Path&gt;&gt; {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    private final HRegionFileSystem regionFs;<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    private final byte[] family;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    private final HStoreFile sf;<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    /**<a name="line.813"></a>
-<span class="sourceLineNo">814</span>     * Constructor that takes what it needs to split<a name="line.814"></a>
-<span class="sourceLineNo">815</span>     * @param regionFs the file system<a name="line.815"></a>
-<span class="sourceLineNo">816</span>     * @param family Family that contains the store file<a name="line.816"></a>
-<span class="sourceLineNo">817</span>     * @param sf which file<a name="line.817"></a>
-<span class="sourceLineNo">818</span>     */<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    public StoreFileSplitter(HRegionFileSystem regionFs, byte[] family, HStoreFile sf) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      this.regionFs = regionFs;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      this.sf = sf;<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      this.family = family;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>    @Override<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    public Pair&lt;Path,Path&gt; call() throws IOException {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      return splitStoreFile(regionFs, family, sf);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    }<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
+<span class="sourceLineNo">646</span>      mfs.getFileSystem(), tabledir, daughterOneRI);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    HRegionFileSystem.deleteRegionFromFileSystem(env.getMasterConfiguration(),<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      mfs.getFileSystem(), tabledir, daughterTwoRI);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * Create Split directory<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param env MasterProcedureEnv<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   */<a name="line.654"></a>
+<span class="sourceLineNo">655</span>  private Pair&lt;Integer, Integer&gt; splitStoreFiles(final MasterProcedureEnv env,<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      final HRegionFileSystem regionFs) throws IOException {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    final Configuration conf = env.getMasterConfiguration();<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    // The following code sets up a thread pool executor with as many slots as<a name="line.659"></a>
+<span class="sourceLineNo">660</span>    // there's files to split. It then fires up everything, waits for<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    // completion and finally checks for any exception<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    //<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    // Note: From HBASE-26187, splitStoreFiles now creates daughter region dirs straight under the<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    // table dir. In case of failure, the proc would go through this again, already existing<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    // region dirs and split files would just be ignored, new split files should get created.<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    int nbFiles = 0;<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    final Map&lt;String, Collection&lt;StoreFileInfo&gt;&gt; files =<a name="line.667"></a>
+<span class="sourceLineNo">668</span>        new HashMap&lt;String, Collection&lt;StoreFileInfo&gt;&gt;(htd.getColumnFamilyCount());<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    for (ColumnFamilyDescriptor cfd : htd.getColumnFamilies()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      String family = cfd.getNameAsString();<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      Collection&lt;StoreFileInfo&gt; sfis = regionFs.getStoreFiles(family);<a name="line.671"></a>
+<span class="sourceLineNo">672</span>      if (sfis == null) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        continue;<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      Collection&lt;StoreFileInfo&gt; filteredSfis = null;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      for (StoreFileInfo sfi : sfis) {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        // Filter. There is a lag cleaning up compacted reference files. They get cleared<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        // after a delay in case outstanding Scanners still have references. Because of this,<a name="line.678"></a>
+<span class="sourceLineNo">679</span>        // the listing of the Store content may have straggler reference files. Skip these.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        // It should be safe to skip references at this point because we checked above with<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        // the region if it thinks it is splittable and if we are here, it thinks it is<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        // splitable.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>        if (sfi.isReference()) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>          LOG.info("Skipping split of " + sfi + "; presuming ready for archiving.");<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          continue;<a name="line.685"></a>
+<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        if (filteredSfis == null) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>          filteredSfis = new ArrayList&lt;StoreFileInfo&gt;(sfis.size());<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          files.put(family, filteredSfis);<a name="line.689"></a>
+<span class="sourceLineNo">690</span>        }<a name="line.690"></a>
+<span class="sourceLineNo">691</span>        filteredSfis.add(sfi);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>        nbFiles++;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (nbFiles == 0) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      // no file needs to be splitted.<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      return new Pair&lt;Integer, Integer&gt;(0, 0);<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    // Max #threads is the smaller of the number of storefiles or the default max determined above.<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    int maxThreads = Math.min(<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      conf.getInt(HConstants.REGION_SPLIT_THREADS_MAX,<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        conf.getInt(HStore.BLOCKING_STOREFILES_KEY, HStore.DEFAULT_BLOCKING_STOREFILE_COUNT)),<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      nbFiles);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    LOG.info("pid=" + getProcId() + " splitting " + nbFiles + " storefiles, region=" +<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        getParentRegion().getShortNameToLog() + ", threads=" + maxThreads);<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    final ExecutorService threadPool = Executors.newFixedThreadPool(maxThreads,<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      new ThreadFactoryBuilder().setNameFormat("StoreFileSplitter-pool-%d").setDaemon(true)<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        .setUncaughtExceptionHandler(Threads.LOGGING_EXCEPTION_HANDLER).build());<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    final List&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt; futures = new ArrayList&lt;Future&lt;Pair&lt;Path, Path&gt;&gt;&gt;(nbFiles);<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span>    // Split each store file.<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    for (Map.Entry&lt;String, Collection&lt;StoreFileInfo&gt;&gt; e : files.entrySet()) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      byte[] familyName = Bytes.toBytes(e.getKey());<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      final ColumnFamilyDescriptor hcd = htd.getColumnFamily(familyName);<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      final Collection&lt;StoreFileInfo&gt; storeFiles = e.getValue();<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      if (storeFiles != null &amp;&amp; storeFiles.size() &gt; 0) {<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        final Configuration storeConfiguration =<a name="line.717"></a>
+<span class="sourceLineNo">718</span>          StoreUtils.createStoreConfiguration(env.getMasterConfiguration(), htd, hcd);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>        for (StoreFileInfo storeFileInfo : storeFiles) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>          // As this procedure is running on master, use CacheConfig.DISABLED means<a name="line.720"></a>
+<span class="sourceLineNo">721</span>          // don't cache any block.<a name="line.721"></a>
+<span class="sourceLineNo">722</span>          // We also need to pass through a suitable CompoundConfiguration as if this<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          // is running in a regionserver's Store context, or we might not be able<a name="line.723"></a>
+<span class="sourceLineNo">724</span>          // to read the hfiles.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>          storeFileInfo.setConf(storeConfiguration);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>          StoreFileSplitter sfs = new StoreFileSplitter(regionFs, familyName,<a name="line.726"></a>
+<span class="sourceLineNo">727</span>            new HStoreFile(storeFileInfo, hcd.getBloomFilterType(), CacheConfig.DISABLED));<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          futures.add(threadPool.submit(sfs));<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    // Shutdown the pool<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    threadPool.shutdown();<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    // Wait for all the tasks to finish.<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    // When splits ran on the RegionServer, how-long-to-wait-configuration was named<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    // hbase.regionserver.fileSplitTimeout. If set, use its value.<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    long fileSplitTimeout = conf.getLong("hbase.master.fileSplitTimeout",<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      conf.getLong("hbase.regionserver.fileSplitTimeout", 600000));<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    try {<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      boolean stillRunning = !threadPool.awaitTermination(fileSplitTimeout, TimeUnit.MILLISECONDS);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      if (stillRunning) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        threadPool.shutdownNow();<a name="line.743"></a>
+<span class="sourceLineNo">744</span>        // wait for the thread to shutdown completely.<a name="line.744"></a>
+<span class="sourceLineNo">745</span>        while (!threadPool.isTerminated()) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>          Thread.sleep(50);<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        }<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        throw new IOException(<a name="line.748"></a>
+<span class="sourceLineNo">749</span>            "Took too long to split the" + " files and create the references, aborting split");<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span>    } catch (InterruptedException e) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span>    int daughterA = 0;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    int daughterB = 0;<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    // Look for any exception<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    for (Future&lt;Pair&lt;Path, Path&gt;&gt; future : futures) {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      try {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>        Pair&lt;Path, Path&gt; p = future.get();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>        daughterA += p.getFirst() != null ? 1 : 0;<a name="line.761"></a>
+<span class="sourceLineNo">762</span>        daughterB += p.getSecond() != null ? 1 : 0;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      } catch (InterruptedException e) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      } catch (ExecutionException e) {<a name="line.765"></a>
+<span class="sourceLineNo">766</span>        throw new IOException(e);<a name="line.766"></a>
+<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    if (LOG.isDebugEnabled()) {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      LOG.debug("pid=" + getProcId() + " split storefiles for region " +<a name="line.771"></a>
+<span class="sourceLineNo">772</span>          getParentRegion().getShortNameToLog() + " Daughter A: " + daughterA +<a name="line.772"></a>
+<span class="sourceLineNo">773</span>          " storefiles, Daughter B: " + daughterB + " storefiles.");<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return new Pair&lt;Integer, Integer&gt;(daughterA, daughterB);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>  private void assertSplitResultFilesCount(final FileSystem fs,<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      final int expectedSplitResultFileCount, Path dir)<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    throws IOException {<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    if (expectedSplitResultFileCount != 0) {<a name="line.781"></a>
+<span class="sourceLineNo">782</span>      int resultFileCount = FSUtils.getRegionReferenceAndLinkFileCount(fs, dir);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      if (expectedSplitResultFileCount != resultFileCount) {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        throw new IOException("Failing split. Didn't have expected reference and HFileLink files"<a name="line.784"></a>
+<span class="sourceLineNo">785</span>            + ", expected=" + expectedSplitResultFileCount + ", actual=" + resultFileCount);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      }<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    }<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  private Pair&lt;Path, Path&gt; splitStoreFile(HRegionFileSystem regionFs, byte[] family, HStoreFile sf)<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    throws IOException {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    if (LOG.isDebugEnabled()) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      LOG.debug("pid=" + getProcId() + " splitting started for store file: " +<a name="line.793"></a>
+<span class="sourceLineNo">794</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    }<a name="line.795"></a>
+<span class="sourceLineNo">796</span><a name="line.796"></a>
+<span class="sourceLineNo">797</span>    final byte[] splitRow = getSplitRow();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>    final String familyName = Bytes.toString(family);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    final Path path_first = regionFs.splitStoreFile(this.daughterOneRI, familyName, sf, splitRow,<a name="line.799"></a>
+<span class="sourceLineNo">800</span>        false, splitPolicy);<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    final Path path_second = regionFs.splitStoreFile(this.daughterTwoRI, familyName, sf, splitRow,<a name="line.801"></a>
+<span class="sourceLineNo">802</span>       true, splitPolicy);<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    if (LOG.isDebugEnabled()) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>      LOG.debug("pid=" + getProcId() + " splitting complete for store file: " +<a name="line.804"></a>
+<span class="sourceLineNo">805</span>          sf.getPath() + " for region: " + getParentRegion().getShortNameToLog());<a name="line.805"></a>
+<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    return new Pair&lt;Path,Path&gt;(path_first, path_second);<a name="line.807"></a>
+<span class="sourceLineNo">808</span>  }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span>  /**<a name="line.810"></a>
+<span class="sourceLineNo">811</span>   * Utility class used to do the file splitting / reference writing<a name="line.811"></a>
+<span class="sourceLineNo">812</span>   * in parallel instead of sequentially.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>   */<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  private class StoreFileSplitter implements Callable&lt;Pair&lt;Path,Path&gt;&gt; {<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    private final HRegionFileSystem regionFs;<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    private final byte[] family;<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    private final HStoreFile sf;<a name="line.817"></a>
+<span class="sourceLineNo">818</span><a name="line.818"></a>
+<span class="sourceLineNo">819</span>    /**<a name="line.819"></a>
+<span class="sourceLineNo">820</span>     * Constructor that takes what it needs to split<a name="line.820"></a>
+<span class="sourceLineNo">821</span>     * @param regionFs the file system<a name="line.821"></a>
+<span class="sourceLineNo">822</span>     * @param family Family that contains the store file<a name="line.822"></a>
+<span class="sourceLineNo">823</span>     * @param sf which file<a name="line.823"></a>
+<span class="sourceLineNo">824</span>     */<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    public StoreFileSplitter(HRegionFileSystem regionFs, byte[] family, HStoreFile sf) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      this.regionFs = regionFs;<a name="line.826"></a>
+<span class="sourceLineNo">827</span>      this.sf = sf;<a name="line.827"></a>
+<span class="sourceLineNo">828</span>      this.family = family;<a name="line.828"></a>
+<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
 <span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>  /**<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * Post split region actions before the Point-of-No-Return step<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @param env MasterProcedureEnv<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   **/<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  private void preSplitRegionBeforeMETA(final MasterProcedureEnv env)<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      throws IOException, InterruptedException {<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    final List&lt;Mutation&gt; metaEntries = new ArrayList&lt;Mutation&gt;();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    if (cpHost != null) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      cpHost.preSplitBeforeMETAAction(getSplitRow(), metaEntries, getUser());<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      try {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        for (Mutation p : metaEntries) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          RegionInfo.parseRegionName(p.getRow());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        }<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      } catch (IOException e) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        LOG.error("pid=" + getProcId() + " row key of mutation from coprocessor not parsable as "<a name="line.846"></a>
-<span class="sourceLineNo">847</span>            + "region name."<a name="line.847"></a>
-<span class="sourceLineNo">848</span>            + "Mutations from coprocessor should only for hbase:meta table.");<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        throw e;<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    }<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * Add daughter regions to META<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * @param env MasterProcedureEnv<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   */<a name="line.857"></a>
-<span class="sourceLineNo">858</span>  private void updateMeta(final MasterProcedureEnv env) throws IOException {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    env.getAssignmentManager().markRegionAsSplit(getParentRegion(), getParentRegionServerName(env),<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        daughterOneRI, daughterTwoRI);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>  }<a name="line.861"></a>
-<span class="sourceLineNo">862</span><a name="line.862"></a>
-<span class="sourceLineNo">863</span>  /**<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * Pre split region actions after the Point-of-No-Return step<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * @param env MasterProcedureEnv<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   **/<a name="line.866"></a>
-<span class="sourceLineNo">867</span>  private void preSplitRegionAfterMETA(final MasterProcedureEnv env)<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      throws IOException, InterruptedException {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    if (cpHost != null) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      cpHost.preSplitAfterMETAAction(getUser());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  }<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>  /**<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * Post split region actions<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * @param env MasterProcedureEnv<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   **/<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  private void postSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    if (cpHost != null) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      cpHost.postCompletedSplitRegionAction(daughterOneRI, daughterTwoRI, getUser());<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>  private ServerName getParentRegionServerName(final MasterProcedureEnv env) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return env.getMasterServices().getAssignmentManager().getRegionStates()<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      .getRegionServerOfRegion(getParentRegion());<a name="line.888"></a>
-<span class="sourceLineNo">889</span>  }<a name="line.889"></a>
-<span class="sourceLineNo">890</span><a name="line.890"></a>
-<span class="sourceLineNo">891</span>  private TransitRegionStateProcedure[] createUnassignProcedures(MasterProcedureEnv env)<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      throws IOException {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    return AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(env,<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      Stream.of(getParentRegion()), getRegionReplication(env));<a name="line.894"></a>
+<span class="sourceLineNo">831</span>    @Override<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    public Pair&lt;Path,Path&gt; call() throws IOException {<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      return splitStoreFile(regionFs, family, sf);<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
+<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>  /**<a name="line.837"></a>
+<span class="sourceLineNo">838</span>   * Post split region actions before the Point-of-No-Return step<a name="line.838"></a>
+<span class="sourceLineNo">839</span>   * @param env MasterProcedureEnv<a name="line.839"></a>
+<span class="sourceLineNo">840</span>   **/<a name="line.840"></a>
+<span class="sourceLineNo">841</span>  private void preSplitRegionBeforeMETA(final MasterProcedureEnv env)<a name="line.841"></a>
+<span class="sourceLineNo">842</span>      throws IOException, InterruptedException {<a name="line.842"></a>
+<span class="sourceLineNo">843</span>    final List&lt;Mutation&gt; metaEntries = new ArrayList&lt;Mutation&gt;();<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    if (cpHost != null) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      cpHost.preSplitBeforeMETAAction(getSplitRow(), metaEntries, getUser());<a name="line.846"></a>
+<span class="sourceLineNo">847</span>      try {<a name="line.847"></a>
+<span class="sourceLineNo">848</span>        for (Mutation p : metaEntries) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          RegionInfo.parseRegionName(p.getRow());<a name="line.849"></a>
+<span class="sourceLineNo">850</span>        }<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      } catch (IOException e) {<a name="line.851"></a>
+<span class="sourceLineNo">852</span>        LOG.error("pid=" + getProcId() + " row key of mutation from coprocessor not parsable as "<a name="line.852"></a>
+<span class="sourceLineNo">853</span>            + "region name."<a name="line.853"></a>
+<span class="sourceLineNo">854</span>            + "Mutations from coprocessor should only for hbase:meta table.");<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        throw e;<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  /**<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * Add daughter regions to META<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   * @param env MasterProcedureEnv<a name="line.862"></a>
+<span class="sourceLineNo">863</span>   */<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  private void updateMeta(final MasterProcedureEnv env) throws IOException {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    env.getAssignmentManager().markRegionAsSplit(getParentRegion(), getParentRegionServerName(env),<a name="line.865"></a>
+<span class="sourceLineNo">866</span>        daughterOneRI, daughterTwoRI);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>  }<a name="line.867"></a>
+<span class="sourceLineNo">868</span><a name="line.868"></a>
+<span class="sourceLineNo">869</span>  /**<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * Pre split region actions after the Point-of-No-Return step<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * @param env MasterProcedureEnv<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   **/<a name="line.872"></a>
+<span class="sourceLineNo">873</span>  private void preSplitRegionAfterMETA(final MasterProcedureEnv env)<a name="line.873"></a>
+<span class="sourceLineNo">874</span>      throws IOException, InterruptedException {<a name="line.874"></a>
+<span class="sourceLineNo">875</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.875"></a>
+<span class="sourceLineNo">876</span>    if (cpHost != null) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span>      cpHost.preSplitAfterMETAAction(getUser());<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    }<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  }<a name="line.879"></a>
+<span class="sourceLineNo">880</span><a name="line.880"></a>
+<span class="sourceLineNo">881</span>  /**<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   * Post split region actions<a name="line.882"></a>
+<span class="sourceLineNo">883</span>   * @param env MasterProcedureEnv<a name="line.883"></a>
+<span class="sourceLineNo">884</span>   **/<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  private void postSplitRegion(final MasterProcedureEnv env) throws IOException {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    if (cpHost != null) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      cpHost.postCompletedSplitRegionAction(daughterOneRI, daughterTwoRI, getUser());<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
+<span class="sourceLineNo">891</span><a name="line.891"></a>
+<span class="sourceLineNo">892</span>  private ServerName getParentRegionServerName(final MasterProcedureEnv env) {<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return env.getMasterServices().getAssignmentManager().getRegionStates()<a name="line.893"></a>
+<span class="sourceLineNo">894</span>      .getRegionServerOfRegion(getParentRegion());<a name="line.894"></a>
 <span class="sourceLineNo">895</span>  }<a name="line.895"></a>
 <span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>  private TransitRegionStateProcedure[] createAssignProcedures(MasterProcedureEnv env)<a name="line.897"></a>
+<span class="sourceLineNo">897</span>  private TransitRegionStateProcedure[] createUnassignProcedures(MasterProcedureEnv env)<a name="line.897"></a>
 <span class="sourceLineNo">898</span>      throws IOException {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    List&lt;RegionInfo&gt; hris = new ArrayList&lt;RegionInfo&gt;(2);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    hris.add(daughterOneRI);<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    hris.add(daughterTwoRI);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    return AssignmentManagerUtil.createAssignProceduresForSplitDaughters(env, hris,<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      getRegionReplication(env), getParentRegionServerName(env));<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  }<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>  private int getRegionReplication(final MasterProcedureEnv env) throws IOException {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    final TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    return htd.getRegionReplication();<a name="line.908"></a>
-<span class="sourceLineNo">909</span>  }<a name="line.909"></a>
-<span class="sourceLineNo">910</span><a name="line.910"></a>
-<span class="sourceLineNo">911</span>  private void writeMaxSequenceIdFile(MasterProcedureEnv env) throws IOException {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    MasterFileSystem fs = env.getMasterFileSystem();<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    long maxSequenceId = WALSplitUtil.getMaxRegionSequenceId(env.getMasterConfiguration(),<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      getParentRegion(), fs::getFileSystem, fs::getWALFileSystem);<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    if (maxSequenceId &gt; 0) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.916"></a>
-<span class="sourceLineNo">917</span>        getWALRegionDir(env, daughterOneRI), maxSequenceId);<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        getWALRegionDir(env, daughterTwoRI), maxSequenceId);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  @Override<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  protected boolean abort(MasterProcedureEnv env) {<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    // Abort means rollback. We can't rollback all steps. HBASE-18018 added abort to all<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // Procedures. Here is a Procedure that has a PONR and cannot be aborted wants it enters this<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    // range of steps; what do we do for these should an operator want to cancel them? HBASE-20022.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    return isRollbackSupported(getCurrentState())? super.abort(env): false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
-<span class="sourceLineNo">930</span>}<a name="line.930"></a>
+<span class="sourceLineNo">899</span>    return AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(env,<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      Stream.of(getParentRegion()), getRegionReplication(env));<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  }<a name="line.901"></a>
+<span class="sourceLineNo">902</span><a name="line.902"></a>
+<span class="sourceLineNo">903</span>  private TransitRegionStateProcedure[] createAssignProcedures(MasterProcedureEnv env)<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      throws IOException {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    List&lt;RegionInfo&gt; hris = new ArrayList&lt;RegionInfo&gt;(2);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    hris.add(daughterOneRI);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    hris.add(daughterTwoRI);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    return AssignmentManagerUtil.createAssignProceduresForSplitDaughters(env, hris,<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      getRegionReplication(env), getParentRegionServerName(env));<a name="line.909"></a>
+<span class="sourceLineNo">910</span>  }<a name="line.910"></a>
+<span class="sourceLineNo">911</span><a name="line.911"></a>
+<span class="sourceLineNo">912</span>  private int getRegionReplication(final MasterProcedureEnv env) throws IOException {<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    final TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName());<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    return htd.getRegionReplication();<a name="line.914"></a>
+<span class="sourceLineNo">915</span>  }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span>  private void writeMaxSequenceIdFile(MasterProcedureEnv env) throws IOException {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    MasterFileSystem fs = env.getMasterFileSystem();<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    long maxSequenceId = WALSplitUtil.getMaxRegionSequenceId(env.getMasterConfiguration(),<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      getParentRegion(), fs::getFileSystem, fs::getWALFileSystem);<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    if (maxSequenceId &gt; 0) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.922"></a>
+<span class="sourceLineNo">923</span>        getWALRegionDir(env, daughterOneRI), maxSequenceId);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      WALSplitUtil.writeRegionSequenceIdFile(fs.getWALFileSystem(),<a name="line.924"></a>
+<span class="sourceLineNo">925</span>        getWALRegionDir(env, daughterTwoRI), maxSequenceId);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    }<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  @Override<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  protected boolean abort(MasterProcedureEnv env) {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>    // Abort means rollback. We can't rollback all steps. HBASE-18018 added abort to all<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    // Procedures. Here is a Procedure that has a PONR and cannot be aborted wants it enters this<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    // range of steps; what do we do for these should an operator want to cancel them? HBASE-20022.<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    return isRollbackSupported(getCurrentState())? super.abort(env): false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span>  }<a name="line.935"></a>
+<span class="sourceLineNo">936</span>}<a name="line.936"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
index fda150e..e5a9aa7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
@@ -1076,8 +1076,8 @@
 <span class="sourceLineNo">1068</span>      }<a name="line.1068"></a>
 <span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    LOG.info("Opened {}; next sequenceid={}; {}, {}",<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      this.getRegionInfo().getShortNameToLog(), nextSeqId, this.splitPolicy, this.flushPolicy);<a name="line.1072"></a>
+<span class="sourceLineNo">1071</span>    LOG.info("Opened {}; next sequenceid={}; {}, {}", this.getRegionInfo().getShortNameToLog(),<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>        nextSeqId, this.splitPolicy, this.flushPolicy);<a name="line.1072"></a>
 <span class="sourceLineNo">1073</span><a name="line.1073"></a>
 <span class="sourceLineNo">1074</span>    // A region can be reopened if failed a split; reset flags<a name="line.1074"></a>
 <span class="sourceLineNo">1075</span>    this.closing.set(false);<a name="line.1075"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
index fda150e..e5a9aa7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
@@ -1076,8 +1076,8 @@
 <span class="sourceLineNo">1068</span>      }<a name="line.1068"></a>
 <span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
 <span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    LOG.info("Opened {}; next sequenceid={}; {}, {}",<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      this.getRegionInfo().getShortNameToLog(), nextSeqId, this.splitPolicy, this.flushPolicy);<a name="line.1072"></a>
+<span class="sourceLineNo">1071</span>    LOG.info("Opened {}; next sequenceid={}; {}, {}", this.getRegionInfo().getShortNameToLog(),<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>        nextSeqId, this.splitPolicy, this.flushPolicy);<a name="line.1072"></a>
 <span class="sourceLineNo">1073</span><a name="line.1073"></a>
 <span class="sourceLineNo">1074</span>    // A region can be reopened if failed a split; reset flags<a name="line.1074"></a>
 <span class="sourceLineNo">1075</span>    this.closing.set(false);<a name="line.1075"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
index fda150e..e5a9aa7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
... 37329 lines suppressed ...