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 2019/04/05 14:55:14 UTC

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

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 25d904d  Published site at 04937baf7b7f072c0f3c2544ef9183416b8dd00b.
25d904d is described below

commit 25d904dac646bb8f91ff276f74d1f84ddca773c7
Author: jenkins <bu...@apache.org>
AuthorDate: Fri Apr 5 14:54:58 2019 +0000

    Published site at 04937baf7b7f072c0f3c2544ef9183416b8dd00b.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |   22 +-
 checkstyle.rss                                     |   28 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/constant-values.html                    |    4 +-
 ...seAdmin.AddColumnFamilyProcedureBiConsumer.html |    6 +-
 ...seAdmin.CreateNamespaceProcedureBiConsumer.html |    6 +-
 ...cHBaseAdmin.CreateTableProcedureBiConsumer.html |    6 +-
 ...dmin.DeleteColumnFamilyProcedureBiConsumer.html |    6 +-
 ...seAdmin.DeleteNamespaceProcedureBiConsumer.html |    6 +-
 ...cHBaseAdmin.DeleteTableProcedureBiConsumer.html |    8 +-
 ...HBaseAdmin.DisableTableProcedureBiConsumer.html |    6 +-
 ...cHBaseAdmin.EnableTableProcedureBiConsumer.html |    6 +-
 ...eAdmin.MergeTableRegionProcedureBiConsumer.html |    6 +-
 ...dmin.ModifyColumnFamilyProcedureBiConsumer.html |    6 +-
 ...seAdmin.ModifyNamespaceProcedureBiConsumer.html |    6 +-
 ...cHBaseAdmin.ModifyTableProcedureBiConsumer.html |    6 +-
 ...yncHBaseAdmin.NamespaceProcedureBiConsumer.html |   14 +-
 .../RawAsyncHBaseAdmin.ProcedureBiConsumer.html    |   10 +-
 ...cHBaseAdmin.ReplicationProcedureBiConsumer.html |   14 +-
 ...eAdmin.SplitTableRegionProcedureBiConsumer.html |    6 +-
 ...awAsyncHBaseAdmin.TableProcedureBiConsumer.html |   14 +-
 ...BaseAdmin.TruncateTableProcedureBiConsumer.html |    6 +-
 .../hadoop/hbase/client/RawAsyncHBaseAdmin.html    |  302 +-
 .../src-html/org/apache/hadoop/hbase/Version.html  |    4 +-
 ...seAdmin.AddColumnFamilyProcedureBiConsumer.html | 5958 ++++++++++----------
 .../client/RawAsyncHBaseAdmin.AdminRpcCall.html    | 5958 ++++++++++----------
 .../hbase/client/RawAsyncHBaseAdmin.Converter.html | 5958 ++++++++++----------
 ...seAdmin.CreateNamespaceProcedureBiConsumer.html | 5958 ++++++++++----------
 ...cHBaseAdmin.CreateTableProcedureBiConsumer.html | 5958 ++++++++++----------
 ...dmin.DeleteColumnFamilyProcedureBiConsumer.html | 5958 ++++++++++----------
 ...seAdmin.DeleteNamespaceProcedureBiConsumer.html | 5958 ++++++++++----------
 ...cHBaseAdmin.DeleteTableProcedureBiConsumer.html | 5958 ++++++++++----------
 ...HBaseAdmin.DisableTableProcedureBiConsumer.html | 5958 ++++++++++----------
 ...cHBaseAdmin.EnableTableProcedureBiConsumer.html | 5958 ++++++++++----------
 .../client/RawAsyncHBaseAdmin.MasterRpcCall.html   | 5958 ++++++++++----------
 ...eAdmin.MergeTableRegionProcedureBiConsumer.html | 5958 ++++++++++----------
 ...dmin.ModifyColumnFamilyProcedureBiConsumer.html | 5958 ++++++++++----------
 ...seAdmin.ModifyNamespaceProcedureBiConsumer.html | 5958 ++++++++++----------
 ...cHBaseAdmin.ModifyTableProcedureBiConsumer.html | 5958 ++++++++++----------
 ...yncHBaseAdmin.NamespaceProcedureBiConsumer.html | 5958 ++++++++++----------
 .../RawAsyncHBaseAdmin.ProcedureBiConsumer.html    | 5958 ++++++++++----------
 ...cHBaseAdmin.ReplicationProcedureBiConsumer.html | 5958 ++++++++++----------
 ...eAdmin.SplitTableRegionProcedureBiConsumer.html | 5958 ++++++++++----------
 .../client/RawAsyncHBaseAdmin.TableOperator.html   | 5958 ++++++++++----------
 ...awAsyncHBaseAdmin.TableProcedureBiConsumer.html | 5958 ++++++++++----------
 ...BaseAdmin.TruncateTableProcedureBiConsumer.html | 5958 ++++++++++----------
 .../hadoop/hbase/client/RawAsyncHBaseAdmin.html    | 5958 ++++++++++----------
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-management.html                              |    2 +-
 licenses.html                                      |    2 +-
 mailing-lists.html                                 |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 scm.html                                           |    2 +-
 sponsors.html                                      |    2 +-
 summary.html                                       |    2 +-
 supportingprojects.html                            |    2 +-
 team.html                                          |    2 +-
 testdevapidocs/allclasses-frame.html               |    2 +-
 testdevapidocs/allclasses-noframe.html             |    2 +-
 testdevapidocs/index-all.html                      |   28 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |    2 +-
 .../hadoop/hbase/class-use/HBaseClassTestRule.html |  124 +-
 .../hadoop/hbase/client/TestAsyncAdminBase.html    |    2 +-
 .../hbase/client/TestAsyncAdminRpcPriority.html    |    4 +-
 ....html => TestAsyncAdminWithRegionReplicas.html} |  112 +-
 .../hbase/client/TestAsyncAggregationClient.html   |    4 +-
 .../hbase/client/TestAsyncRegionAdminApi2.html     |    4 +-
 .../hbase/client/TestAsyncRegionLocator.html       |    4 +-
 .../hbase/client/class-use/TestAsyncAdminBase.html |   22 +-
 ....html => TestAsyncAdminWithRegionReplicas.html} |   20 +-
 .../apache/hadoop/hbase/client/package-frame.html  |    2 +-
 .../hadoop/hbase/client/package-summary.html       |   70 +-
 .../apache/hadoop/hbase/client/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   10 +-
 .../hadoop/hbase/procedure/package-tree.html       |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html    |    4 +-
 .../org/apache/hadoop/hbase/test/package-tree.html |    4 +-
 testdevapidocs/overview-tree.html                  |    2 +-
 ....html => TestAsyncAdminWithRegionReplicas.html} |   32 +-
 99 files changed, 69136 insertions(+), 68924 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index 082124e..e2e8a97 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -457,7 +457,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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 c5bf62a..9becccb 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20190404142940+00'00')
-/CreationDate (D:20190404145121+00'00')
+/ModDate (D:20190405142942+00'00')
+/CreationDate (D:20190405145110+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index 51cc095..36d7ab8 100644
--- a/book.html
+++ b/book.html
@@ -41636,7 +41636,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2019-04-04 14:29:40 UTC
+Last updated 2019-04-05 14:29:42 UTC
 </div>
 </div>
 </body>
diff --git a/bulk-loads.html b/bulk-loads.html
index 6eb9ff2..32275d1 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -162,7 +162,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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 3d74ced..11ba73e 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -23398,61 +23398,61 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td>1659</td></tr>
+<td>1660</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 125).</td>
-<td>1681</td></tr>
+<td>1682</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 114).</td>
-<td>1757</td></tr>
+<td>1758</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 103).</td>
-<td>2271</td></tr>
+<td>2272</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 103).</td>
-<td>2275</td></tr>
+<td>2276</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>2298</td></tr>
+<td>2299</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>2367</td></tr>
+<td>2368</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 106).</td>
-<td>2859</td></tr>
+<td>2860</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>3043</td></tr>
+<td>3044</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 105).</td>
-<td>3185</td></tr></table></div>
+<td>3186</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.RegionAdminServiceCallable.java">org/apache/hadoop/hbase/client/RegionAdminServiceCallable.java</h3>
 <table border="0" class="table table-striped">
@@ -109168,7 +109168,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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 8e09b6c..ee89f2c 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -16930,6 +16930,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncAdminWithRegionReplicas.java">org/apache/hadoop/hbase/client/TestAsyncAdminWithRegionReplicas.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.Canary.java">org/apache/hadoop/hbase/tool/Canary.java</a>
                 </td>
                 <td>
@@ -38098,20 +38112,6 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncRegionAdminApiWithRegionReplicas.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApiWithRegionReplicas.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestLimitedScanWithFilter.java">org/apache/hadoop/hbase/client/TestLimitedScanWithFilter.java</a>
                 </td>
                 <td>
diff --git a/coc.html b/coc.html
index e0044b8..f6517bc 100644
--- a/coc.html
+++ b/coc.html
@@ -231,7 +231,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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 1595e03..ab6e365 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -311,7 +311,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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 0aad979..b50a3bb 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -507,7 +507,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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 6ea4211..fd71a21 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -184,7 +184,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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 b7ee258..72d8170 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -876,7 +876,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-04</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-04-05</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/constant-values.html b/devapidocs/constant-values.html
index 4d40952..fa2f2b7 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3913,7 +3913,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Thu Apr  4 14:35:31 UTC 2019"</code></td>
+<td class="colLast"><code>"Fri Apr  5 14:34:47 UTC 2019"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3927,7 +3927,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"fcfd0378d3e8ba0e48c79965b2217220"</code></td>
+<td class="colLast"><code>"0428d051d67fa0be9f83babf7c4a3e27"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
index 3eacaf9..97d2219 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2568">RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2569">RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AddColumnFamilyProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html#line.2570">AddColumnFamilyProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html#line.2571">AddColumnFamilyProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html#line.2575">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html#line.2576">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html
index 5449d93..de3529f 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2604">RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2605">RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateNamespaceProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html#line.2606">CreateNamespaceProcedureBiConsumer</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;namespaceName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html#line.2607">CreateNamespaceProcedureBiConsumer</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;namespaceName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html#line.2611">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateNamespaceProcedureBiConsumer.html#line.2612">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html
index 0dd1c41..c5865b3 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2490">RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2491">RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateTableProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html#line.2492">CreateTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html#line.2493">CreateTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html#line.2497">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.CreateTableProcedureBiConsumer.html#line.2498">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html
index 3cedd6a..87bc5de 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2580">RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2581">RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DeleteColumnFamilyProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html#line.2582">DeleteColumnFamilyProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html#line.2583">DeleteColumnFamilyProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html#line.2587">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteColumnFamilyProcedureBiConsumer.html#line.2588">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html
index ad9322d..ad7a4a5 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2616">RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2617">RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DeleteNamespaceProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html#line.2618">DeleteNamespaceProcedureBiConsumer</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;namespaceName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html#line.2619">DeleteNamespaceProcedureBiConsumer</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;namespaceName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html#line.2623">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteNamespaceProcedureBiConsumer.html#line.2624">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html
index 3009a95..dd9ed15 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2514">RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2515">RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -236,7 +236,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DeleteTableProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html#line.2516">DeleteTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html#line.2517">DeleteTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html#line.2521">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html#line.2522">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
@@ -266,7 +266,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onFinished</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html#line.2526">onFinished</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DeleteTableProcedureBiConsumer.html#line.2527">onFinished</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#onFinished--">onFinished</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html
index ed86f3d..b1621e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2556">RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2557">RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DisableTableProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html#line.2558">DisableTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html#line.2559">DisableTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html#line.2563">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.DisableTableProcedureBiConsumer.html#line.2564">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html
index f57022d..2862ab0 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2544">RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2545">RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>EnableTableProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html#line.2546">EnableTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html#line.2547">EnableTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html#line.2551">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.EnableTableProcedureBiConsumer.html#line.2552">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html
index bb647d0..0f89a79 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2640">RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2641">RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MergeTableRegionProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html#line.2642">MergeTableRegionProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html#line.2643">MergeTableRegionProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html#line.2647">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.MergeTableRegionProcedureBiConsumer.html#line.2648">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html
index d187503..3880254 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2592">RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2593">RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ModifyColumnFamilyProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html#line.2594">ModifyColumnFamilyProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html#line.2595">ModifyColumnFamilyProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html#line.2599">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyColumnFamilyProcedureBiConsumer.html#line.2600">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html
index 8435e96..d5b1b03 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2628">RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2629">RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ModifyNamespaceProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html#line.2630">ModifyNamespaceProcedureBiConsumer</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;namespaceName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html#line.2631">ModifyNamespaceProcedureBiConsumer</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;namespaceName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html#line.2635">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyNamespaceProcedureBiConsumer.html#line.2636">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html
index d1b5346..d69878c 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2502">RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2503">RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -233,7 +233,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ModifyTableProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html#line.2504">ModifyTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a>&nbsp;admin,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html#line.2505">ModifyTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a>&nbsp;admin,
                                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
@@ -251,7 +251,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html#line.2509">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ModifyTableProcedureBiConsumer.html#line.2510">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html
index fa78686..1d73945 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2466">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a>
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2467">RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -240,7 +240,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>namespaceName</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2467">namespaceName</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2468">namespaceName</a></pre>
 </li>
 </ul>
 </li>
@@ -257,7 +257,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NamespaceProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2469">NamespaceProcedureBiConsumer</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;namespaceName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2470">NamespaceProcedureBiConsumer</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;namespaceName)</pre>
 </li>
 </ul>
 </li>
@@ -274,7 +274,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre>abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2473">getOperationType</a>()</pre>
+<pre>abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2474">getOperationType</a>()</pre>
 </li>
 </ul>
 <a name="getDescription--">
@@ -283,7 +283,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>getDescription</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2475">getDescription</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2476">getDescription</a>()</pre>
 </li>
 </ul>
 <a name="onFinished--">
@@ -292,7 +292,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>onFinished</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2480">onFinished</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2481">onFinished</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#onFinished--">onFinished</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></code></dd>
@@ -305,7 +305,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2485">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.NamespaceProcedureBiConsumer.html#line.2486">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#onError-java.lang.Throwable-">onError</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html
index 9238695..4061400 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html
@@ -121,7 +121,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2425">RawAsyncHBaseAdmin.ProcedureBiConsumer</a>
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2426">RawAsyncHBaseAdmin.ProcedureBiConsumer</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/function/BiConsumer.html?is-external=true" title="class or interface in java.util.function">BiConsumer</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt;</pre>
 </li>
@@ -209,7 +209,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ProcedureBiConsumer</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2425">ProcedureBiConsumer</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2426">ProcedureBiConsumer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -226,7 +226,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function
 <ul class="blockList">
 <li class="blockList">
 <h4>onFinished</h4>
-<pre>abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2427">onFinished</a>()</pre>
+<pre>abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2428">onFinished</a>()</pre>
 </li>
 </ul>
 <a name="onError-java.lang.Throwable-">
@@ -235,7 +235,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function
 <ul class="blockList">
 <li class="blockList">
 <h4>onError</h4>
-<pre>abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2429">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<pre>abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2430">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 </li>
 </ul>
 <a name="accept-java.lang.Void-java.lang.Throwable-">
@@ -244,7 +244,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function
 <ul class="blockListLast">
 <li class="blockList">
 <h4>accept</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2432">accept</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;v,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#line.2433">accept</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;v,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html
index 31b1c98..22f83be 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2664">RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2665">RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -237,7 +237,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>peerId</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2665">peerId</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2666">peerId</a></pre>
 </li>
 </ul>
 <a name="getOperation">
@@ -246,7 +246,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperation</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</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; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2666">getOperation</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</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; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2667">getOperation</a></pre>
 </li>
 </ul>
 </li>
@@ -263,7 +263,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2668">ReplicationProcedureBiConsumer</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;peerId,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2669">ReplicationProcedureBiConsumer</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;peerId,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</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;getOperation)</pre>
 </li>
 </ul>
@@ -281,7 +281,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>getDescription</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2673">getDescription</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2674">getDescription</a>()</pre>
 </li>
 </ul>
 <a name="onFinished--">
@@ -290,7 +290,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>onFinished</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2678">onFinished</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2679">onFinished</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#onFinished--">onFinished</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></code></dd>
@@ -303,7 +303,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2683">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ReplicationProcedureBiConsumer.html#line.2684">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#onError-java.lang.Throwable-">onError</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html
index 14d63c7..b6d0bbb 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2652">RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2653">RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SplitTableRegionProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html#line.2654">SplitTableRegionProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html#line.2655">SplitTableRegionProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html#line.2659">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.SplitTableRegionProcedureBiConsumer.html#line.2660">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html
index a684af3..ebe4004 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2441">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a>
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2442">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -240,7 +240,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tableName</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2442">tableName</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2443">tableName</a></pre>
 </li>
 </ul>
 </li>
@@ -257,7 +257,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2444">TableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2445">TableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -274,7 +274,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre>abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2448">getOperationType</a>()</pre>
+<pre>abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2449">getOperationType</a>()</pre>
 </li>
 </ul>
 <a name="getDescription--">
@@ -283,7 +283,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>getDescription</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2450">getDescription</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2451">getDescription</a>()</pre>
 </li>
 </ul>
 <a name="onFinished--">
@@ -292,7 +292,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockList">
 <li class="blockList">
 <h4>onFinished</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2456">onFinished</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2457">onFinished</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#onFinished--">onFinished</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></code></dd>
@@ -305,7 +305,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2461">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#line.2462">onError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html#onError-java.lang.Throwable-">onError</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.ProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.ProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html
index c202ddc..9df431e 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2532">RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2533">RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TruncateTableProcedureBiConsumer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html#line.2534">TruncateTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html#line.2535">TruncateTableProcedureBiConsumer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOperationType</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html#line.2539">getOperationType</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TruncateTableProcedureBiConsumer.html#line.2540">getOperationType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html#getOperationType--">getOperationType</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.TableProcedureBiConsumer.html" title="class in org.apache.hadoop.hbase.client">RawAsyncHBaseAdmin.TableProcedureBiConsumer</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
index 5d7a3b1..c22d193 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html
@@ -2369,7 +2369,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.851">flush</a>(<a href="../../../../../org/apa [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.852">flush</a>(<a href="../../../../../org/apa [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flush-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Flush a table.</div>
 <dl>
@@ -2386,7 +2386,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>flushRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.881">flushRegion</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.882">flushRegion</a>(byte[]&nbsp;regionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flushRegion-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Flush an individual region.</div>
 <dl>
@@ -2403,7 +2403,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.905">flush</a>(<a href="../../../../../org/ap [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.906">flush</a>(<a href="../../../../../org/ap [...]
                                       <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
@@ -2413,7 +2413,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>flushRegionServer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.917">flushRegionServer</a>(<a href="../../../. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.918">flushRegionServer</a>(<a href="../../../. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#flushRegionServer-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Flush all region on the region server.</div>
 <dl>
@@ -2430,7 +2430,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.941">compact</a>(<a href="../../../../../org/a [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.942">compact</a>(<a href="../../../../../org/a [...]
                                        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">AsyncAdmin</a></code></span></div>
 <div class="block">Compact a table. When the returned CompletableFuture is done, it only means the compact request
@@ -2452,7 +2452,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.946">compact</a>(<a href="../../../../../org/a [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.947">compact</a>(<a href="../../../../../org/a [...]
                                        byte[]&nbsp;columnFamily,
                                        <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">AsyncAdmin</a></code></span></div>
@@ -2477,7 +2477,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.954">compactRegion</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.955">compactRegion</a>(byte[]&nbsp;regionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegion-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Compact an individual region. When the returned CompletableFuture is done, it only means the
  compact request was sent to HBase and may need some time to finish the compact operation.</div>
@@ -2495,7 +2495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.959">compactRegion</a>(byte[]&nbsp;regionName,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.960">compactRegion</a>(byte[]&nbsp;regionName,
                                              byte[]&nbsp;columnFamily)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegion-byte:A-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Compact a column family within a region. When the returned CompletableFuture is done, it only
@@ -2517,7 +2517,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompact</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.966">majorCompact</a>(<a href="../../../../../ [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.967">majorCompact</a>(<a href="../../../../../ [...]
                                             <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">AsyncAdmin</a></code></span></div>
 <div class="block">Major compact a table. When the returned CompletableFuture is done, it only means the compact
@@ -2539,7 +2539,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompact</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.971">majorCompact</a>(<a href="../../../../../ [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.972">majorCompact</a>(<a href="../../../../../ [...]
                                             byte[]&nbsp;columnFamily,
                                             <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompact-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.client.CompactType-">AsyncAdmin</a></code></span></div>
@@ -2564,7 +2564,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.979">majorCompactRegion</a>(byte[]&nbsp;region [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.980">majorCompactRegion</a>(byte[]&nbsp;region [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegion-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Major compact a region. When the returned CompletableFuture is done, it only means the compact
  request was sent to HBase and may need some time to finish the compact operation.</div>
@@ -2582,7 +2582,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.984">majorCompactRegion</a>(byte[]&nbsp;regionName,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.985">majorCompactRegion</a>(byte[]&nbsp;regionName,
                                                   byte[]&nbsp;columnFamily)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegion-byte:A-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Major compact a column family within region. When the returned CompletableFuture is done, it
@@ -2604,7 +2604,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRegionServer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.991">compactRegionServer</a>(<a href="../../.. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.992">compactRegionServer</a>(<a href="../../.. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactRegionServer-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Compact all regions on the region server.</div>
 <dl>
@@ -2621,7 +2621,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactRegionServer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.996">majorCompactRegionServer</a>(<a href="../ [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.997">majorCompactRegionServer</a>(<a href="../ [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#majorCompactRegionServer-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Compact all regions on the region server.</div>
 <dl>
@@ -2638,7 +2638,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRegionServer</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1000">compactRegionServer</a>(<a href="../../ [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1001">compactRegionServer</a>(<a href="../../ [...]
                                                     boolean&nbsp;major)</pre>
 </li>
 </ul>
@@ -2648,7 +2648,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRegion</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1023">compactRegion</a>(byte[]&nbsp;regionName,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1024">compactRegion</a>(byte[]&nbsp;regionName,
                                               byte[]&nbsp;columnFamily,
                                               boolean&nbsp;major)</pre>
 </li>
@@ -2659,7 +2659,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableHRegionLocations</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt;&nbsp; [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&gt;&nbsp; [...]
 <div class="block">List all region locations for the specific table.</div>
 </li>
 </ul>
@@ -2669,7 +2669,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1079">compact</a>(<a href="../../../../../org [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1080">compact</a>(<a href="../../../../../org [...]
                                         byte[]&nbsp;columnFamily,
                                         boolean&nbsp;major,
                                         <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</pre>
@@ -2682,7 +2682,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1133">compact</a>(<a href="../../../../../org [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1134">compact</a>(<a href="../../../../../org [...]
                                         <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                                         boolean&nbsp;major,
                                         byte[]&nbsp;columnFamily)</pre>
@@ -2695,7 +2695,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>toEncodeRegionName</h4>
-<pre>private&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1145">toEncodeRegionName</a>(byte[]&nbsp;regionName)</pre>
+<pre>private&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1146">toEncodeRegionName</a>(byte[]&nbsp;regionName)</pre>
 </li>
 </ul>
 <a name="checkAndGetTableName-byte:A-java.util.concurrent.atomic.AtomicReference-java.util.concurrent.CompletableFuture-">
@@ -2704,7 +2704,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndGetTableName</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1154">checkAndGetTableName</a>(byte[]&nbsp;encodeRegionName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1155">checkAndGetTableName</a>(byte[]&nbsp;encodeRegionName,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableName,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;result)</pre>
 </li>
@@ -2715,7 +2715,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRegionsAndGetTableName</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1180">checkRegionsAndGetTableName</a>(byte[][]&nbsp;encodedRegio [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1181">checkRegionsAndGetTableName</a>(byte[][]&nbsp;encodedRegio [...]
 </li>
 </ul>
 <a name="mergeSwitch-boolean-boolean-">
@@ -2724,7 +2724,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1190">mergeSwitch</a>(boolean&nbsp;enabled,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1191">mergeSwitch</a>(boolean&nbsp;enabled,
                                               boolean&nbsp;drainMerges)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#mergeSwitch-boolean-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Turn the Merge switch on or off.
@@ -2750,7 +2750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isMergeEnabled</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1195">isMergeEnabled</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1196">isMergeEnabled</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isMergeEnabled--">AsyncAdmin</a></code></span></div>
 <div class="block">Query the current state of the Merge switch.</div>
 <dl>
@@ -2768,7 +2768,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>splitSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1200">splitSwitch</a>(boolean&nbsp;enabled,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1201">splitSwitch</a>(boolean&nbsp;enabled,
                                               boolean&nbsp;drainSplits)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#splitSwitch-boolean-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Turn the Split switch on or off.
@@ -2794,7 +2794,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isSplitEnabled</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1205">isSplitEnabled</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1206">isSplitEnabled</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isSplitEnabled--">AsyncAdmin</a></code></span></div>
 <div class="block">Query the current state of the Split switch.</div>
 <dl>
@@ -2812,7 +2812,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>setSplitOrMergeOn</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1209">setSplitOrMergeOn</a>(boolean&nbs [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1210">setSplitOrMergeOn</a>(boolean&nbs [...]
                                                      boolean&nbsp;synchronous,
                                                      <a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)</pre>
 </li>
@@ -2823,7 +2823,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isSplitOrMergeOn</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1221">isSplitOrMergeOn</a>(<a href="../ [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1222">isSplitOrMergeOn</a>(<a href="../ [...]
 </li>
 </ul>
 <a name="mergeRegions-java.util.List-boolean-">
@@ -2832,7 +2832,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegions</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1235">mergeRegions</a>(<a href="https://docs.o [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1236">mergeRegions</a>(<a href="https://docs.o [...]
                                             boolean&nbsp;forcible)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#mergeRegions-java.util.List-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Merge regions.
@@ -2856,7 +2856,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>split</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1275">split</a>(<a href="../../../../../org/ap [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1276">split</a>(<a href="../../../../../org/ap [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#split-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Split a table. The method will execute split action for each region in table.</div>
 <dl>
@@ -2873,7 +2873,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>split</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1335">split</a>(<a href="../../../../../org/ap [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1336">split</a>(<a href="../../../../../org/ap [...]
                                      byte[]&nbsp;splitPoint)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#split-org.apache.hadoop.hbase.TableName-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Split a table.</div>
@@ -2892,7 +2892,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>splitRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1362">splitRegion</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1363">splitRegion</a>(byte[]&nbsp;regionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#splitRegion-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Split an individual region.</div>
 <dl>
@@ -2909,7 +2909,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>splitRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1390">splitRegion</a>(byte[]&nbsp;regionName,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1391">splitRegion</a>(byte[]&nbsp;regionName,
                                            byte[]&nbsp;splitPoint)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#splitRegion-byte:A-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Split an individual region.</div>
@@ -2929,7 +2929,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>split</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1425">split</a>(<a href="../../../../../org/a [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1426">split</a>(<a href="../../../../../org/a [...]
                                       byte[]&nbsp;splitPoint)</pre>
 </li>
 </ul>
@@ -2939,7 +2939,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>assign</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1452">assign</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1453">assign</a>(byte[]&nbsp;regionName)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#assign-byte:A-">assign</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a></code></dd>
@@ -2954,7 +2954,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>unassign</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1475">unassign</a>(byte[]&nbsp;regionName,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1476">unassign</a>(byte[]&nbsp;regionName,
                                         boolean&nbsp;forcible)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#unassign-byte:A-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Unassign a region from current hosting regionserver. Region will then be assigned to a
@@ -2978,7 +2978,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>offline</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1501">offline</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1502">offline</a>(byte[]&nbsp;regionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#offline-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Offline specified region from master's in-memory state. It will not attempt to reassign the
  region as in unassign. This API can be used when a region not served by any region server and
@@ -2999,7 +2999,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>move</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1527">move</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1528">move</a>(byte[]&nbsp;regionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#move-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Move the region <code>r</code> to a random server.</div>
 <dl>
@@ -3016,7 +3016,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>move</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1549">move</a>(byte[]&nbsp;regionName,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1550">move</a>(byte[]&nbsp;regionName,
                                     <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destServerName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#move-byte:A-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Move the region <code>r</code> to <code>dest</code>.</div>
@@ -3037,7 +3037,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>moveRegion</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1572">moveRegion</a>(<a href="../../../../../ [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1573">moveRegion</a>(<a href="../../../../../ [...]
                                            org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MoveRegionRequest&nbsp;request)</pre>
 </li>
 </ul>
@@ -3047,7 +3047,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>setQuota</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1581">setQuota</a>(<a href="../../../../../org [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1582">setQuota</a>(<a href="../../../../../org [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#setQuota-org.apache.hadoop.hbase.quotas.QuotaSettings-">AsyncAdmin</a></code></span></div>
 <div class="block">Apply the new quota settings.</div>
 <dl>
@@ -3064,7 +3064,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getQuota</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;& [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">QuotaSettings</a>&gt;& [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getQuota-org.apache.hadoop.hbase.quotas.QuotaFilter-">AsyncAdmin</a></code></span></div>
 <div class="block">List the quotas based on the filter.</div>
 <dl>
@@ -3083,7 +3083,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>addReplicationPeer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1624">addReplicationPeer</a>(<a href="https:// [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1625">addReplicationPeer</a>(<a href="https:// [...]
                                                   <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig,
                                                   boolean&nbsp;enabled)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-boolean-">AsyncAdmin</a></code></span></div>
@@ -3104,7 +3104,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>removeReplicationPeer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1633">removeReplicationPeer</a>(<a href="https [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1634">removeReplicationPeer</a>(<a href="https [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#removeReplicationPeer-java.lang.String-">AsyncAdmin</a></code></span></div>
 <div class="block">Remove a peer and stop the replication</div>
 <dl>
@@ -3121,7 +3121,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>enableReplicationPeer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1641">enableReplicationPeer</a>(<a href="https [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1642">enableReplicationPeer</a>(<a href="https [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableReplicationPeer-java.lang.String-">AsyncAdmin</a></code></span></div>
 <div class="block">Restart the replication stream to the specified peer</div>
 <dl>
@@ -3138,7 +3138,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>disableReplicationPeer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1649">disableReplicationPeer</a>(<a href="http [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1650">disableReplicationPeer</a>(<a href="http [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableReplicationPeer-java.lang.String-">AsyncAdmin</a></code></span></div>
 <div class="block">Stop the replication stream to the specified peer</div>
 <dl>
@@ -3155,7 +3155,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationPeerConfig</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1657">getReplicat [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1658">getReplicat [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getReplicationPeerConfig-java.lang.String-">AsyncAdmin</a></code></span></div>
 <div class="block">Returns the configured ReplicationPeerConfig for the specified peer</div>
 <dl>
@@ -3174,7 +3174,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>updateReplicationPeerConfig</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1667">updateReplicationPeerConfig</a>(<a href= [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1668">updateReplicationPeerConfig</a>(<a href= [...]
                                                            <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#updateReplicationPeerConfig-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">AsyncAdmin</a></code></span></div>
 <div class="block">Update the peerConfig for the specified peer</div>
@@ -3193,7 +3193,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>transitReplicationPeerSyncReplicationState</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1678">transitReplicationPeerSyncReplicationSta [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1679">transitReplicationPeerSyncReplicationSta [...]
                                                                           <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a>&nbsp;clusterState)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#transitReplicationPeerSyncReplicationState-java.lang.String-org.apache.hadoop.hbase.replication.SyncReplicationState-">AsyncAdmin</a></code></span></div>
 <div class="block">Transit current cluster to a new state in a synchronous replication peer.</div>
@@ -3212,7 +3212,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>appendReplicationPeerTableCFs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1690">appendReplicationPeerTableCFs</a>(<a hre [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1691">appendReplicationPeerTableCFs</a>(<a hre [...]
                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#appendReplicationPeerTableCFs-java.lang.String-java.util.Map-">AsyncAdmin</a></code></span></div>
 <div class="block">Append the replicable table-cf config of the specified peer</div>
@@ -3231,7 +3231,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>removeReplicationPeerTableCFs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1712">removeReplicationPeerTableCFs</a>(<a hre [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1713">removeReplicationPeerTableCFs</a>(<a hre [...]
                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#removeReplicationPeerTableCFs-java.lang.String-java.util.Map-">AsyncAdmin</a></code></span></div>
 <div class="block">Remove some table-cfs from config of the specified peer</div>
@@ -3250,7 +3250,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listReplicationPeers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication" [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication" [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicationPeers--">AsyncAdmin</a></code></span></div>
 <div class="block">Return a list of replication peers.</div>
 <dl>
@@ -3268,7 +3268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listReplicationPeers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication" [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication" [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicationPeers-java.util.regex.Pattern-">AsyncAdmin</a></code></span></div>
 <div class="block">Return a list of replication peers.</div>
 <dl>
@@ -3288,7 +3288,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listReplicationPeers</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication [...]
 </li>
 </ul>
 <a name="listReplicatedTableCFs--">
@@ -3297,7 +3297,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listReplicatedTableCFs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">Tab [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/replication/TableCFs.html" title="class in org.apache.hadoop.hbase.client.replication">Tab [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listReplicatedTableCFs--">AsyncAdmin</a></code></span></div>
 <div class="block">Find all table and column families that are replicated from this cluster</div>
 <dl>
@@ -3315,7 +3315,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1791">snapshot</a>(<a href="../../../../../org [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1792">snapshot</a>(<a href="../../../../../org [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#snapshot-org.apache.hadoop.hbase.client.SnapshotDescription-">AsyncAdmin</a></code></span></div>
 <div class="block">Take a snapshot and wait for the server to complete that snapshot asynchronously. Only a single
  snapshot should be taken at a time for an instance of HBase, or results may be undefined (you
@@ -3341,7 +3341,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isSnapshotFinished</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1846">isSnapshotFinished</a>(<a href=".. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1847">isSnapshotFinished</a>(<a href=".. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isSnapshotFinished-org.apache.hadoop.hbase.client.SnapshotDescription-">AsyncAdmin</a></code></span></div>
 <div class="block">Check the current state of the passed snapshot. There are three possible states:
  <ol>
@@ -3369,7 +3369,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1859">restoreSnapshot</a>(<a href="https://doc [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1860">restoreSnapshot</a>(<a href="https://doc [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#restoreSnapshot-java.lang.String-">AsyncAdmin</a></code></span></div>
 <div class="block">Restore the specified snapshot on the original table. (The table must be disabled) If the
  "hbase.snapshot.restore.take.failsafe.snapshot" configuration property is set to true, a
@@ -3390,7 +3390,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1867">restoreSnapshot</a>(<a href="https://doc [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1868">restoreSnapshot</a>(<a href="https://doc [...]
                                                boolean&nbsp;takeFailSafeSnapshot,
                                                boolean&nbsp;restoreAcl)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#restoreSnapshot-java.lang.String-boolean-boolean-">AsyncAdmin</a></code></span></div>
@@ -3416,7 +3416,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1914">restoreSnapshot</a>(<a href="https://do [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1915">restoreSnapshot</a>(<a href="https://do [...]
                                                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                 boolean&nbsp;takeFailSafeSnapshot,
                                                 boolean&nbsp;restoreAcl)</pre>
@@ -3428,7 +3428,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>completeConditionalOnFuture</h4>
-<pre>private&nbsp;&lt;T&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1971">completeConditionalOnFuture</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;dependentFuture,
+<pre>private&nbsp;&lt;T&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1972">completeConditionalOnFuture</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;dependentFuture,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;parentFuture)</pre>
 </li>
 </ul>
@@ -3438,7 +3438,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneSnapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1983">cloneSnapshot</a>(<a href="https://docs. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1984">cloneSnapshot</a>(<a href="https://docs. [...]
                                              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                              boolean&nbsp;restoreAcl)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneSnapshot-java.lang.String-org.apache.hadoop.hbase.TableName-boolean-">AsyncAdmin</a></code></span></div>
@@ -3459,7 +3459,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>internalRestoreSnapshot</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.1999">internalRestoreSnapshot</a>(<a href="ht [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2000">internalRestoreSnapshot</a>(<a href="ht [...]
                                                         <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                         boolean&nbsp;restoreAcl)</pre>
 </li>
@@ -3470,7 +3470,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listSnapshots--">AsyncAdmin</a></code></span></div>
 <div class="block">List completed snapshots.</div>
 <dl>
@@ -3488,7 +3488,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listSnapshots-java.util.regex.Pattern-">AsyncAdmin</a></code></span></div>
 <div class="block">List all the completed snapshots matching the given pattern.</div>
 <dl>
@@ -3507,7 +3507,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompletedSnapshots</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescrip [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescrip [...]
 </li>
 </ul>
 <a name="listTableSnapshots-java.util.regex.Pattern-">
@@ -3516,7 +3516,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listTableSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableSnapshots-java.util.regex.Pattern-">AsyncAdmin</a></code></span></div>
 <div class="block">List all the completed snapshots matching the given table name pattern.</div>
 <dl>
@@ -3536,7 +3536,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listTableSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescript [...]
                                                                        <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>&nbsp;snapshotNamePattern)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">AsyncAdmin</a></code></span></div>
 <div class="block">List all the completed snapshots matching the given table name regular expression and snapshot
@@ -3559,7 +3559,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompletedSnapshots</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescrip [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client">SnapshotDescrip [...]
                                                                            <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>&nbsp;snapshotNamePattern)</pre>
 </li>
 </ul>
@@ -3569,7 +3569,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteSnapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2084">deleteSnapshot</a>(<a href="https://docs [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2085">deleteSnapshot</a>(<a href="https://docs [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshot-java.lang.String-">AsyncAdmin</a></code></span></div>
 <div class="block">Delete an existing snapshot.</div>
 <dl>
@@ -3586,7 +3586,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2089">deleteSnapshots</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2090">deleteSnapshots</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshots--">AsyncAdmin</a></code></span></div>
 <div class="block">Delete all existing snapshots.</div>
 <dl>
@@ -3601,7 +3601,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2094">deleteSnapshots</a>(<a href="https://doc [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2095">deleteSnapshots</a>(<a href="https://doc [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteSnapshots-java.util.regex.Pattern-">AsyncAdmin</a></code></span></div>
 <div class="block">Delete existing snapshots whose names match the pattern passed.</div>
 <dl>
@@ -3618,7 +3618,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2101">deleteTableSnapshots</a>(<a href="https: [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2102">deleteTableSnapshots</a>(<a href="https: [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-">AsyncAdmin</a></code></span></div>
 <div class="block">Delete all existing snapshots matching the given table name pattern.</div>
 <dl>
@@ -3635,7 +3635,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2108">deleteTableSnapshots</a>(<a href="https: [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2109">deleteTableSnapshots</a>(<a href="https: [...]
                                                     <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>&nbsp;snapshotNamePattern)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#deleteTableSnapshots-java.util.regex.Pattern-java.util.regex.Pattern-">AsyncAdmin</a></code></span></div>
 <div class="block">Delete all existing snapshots matching the given table name regular expression and snapshot
@@ -3655,7 +3655,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>internalDeleteSnapshots</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2117">internalDeleteSnapshots</a>(<a href="ht [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2118">internalDeleteSnapshots</a>(<a href="ht [...]
                                                         <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>&nbsp;snapshotNamePattern)</pre>
 </li>
 </ul>
@@ -3665,7 +3665,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>internalDeleteSnapshot</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2147">internalDeleteSnapshot</a>(<a href="../ [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2148">internalDeleteSnapshot</a>(<a href="../ [...]
 </li>
 </ul>
 <a name="execProcedure-java.lang.String-java.lang.String-java.util.Map-">
@@ -3674,7 +3674,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>execProcedure</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2160">execProcedure</a>(<a href="https://docs. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2161">execProcedure</a>(<a href="https://docs. [...]
                                              <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;instance,
                                              <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/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;props)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#execProcedure-java.lang.String-java.lang.String-java.util.Map-">AsyncAdmin</a></code></span></div>
@@ -3697,7 +3697,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>execProcedureWithReturn</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2212">execProcedureWithReturn</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>&n [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2213">execProcedureWithReturn</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>&n [...]
                                                          <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;instance,
                                                          <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/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;pro [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#execProcedureWithReturn-java.lang.String-java.lang.String-java.util.Map-">AsyncAdmin</a></code></span></div>
@@ -3722,7 +3722,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isProcedureFinished</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2226">isProcedureFinished</a>(<a href="h [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2227">isProcedureFinished</a>(<a href="h [...]
                                                       <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;instance,
                                                       <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/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;props)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isProcedureFinished-java.lang.String-java.lang.String-java.util.Map-">AsyncAdmin</a></code></span></div>
@@ -3751,7 +3751,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>abortProcedure</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2239">abortProcedure</a>(long&nbsp;procId,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2240">abortProcedure</a>(long&nbsp;procId,
                                                  boolean&nbsp;mayInterruptIfRunning)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#abortProcedure-long-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Abort a procedure
@@ -3774,7 +3774,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedures</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</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/client/RawAsyncHBaseAdmin.html#line.2248">getProcedures</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</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/client/RawAsyncHBaseAdmin.html#line.2249">getProcedures</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getProcedures--">AsyncAdmin</a></code></span></div>
 <div class="block">List procedures</div>
 <dl>
@@ -3791,7 +3791,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getLocks</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</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/client/RawAsyncHBaseAdmin.html#line.2260">getLocks</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</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/client/RawAsyncHBaseAdmin.html#line.2261">getLocks</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLocks--">AsyncAdmin</a></code></span></div>
 <div class="block">List locks.</div>
 <dl>
@@ -3808,7 +3808,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>decommissionRegionServers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2271">decommissionRegionServers</a>(<a href="h [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2272">decommissionRegionServers</a>(<a href="h [...]
                                                          boolean&nbsp;offload)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#decommissionRegionServers-java.util.List-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Mark region server(s) as decommissioned to prevent additional regions from getting
@@ -3830,7 +3830,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>listDecommissionedRegionServers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;<a href=".. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;<a href=".. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#listDecommissionedRegionServers--">AsyncAdmin</a></code></span></div>
 <div class="block">List region servers marked as decommissioned, which can not be assigned regions.</div>
 <dl>
@@ -3847,7 +3847,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>recommissionRegionServer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2294">recommissionRegionServer</a>(<a href=".. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2295">recommissionRegionServer</a>(<a href=".. [...]
                                                         <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;byte[]&gt;&nbsp;encodedRegionNames)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#recommissionRegionServer-org.apache.hadoop.hbase.ServerName-java.util.List-">AsyncAdmin</a></code></span></div>
 <div class="block">Remove decommission marker from a region server to allow regions assignments. Load regions onto
@@ -3867,7 +3867,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocation</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2312">getRegionLocation</a>(byte[]&nbsp;regionNameOrEncodedRegion [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2313">getRegionLocation</a>(byte[]&nbsp;regionNameOrEncodedRegion [...]
 <div class="block">Get the region location for the passed region name. The region name may be a full region name
  or encoded region name. If the region does not found, then it'll throw an
  UnknownRegionException wrapped by a <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent"><code>CompletableFuture</code></a></div>
@@ -3885,7 +3885,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2370">getRegionInfo</a>(byte[]&nbsp;regionNa [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2371">getRegionInfo</a>(byte[]&nbsp;regionNa [...]
 <div class="block">Get the region info for the passed region name. The region name may be a full region name or
  encoded region name. If the region does not found, then it'll throw an UnknownRegionException
  wrapped by a <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent"><code>CompletableFuture</code></a></div>
@@ -3903,7 +3903,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitKeys</h4>
-<pre>private&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2393">getSplitKeys</a>(byte[]&nbsp;startKey,
+<pre>private&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2394">getSplitKeys</a>(byte[]&nbsp;startKey,
                               byte[]&nbsp;endKey,
                               int&nbsp;numRegions)</pre>
 </li>
@@ -3914,7 +3914,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>verifySplitKeys</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2409">verifySplitKeys</a>(byte[][]&nbsp;splitKeys)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2410">verifySplitKeys</a>(byte[][]&nbsp;splitKeys)</pre>
 </li>
 </ul>
 <a name="waitProcedureResult-java.util.concurrent.CompletableFuture-">
@@ -3923,7 +3923,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>waitProcedureResult</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2688">waitProcedureResult</a>(<a href="https: [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2689">waitProcedureResult</a>(<a href="https: [...]
 </li>
 </ul>
 <a name="getProcedureResult-long-java.util.concurrent.CompletableFuture-int-">
@@ -3932,7 +3932,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedureResult</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2700">getProcedureResult</a>(long&nbsp;procId,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2701">getProcedureResult</a>(long&nbsp;procId,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;future,
                                 int&nbsp;retries)</pre>
 </li>
@@ -3943,7 +3943,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>failedFuture</h4>
-<pre>private&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2730">failedFuture</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable [...]
+<pre>private&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2731">failedFuture</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable [...]
 </li>
 </ul>
 <a name="completeExceptionally-java.util.concurrent.CompletableFuture-java.lang.Throwable-">
@@ -3952,7 +3952,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>completeExceptionally</h4>
-<pre>private&nbsp;&lt;T&gt;&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2736">completeExceptionally</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;future,
+<pre>private&nbsp;&lt;T&gt;&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2737">completeExceptionally</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;T&gt;&nbsp;future,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 </li>
 </ul>
@@ -3962,7 +3962,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2745">getClusterMetrics</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2746">getClusterMetrics</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getClusterMetrics--">getClusterMetrics</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a></code></dd>
@@ -3977,7 +3977,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2750">getClusterMetrics</a>(<a href="https://docs.o [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2751">getClusterMetrics</a>(<a href="https://docs.o [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getClusterMetrics-java.util.EnumSet-">getClusterMetrics</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a></code></dd>
@@ -3992,7 +3992,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2762">shutdown</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2763">shutdown</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#shutdown--">AsyncAdmin</a></code></span></div>
 <div class="block">Shuts down the HBase cluster.</div>
 <dl>
@@ -4007,7 +4007,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>stopMaster</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2771">stopMaster</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2772">stopMaster</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#stopMaster--">AsyncAdmin</a></code></span></div>
 <div class="block">Shuts down the current HBase master only.</div>
 <dl>
@@ -4022,7 +4022,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>stopRegionServer</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2780">stopRegionServer</a>(<a href="../../../. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2781">stopRegionServer</a>(<a href="../../../. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#stopRegionServer-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Stop the designated regionserver.</div>
 <dl>
@@ -4037,7 +4037,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfiguration</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2791">updateConfiguration</a>(<a href="../../. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2792">updateConfiguration</a>(<a href="../../. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#updateConfiguration-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Update the configuration and trigger an online config change on the regionserver.</div>
 <dl>
@@ -4054,7 +4054,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfiguration</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2803">updateConfiguration</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2804">updateConfiguration</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#updateConfiguration--">AsyncAdmin</a></code></span></div>
 <div class="block">Update the configuration and trigger an online config change on all the masters and
  regionservers.</div>
@@ -4070,7 +4070,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWALWriter</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2831">rollWALWriter</a>(<a href="../../../../. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2832">rollWALWriter</a>(<a href="../../../../. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#rollWALWriter-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Roll the log writer. I.e. for filesystem based write ahead logs, start writing to a new file.
  <p>
@@ -4092,7 +4092,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCompactionQueues</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2842">clearCompactionQueues</a>(<a href="../.. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2843">clearCompactionQueues</a>(<a href="../.. [...]
                                                      <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/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;queues)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#clearCompactionQueues-org.apache.hadoop.hbase.ServerName-java.util.Set-">AsyncAdmin</a></code></span></div>
 <div class="block">Clear compacting queues on a region server.</div>
@@ -4109,7 +4109,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getSecurityCapabilities</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security"> [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/security/SecurityCapability.html" title="enum in org.apache.hadoop.hbase.client.security"> [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getSecurityCapabilities--">getSecurityCapabilities</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a></code></dd>
@@ -4125,7 +4125,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionMetrics</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;&nbsp;< [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;&nbsp;< [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver.</div>
 <dl>
@@ -4142,7 +4142,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionMetrics</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;&nbsp;< [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;&nbsp;< [...]
                                                                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionMetrics-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Get a list of <a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase"><code>RegionMetrics</code></a> of all regions hosted on a region seerver for a table.</div>
@@ -4160,7 +4160,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionMetrics</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;&nbsp; [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/RegionMetrics.html" title="interface in org.apache.hadoop.hbase">RegionMetrics</a>&gt;&gt;&nbsp; [...]
                                                                 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 </li>
 </ul>
@@ -4170,7 +4170,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isMasterInMaintenanceMode</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2889">isMasterInMaintenanceMode</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2890">isMasterInMaintenanceMode</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isMasterInMaintenanceMode--">AsyncAdmin</a></code></span></div>
 <div class="block">Check whether master is in maintenance mode</div>
 <dl>
@@ -4188,7 +4188,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionState</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2901">getCompactionState</a>(<a href=".. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2902">getCompactionState</a>(<a href=".. [...]
                                                              <a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client">CompactType</a>&nbsp;compactType)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.CompactType-">AsyncAdmin</a></code></span></div>
 <div class="block">Get the current compaction state of a table. It could be in a major compaction, a minor
@@ -4210,7 +4210,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionStateForRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2997">getCompactionStateForRegion</a>(by [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.2998">getCompactionStateForRegion</a>(by [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCompactionStateForRegion-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Get the current compaction state of region. It could be in a major compaction, a minor
  compaction, both, or none.</div>
@@ -4230,7 +4230,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastMajorCompactionTimestamp</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLastMajorCompactionTimestamp-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Get the timestamp of the last major compaction for the passed table.
  <p>
@@ -4252,7 +4252,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastMajorCompactionTimestampForRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getLastMajorCompactionTimestampForRegion-byte:A-">AsyncAdmin</a></code></span></div>
 <div class="block">Get the timestamp of the last major compaction for the passed region.
  <p>
@@ -4274,7 +4274,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compactionSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.orac [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.orac [...]
                                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;serverNamesList)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#compactionSwitch-boolean-java.util.List-">AsyncAdmin</a></code></span></div>
 <div class="block">Turn the compaction on or off. Disabling compactions will also interrupt any currently ongoing
@@ -4298,7 +4298,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerList</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;<a href=". [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;<a href=". [...]
 </li>
 </ul>
 <a name="switchCompact-org.apache.hadoop.hbase.ServerName-boolean-">
@@ -4307,7 +4307,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>switchCompact</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3149">switchCompact</a>(<a href="../../ [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3150">switchCompact</a>(<a href="../../ [...]
                                                  boolean&nbsp;onOrOff)</pre>
 </li>
 </ul>
@@ -4317,7 +4317,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>balancerSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3160">balancerSwitch</a>(boolean&nbsp;on,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3161">balancerSwitch</a>(boolean&nbsp;on,
                                                  boolean&nbsp;drainRITs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#balancerSwitch-boolean-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Turn the load balancer on or off.
@@ -4343,7 +4343,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3171">balance</a>(boolean&nbsp;forcible)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3172">balance</a>(boolean&nbsp;forcible)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#balance-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Invoke the balancer. Will run the balancer and if regions to move, it will go ahead and do the
  reassignments. If there is region in transition, force parameter of true would still run
@@ -4365,7 +4365,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isBalancerEnabled</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3181">isBalancerEnabled</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3182">isBalancerEnabled</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isBalancerEnabled--">AsyncAdmin</a></code></span></div>
 <div class="block">Query the current state of the balancer.</div>
 <dl>
@@ -4383,7 +4383,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizerSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3192">normalizerSwitch</a>(boolean&nbsp; [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3193">normalizerSwitch</a>(boolean&nbsp; [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#normalizerSwitch-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Set region normalizer on/off.</div>
 <dl>
@@ -4402,7 +4402,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isNormalizerEnabled</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3204">isNormalizerEnabled</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3205">isNormalizerEnabled</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isNormalizerEnabled--">AsyncAdmin</a></code></span></div>
 <div class="block">Query the current state of the region normalizer</div>
 <dl>
@@ -4420,7 +4420,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>normalize</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3216">normalize</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3217">normalize</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#normalize--">AsyncAdmin</a></code></span></div>
 <div class="block">Invoke region normalizer. Can NOT run for various reasons. Check logs.</div>
 <dl>
@@ -4438,7 +4438,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanerChoreSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3227">cleanerChoreSwitch</a>(boolean&nbs [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3228">cleanerChoreSwitch</a>(boolean&nbs [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#cleanerChoreSwitch-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Turn the cleaner chore on/off.</div>
 <dl>
@@ -4455,7 +4455,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isCleanerChoreEnabled</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3239">isCleanerChoreEnabled</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3240">isCleanerChoreEnabled</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isCleanerChoreEnabled--">AsyncAdmin</a></code></span></div>
 <div class="block">Query the current state of the cleaner chore.</div>
 <dl>
@@ -4473,7 +4473,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>runCleanerChore</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3251">runCleanerChore</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3252">runCleanerChore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#runCleanerChore--">AsyncAdmin</a></code></span></div>
 <div class="block">Ask for cleaner chore to run.</div>
 <dl>
@@ -4491,7 +4491,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>catalogJanitorSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3263">catalogJanitorSwitch</a>(boolean&n [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3264">catalogJanitorSwitch</a>(boolean&n [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#catalogJanitorSwitch-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Turn the catalog janitor on/off.</div>
 <dl>
@@ -4508,7 +4508,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogJanitorEnabled</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3275">isCatalogJanitorEnabled</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3276">isCatalogJanitorEnabled</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isCatalogJanitorEnabled--">AsyncAdmin</a></code></span></div>
 <div class="block">Query on the catalog janitor state.</div>
 <dl>
@@ -4526,7 +4526,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>runCatalogJanitor</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3287">runCatalogJanitor</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3288">runCatalogJanitor</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#runCatalogJanitor--">AsyncAdmin</a></code></span></div>
 <div class="block">Ask for a scan of the catalog table.</div>
 <dl>
@@ -4544,7 +4544,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>public&nbsp;&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3298">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java. [...]
+<pre>public&nbsp;&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3299">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java. [...]
                                                      <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-">AsyncAdmin</a></code></span></div>
 <div class="block">Execute the given coprocessor call on the master.
@@ -4580,7 +4580,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>public&nbsp;&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3316">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java. [...]
+<pre>public&nbsp;&lt;S,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3317">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java. [...]
                                                      <a href="../../../../../org/apache/hadoop/hbase/client/ServiceCaller.html" title="interface in org.apache.hadoop.hbase.client">ServiceCaller</a>&lt;S,R&gt;&nbsp;callable,
                                                      <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#coprocessorService-java.util.function.Function-org.apache.hadoop.hbase.client.ServiceCaller-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
@@ -4618,7 +4618,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>clearDeadServers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;<a href=".. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&gt;&nbsp;<a href=".. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#clearDeadServers-java.util.List-">AsyncAdmin</a></code></span></div>
 <div class="block">Clear dead region servers from master.</div>
 <dl>
@@ -4637,7 +4637,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>newServerCaller</h4>
-<pre>private&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRpcRetryingCallerFactory.ServerRequestCallerBuilder.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCallerFactory.ServerRequestCallerBuilder</a>&lt;T&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3345">newServerCaller</a>()</pre>
+<pre>private&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRpcRetryingCallerFactory.ServerRequestCallerBuilder.html" title="class in org.apache.hadoop.hbase.client">AsyncRpcRetryingCallerFactory.ServerRequestCallerBuilder</a>&lt;T&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3346">newServerCaller</a>()</pre>
 </li>
 </ul>
 <a name="enableTableReplication-org.apache.hadoop.hbase.TableName-">
@@ -4646,7 +4646,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>enableTableReplication</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3354">enableTableReplication</a>(<a href="../. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3355">enableTableReplication</a>(<a href="../. [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#enableTableReplication-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Enable a table's replication switch.</div>
 <dl>
@@ -4663,7 +4663,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>disableTableReplication</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3393">disableTableReplication</a>(<a href="../ [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3394">disableTableReplication</a>(<a href="../ [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#disableTableReplication-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Disable a table's replication switch.</div>
 <dl>
@@ -4680,7 +4680,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableSplits</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[][]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3419">getTableSplits</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;byte[][]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3420">getTableSplits</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="checkAndSyncTableToPeerClusters-org.apache.hadoop.hbase.TableName-byte:A:A-">
@@ -4689,7 +4689,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndSyncTableToPeerClusters</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3450">checkAndSyncTableToPeerClusters</a>(<a  [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3454">checkAndSyncTableToPeerClusters</a>(<a  [...]
                                                                 byte[][]&nbsp;splits)</pre>
 <div class="block">Connect to peer and check the table descriptor on peer:
  <ol>
@@ -4711,7 +4711,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>trySyncTableToPeerCluster</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3481">trySyncTableToPeerCluster</a>(<a href=" [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3485">trySyncTableToPeerCluster</a>(<a href=" [...]
                                                           byte[][]&nbsp;splits,
                                                           <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&nbsp;peer)</pre>
 </li>
@@ -4722,7 +4722,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTableWithPeerCluster</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3537">compareTableWithPeerCluster</a>(<a href [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3541">compareTableWithPeerCluster</a>(<a href [...]
                                                             <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDesc,
                                                             <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&nbsp;peer,
                                                             <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html" title="interface in org.apache.hadoop.hbase.client">AsyncAdmin</a>&nbsp;peerAdmin)</pre>
@@ -4734,7 +4734,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>setTableReplication</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3568">setTableReplication</a>(<a href="../../ [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3572">setTableReplication</a>(<a href="../../ [...]
                                                     boolean&nbsp;enableRep)</pre>
 <div class="block">Set the table's replication switch if the table's replication switch is already not set.</div>
 <dl>
@@ -4750,7 +4750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>clearBlockCache</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3595">clearBlockCache</a>(<a href="../../../../ [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3599">clearBlockCache</a>(<a href="../../../../ [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#clearBlockCache-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Clear all the blocks corresponding to this table from BlockCache. For expert-admins. Calling
  this API will drop all the cached blocks specific to a table from BlockCache. This can
@@ -4772,7 +4772,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneTableSchema</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3632">cloneTableSchema</a>(<a href="../../../. [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3636">cloneTableSchema</a>(<a href="../../../. [...]
                                                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
                                                 boolean&nbsp;preserveSplits)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#cloneTableSchema-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.TableName-boolean-">AsyncAdmin</a></code></span></div>
@@ -4793,7 +4793,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>clearBlockCache</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3688">clearBlockCache</a>(<a href="../../../.. [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3694">clearBlockCache</a>(<a href="../../../.. [...]
                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;hris)</pre>
 </li>
 </ul>
@@ -4803,7 +4803,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>switchRpcThrottle</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3699">switchRpcThrottle</a>(boolean&nbsp [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3705">switchRpcThrottle</a>(boolean&nbsp [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#switchRpcThrottle-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Switch the rpc throttle enabled state.</div>
 <dl>
@@ -4822,7 +4822,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>isRpcThrottleEnabled</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3711">isRpcThrottleEnabled</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3717">isRpcThrottleEnabled</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#isRpcThrottleEnabled--">AsyncAdmin</a></code></span></div>
 <div class="block">Get if the rpc throttle is enabled.</div>
 <dl>
@@ -4839,7 +4839,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>exceedThrottleQuotaSwitch</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3723">exceedThrottleQuotaSwitch</a>(bool [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3729">exceedThrottleQuotaSwitch</a>(bool [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#exceedThrottleQuotaSwitch-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Switch the exceed throttle quota. If enabled, user/table/namespace throttle quota
  can be exceeded if region server has availble quota.</div>
@@ -4859,7 +4859,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getSpaceQuotaTableSizes</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getSpaceQuotaTableSizes--">AsyncAdmin</a></code></span></div>
 <div class="block">Fetches the table sizes on the filesystem as tracked by the HBase Master.</div>
 <dl>
@@ -4874,7 +4874,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerSpaceQuotaSnapshots</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/ [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/ [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getRegionServerSpaceQuotaSnapshots-org.apache.hadoop.hbase.ServerName-">AsyncAdmin</a></code></span></div>
 <div class="block">Fetches the observed <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotView.html" title="interface in org.apache.hadoop.hbase.quotas"><code>SpaceQuotaSnapshotView</code></a>s observed by a RegionServer.</div>
 <dl>
@@ -4889,7 +4889,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentSpaceQuotaSnapshot</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshot</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3763">getCurrentSpaceQuotaSnapsh [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshot</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3769">getCurrentSpaceQuotaSnapsh [...]
 </li>
 </ul>
 <a name="getCurrentSpaceQuotaSnapshot-java.lang.String-">
@@ -4898,7 +4898,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentSpaceQuotaSnapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshot</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3774">getCurrentSpaceQuotaSnapsho [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshot</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3780">getCurrentSpaceQuotaSnapsho [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCurrentSpaceQuotaSnapshot-java.lang.String-">AsyncAdmin</a></code></span></div>
 <div class="block">Returns the Master's view of a quota on the given <code>namespace</code> or null if the Master has
  no quota information on that namespace.</div>
@@ -4914,7 +4914,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentSpaceQuotaSnapshot</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshot</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3781">getCurrentSpaceQuotaSnapsho [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshot</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3787">getCurrentSpaceQuotaSnapsho [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getCurrentSpaceQuotaSnapshot-org.apache.hadoop.hbase.TableName-">AsyncAdmin</a></code></span></div>
 <div class="block">Returns the Master's view of a quota on the given <code>tableName</code> or null if the Master has
  no quota information on that table.</div>
@@ -4930,7 +4930,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>grant</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3789">grant</a>(<a href="../../../../../org/ap [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3795">grant</a>(<a href="../../../../../org/ap [...]
                                      boolean&nbsp;mergeExistingPermissions)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#grant-org.apache.hadoop.hbase.security.access.UserPermission-boolean-">AsyncAdmin</a></code></span></div>
 <div class="block">Grants user specific permissions</div>
@@ -4951,7 +4951,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>revoke</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3799">revoke</a>(<a href="../../../../../org/a [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.html#line.3805">revoke</a>(<a href="../../../../../org/a [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#revoke-org.apache.hadoop.hbase.security.access.UserPermission-">AsyncAdmin</a></code></span></div>
 <div class="block">Revokes user specific permissions</div>
 <dl>
@@ -4968,7 +4968,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getUserPermissions</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">Use [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/security/access/UserPermission.html" title="class in org.apache.hadoop.hbase.security.access">Use [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncAdmin.html#getUserPermissions-org.apache.hadoop.hbase.security.access.GetUserPermissionsRequest-">AsyncAdmin</a></code></span></div>
 <div class="block">Get the global/namespace/table permissions for user</div>
 <dl>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 0e898e1..f551131 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
 <span class="sourceLineNo">011</span>  public static final String revision = "Unknown";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Thu Apr  4 14:35:31 UTC 2019";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Fri Apr  5 14:34:47 UTC 2019";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "file:///home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "fcfd0378d3e8ba0e48c79965b2217220";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "0428d051d67fa0be9f83babf7c4a3e27";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
index 7482d1b..1e3ec31 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AddColumnFamilyProcedureBiConsumer.html
@@ -846,2986 +846,2992 @@
 <span class="sourceLineNo">838</span>  @Override<a name="line.838"></a>
 <span class="sourceLineNo">839</span>  public CompletableFuture&lt;List&lt;RegionInfo&gt;&gt; getRegions(TableName tableName) {<a name="line.839"></a>
 <span class="sourceLineNo">840</span>    if (tableName.equals(META_TABLE_NAME)) {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      return connection.getLocator().getRegionLocation(tableName, null, null, operationTimeoutNs)<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          .thenApply(loc -&gt; Collections.singletonList(loc.getRegion()));<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    } else {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName))<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          .thenApply(<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            locs -&gt; locs.stream().map(loc -&gt; loc.getRegion()).collect(Collectors.toList()));<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  }<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>  @Override<a name="line.850"></a>
-<span class="sourceLineNo">851</span>  public CompletableFuture&lt;Void&gt; flush(TableName tableName) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    addListener(tableExists(tableName), (exists, err) -&gt; {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      if (err != null) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        future.completeExceptionally(err);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      } else if (!exists) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      } else {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        addListener(isTableEnabled(tableName), (tableEnabled, err2) -&gt; {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          if (err2 != null) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>            future.completeExceptionally(err2);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          } else if (!tableEnabled) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>            future.completeExceptionally(new TableNotEnabledException(tableName));<a name="line.863"></a>
-<span class="sourceLineNo">864</span>          } else {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>            addListener(execProcedure(FLUSH_TABLE_PROCEDURE_SIGNATURE, tableName.getNameAsString(),<a name="line.865"></a>
-<span class="sourceLineNo">866</span>              new HashMap&lt;&gt;()), (ret, err3) -&gt; {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>                if (err3 != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>                  future.completeExceptionally(err3);<a name="line.868"></a>
-<span class="sourceLineNo">869</span>                } else {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>                  future.complete(ret);<a name="line.870"></a>
-<span class="sourceLineNo">871</span>                }<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>    });<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    return future;<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>  @Override<a name="line.880"></a>
-<span class="sourceLineNo">881</span>  public CompletableFuture&lt;Void&gt; flushRegion(byte[] regionName) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      if (err != null) {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        future.completeExceptionally(err);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        return;<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      }<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      ServerName serverName = location.getServerName();<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      if (serverName == null) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>        future<a name="line.890"></a>
-<span class="sourceLineNo">891</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        return;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      }<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      addListener(flush(serverName, location.getRegion()), (ret, err2) -&gt; {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        if (err2 != null) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>          future.completeExceptionally(err2);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>        } else {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>          future.complete(ret);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>        }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      });<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    });<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    return future;<a name="line.902"></a>
-<span class="sourceLineNo">903</span>  }<a name="line.903"></a>
-<span class="sourceLineNo">904</span><a name="line.904"></a>
-<span class="sourceLineNo">905</span>  private CompletableFuture&lt;Void&gt; flush(final ServerName serverName, final RegionInfo regionInfo) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    return this.&lt;Void&gt; newAdminCaller()<a name="line.906"></a>
-<span class="sourceLineNo">907</span>            .serverName(serverName)<a name="line.907"></a>
-<span class="sourceLineNo">908</span>            .action(<a name="line.908"></a>
-<span class="sourceLineNo">909</span>              (controller, stub) -&gt; this.&lt;FlushRegionRequest, FlushRegionResponse, Void&gt; adminCall(<a name="line.909"></a>
-<span class="sourceLineNo">910</span>                controller, stub, RequestConverter.buildFlushRegionRequest(regionInfo<a name="line.910"></a>
-<span class="sourceLineNo">911</span>                  .getRegionName()), (s, c, req, done) -&gt; s.flushRegion(c, req, done),<a name="line.911"></a>
-<span class="sourceLineNo">912</span>                resp -&gt; null))<a name="line.912"></a>
-<span class="sourceLineNo">913</span>            .call();<a name="line.913"></a>
-<span class="sourceLineNo">914</span>  }<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>  @Override<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  public CompletableFuture&lt;Void&gt; flushRegionServer(ServerName sn) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    addListener(getRegions(sn), (hRegionInfos, err) -&gt; {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (err != null) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        future.completeExceptionally(err);<a name="line.921"></a>
-<span class="sourceLineNo">922</span>        return;<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; compactFutures = new ArrayList&lt;&gt;();<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      if (hRegionInfos != null) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>        hRegionInfos.forEach(region -&gt; compactFutures.add(flush(sn, region)));<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      }<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      addListener(CompletableFuture.allOf(<a name="line.928"></a>
-<span class="sourceLineNo">929</span>        compactFutures.toArray(new CompletableFuture&lt;?&gt;[compactFutures.size()])), (ret, err2) -&gt; {<a name="line.929"></a>
-<span class="sourceLineNo">930</span>          if (err2 != null) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>            future.completeExceptionally(err2);<a name="line.931"></a>
-<span class="sourceLineNo">932</span>          } else {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>            future.complete(ret);<a name="line.933"></a>
-<span class="sourceLineNo">934</span>          }<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>
-<span class="sourceLineNo">937</span>    return future;<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  @Override<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  public CompletableFuture&lt;Void&gt; compact(TableName tableName, CompactType compactType) {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    return compact(tableName, null, false, compactType);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>  }<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>  @Override<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  public CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily,<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      CompactType compactType) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null. "<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        + "If you don't specify a columnFamily, use compact(TableName) instead");<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    return compact(tableName, columnFamily, false, compactType);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>  }<a name="line.951"></a>
-<span class="sourceLineNo">952</span><a name="line.952"></a>
-<span class="sourceLineNo">953</span>  @Override<a name="line.953"></a>
-<span class="sourceLineNo">954</span>  public CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName) {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    return compactRegion(regionName, null, false);<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  }<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>  @Override<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  public CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName, byte[] columnFamily) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.960"></a>
-<span class="sourceLineNo">961</span>        + " If you don't specify a columnFamily, use compactRegion(regionName) instead");<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    return compactRegion(regionName, columnFamily, false);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>  }<a name="line.963"></a>
-<span class="sourceLineNo">964</span><a name="line.964"></a>
-<span class="sourceLineNo">965</span>  @Override<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  public CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, CompactType compactType) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return compact(tableName, null, true, compactType);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  @Override<a name="line.970"></a>
-<span class="sourceLineNo">971</span>  public CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, byte[] columnFamily,<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      CompactType compactType) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.973"></a>
-<span class="sourceLineNo">974</span>        + "If you don't specify a columnFamily, use compact(TableName) instead");<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    return compact(tableName, columnFamily, true, compactType);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>  }<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>  @Override<a name="line.978"></a>
-<span class="sourceLineNo">979</span>  public CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName) {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    return compactRegion(regionName, null, true);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>  }<a name="line.981"></a>
-<span class="sourceLineNo">982</span><a name="line.982"></a>
-<span class="sourceLineNo">983</span>  @Override<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  public CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName, byte[] columnFamily) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        + " If you don't specify a columnFamily, use majorCompactRegion(regionName) instead");<a name="line.986"></a>
-<span class="sourceLineNo">987</span>    return compactRegion(regionName, columnFamily, true);<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  }<a name="line.988"></a>
-<span class="sourceLineNo">989</span><a name="line.989"></a>
-<span class="sourceLineNo">990</span>  @Override<a name="line.990"></a>
-<span class="sourceLineNo">991</span>  public CompletableFuture&lt;Void&gt; compactRegionServer(ServerName sn) {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    return compactRegionServer(sn, false);<a name="line.992"></a>
-<span class="sourceLineNo">993</span>  }<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span>  @Override<a name="line.995"></a>
-<span class="sourceLineNo">996</span>  public CompletableFuture&lt;Void&gt; majorCompactRegionServer(ServerName sn) {<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    return compactRegionServer(sn, true);<a name="line.997"></a>
-<span class="sourceLineNo">998</span>  }<a name="line.998"></a>
-<span class="sourceLineNo">999</span><a name="line.999"></a>
-<span class="sourceLineNo">1000</span>  private CompletableFuture&lt;Void&gt; compactRegionServer(ServerName sn, boolean major) {<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    addListener(getRegions(sn), (hRegionInfos, err) -&gt; {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      if (err != null) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>        future.completeExceptionally(err);<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        return;<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      }<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; compactFutures = new ArrayList&lt;&gt;();<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      if (hRegionInfos != null) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        hRegionInfos.forEach(region -&gt; compactFutures.add(compact(sn, region, major, null)));<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      addListener(CompletableFuture.allOf(<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        compactFutures.toArray(new CompletableFuture&lt;?&gt;[compactFutures.size()])), (ret, err2) -&gt; {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>          if (err2 != null) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>            future.completeExceptionally(err2);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>          } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>            future.complete(ret);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>          }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        });<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    });<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    return future;<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  }<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span><a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>  private CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName, byte[] columnFamily,<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      boolean major) {<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>      if (err != null) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        future.completeExceptionally(err);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>        return;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      ServerName serverName = location.getServerName();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (serverName == null) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        future<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        return;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      }<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      addListener(compact(location.getServerName(), location.getRegion(), major, columnFamily),<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        (ret, err2) -&gt; {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>          if (err2 != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>            future.completeExceptionally(err2);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>          } else {<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            future.complete(ret);<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>          }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        });<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    });<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    return future;<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span><a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * List all region locations for the specific table.<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   */<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  private CompletableFuture&lt;List&lt;HRegionLocation&gt;&gt; getTableHRegionLocations(TableName tableName) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      CompletableFuture&lt;List&lt;HRegionLocation&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>      // For meta table, we use zk to fetch all locations.<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      AsyncRegistry registry = AsyncRegistryFactory.getRegistry(connection.getConfiguration());<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      addListener(registry.getMetaRegionLocation(), (metaRegions, err) -&gt; {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        if (err != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>          future.completeExceptionally(err);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>        } else if (metaRegions == null || metaRegions.isEmpty() ||<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>          metaRegions.getDefaultRegionLocation() == null) {<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          future.completeExceptionally(new IOException("meta region does not found"));<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        } else {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>          future.complete(Collections.singletonList(metaRegions.getDefaultRegionLocation()));<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>        // close the registry.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        IOUtils.closeQuietly(registry);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      });<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      return future;<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    } else {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>      // For non-meta table, we fetch all locations by scanning hbase:meta table<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName));<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>  }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span><a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>  /**<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>   * Compact column family of a table, Asynchronous operation even if CompletableFuture.get()<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>   */<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>  private CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily, boolean major,<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>      CompactType compactType) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    switch (compactType) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      case MOB:<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>        addListener(connection.registry.getMasterAddress(), (serverName, err) -&gt; {<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>          if (err != null) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>            future.completeExceptionally(err);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>            return;<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>          }<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>          RegionInfo regionInfo = RegionInfo.createMobRegionInfo(tableName);<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>          addListener(compact(serverName, regionInfo, major, columnFamily), (ret, err2) -&gt; {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>            if (err2 != null) {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>              future.completeExceptionally(err2);<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>            } else {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>              future.complete(ret);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>            }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>          });<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        });<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        break;<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      case NORMAL:<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>        addListener(getTableHRegionLocations(tableName), (locations, err) -&gt; {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>          if (err != null) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>            future.completeExceptionally(err);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>            return;<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>          }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>          if (locations == null || locations.isEmpty()) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>            future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>          }<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>          CompletableFuture&lt;?&gt;[] compactFutures =<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>            locations.stream().filter(l -&gt; l.getRegion() != null)<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>              .filter(l -&gt; !l.getRegion().isOffline()).filter(l -&gt; l.getServerName() != null)<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>              .map(l -&gt; compact(l.getServerName(), l.getRegion(), major, columnFamily))<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>              .toArray(CompletableFuture&lt;?&gt;[]::new);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>          // future complete unless all of the compact futures are completed.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>          addListener(CompletableFuture.allOf(compactFutures), (ret, err2) -&gt; {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>            if (err2 != null) {<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>              future.completeExceptionally(err2);<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>            } else {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>              future.complete(ret);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>            }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          });<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        });<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        break;<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      default:<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        throw new IllegalArgumentException("Unknown compactType: " + compactType);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    return future;<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>  }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>  /**<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   * Compact the region at specific region server.<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>  private CompletableFuture&lt;Void&gt; compact(final ServerName sn, final RegionInfo hri,<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      final boolean major, byte[] columnFamily) {<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    return this<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        .&lt;Void&gt; newAdminCaller()<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        .serverName(sn)<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        .action(<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>          (controller, stub) -&gt; this.&lt;CompactRegionRequest, CompactRegionResponse, Void&gt; adminCall(<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>            controller, stub, RequestConverter.buildCompactRegionRequest(hri.getRegionName(),<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>              major, columnFamily), (s, c, req, done) -&gt; s.compactRegion(c, req, done),<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>            resp -&gt; null)).call();<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>  }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span><a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>  private byte[] toEncodeRegionName(byte[] regionName) {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    try {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      return RegionInfo.isEncodedRegionName(regionName) ? regionName<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>          : Bytes.toBytes(RegionInfo.encodeRegionName(regionName));<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    } catch (IOException e) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      return regionName;<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private void checkAndGetTableName(byte[] encodeRegionName, AtomicReference&lt;TableName&gt; tableName,<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      CompletableFuture&lt;TableName&gt; result) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    addListener(getRegionLocation(encodeRegionName), (location, err) -&gt; {<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      if (err != null) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>        result.completeExceptionally(err);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>        return;<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      }<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>        result.completeExceptionally(<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>          new IllegalArgumentException("Can't invoke merge on non-default regions directly"));<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        return;<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>      }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>      if (!tableName.compareAndSet(null, regionInfo.getTable())) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        if (!tableName.get().equals(regionInfo.getTable())) {<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>          // tables of this two region should be same.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>          result.completeExceptionally(<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>            new IllegalArgumentException("Cannot merge regions from two different tables " +<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>              tableName.get() + " and " + regionInfo.getTable()));<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>        } else {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>          result.complete(tableName.get());<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>        }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    });<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  private CompletableFuture&lt;TableName&gt; checkRegionsAndGetTableName(byte[][] encodedRegionNames) {<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    AtomicReference&lt;TableName&gt; tableNameRef = new AtomicReference&lt;&gt;();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    CompletableFuture&lt;TableName&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      checkAndGetTableName(encodedRegionName, tableNameRef, future);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    return future;<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  @Override<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>  public CompletableFuture&lt;Boolean&gt; mergeSwitch(boolean enabled, boolean drainMerges) {<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    return setSplitOrMergeOn(enabled, drainMerges, MasterSwitchType.MERGE);<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  @Override<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>  public CompletableFuture&lt;Boolean&gt; isMergeEnabled() {<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    return isSplitOrMergeOn(MasterSwitchType.MERGE);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>  }<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span><a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  @Override<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>  public CompletableFuture&lt;Boolean&gt; splitSwitch(boolean enabled, boolean drainSplits) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    return setSplitOrMergeOn(enabled, drainSplits, MasterSwitchType.SPLIT);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>  }<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>  @Override<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>  public CompletableFuture&lt;Boolean&gt; isSplitEnabled() {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>    return isSplitOrMergeOn(MasterSwitchType.SPLIT);<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  private CompletableFuture&lt;Boolean&gt; setSplitOrMergeOn(boolean enabled, boolean synchronous,<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      MasterSwitchType switchType) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    SetSplitOrMergeEnabledRequest request =<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      RequestConverter.buildSetSplitOrMergeEnabledRequest(enabled, synchronous, switchType);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      .action((controller, stub) -&gt; this<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>        .&lt;SetSplitOrMergeEnabledRequest, SetSplitOrMergeEnabledResponse, Boolean&gt; call(controller,<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>          stub, request, (s, c, req, done) -&gt; s.setSplitOrMergeEnabled(c, req, done),<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>          (resp) -&gt; resp.getPrevValueList().get(0)))<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      .call();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span><a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  private CompletableFuture&lt;Boolean&gt; isSplitOrMergeOn(MasterSwitchType switchType) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>    IsSplitOrMergeEnabledRequest request =<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(switchType);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    return this<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>        .action(<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          (controller, stub) -&gt; this<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              .&lt;IsSplitOrMergeEnabledRequest, IsSplitOrMergeEnabledResponse, Boolean&gt; call(<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>                controller, stub, request,<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>                (s, c, req, done) -&gt; s.isSplitOrMergeEnabled(c, req, done),<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>                (resp) -&gt; resp.getEnabled())).call();<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>  }<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span><a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  @Override<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>  public CompletableFuture&lt;Void&gt; mergeRegions(List&lt;byte[]&gt; nameOfRegionsToMerge, boolean forcible) {<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>    if (nameOfRegionsToMerge.size() &lt; 2) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      return failedFuture(new IllegalArgumentException(<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>        "Can not merge only " + nameOfRegionsToMerge.size() + " region"));<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    }<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>    byte[][] encodedNameOfRegionsToMerge =<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>      nameOfRegionsToMerge.stream().map(this::toEncodeRegionName).toArray(byte[][]::new);<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span><a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    addListener(checkRegionsAndGetTableName(encodedNameOfRegionsToMerge), (tableName, err) -&gt; {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      if (err != null) {<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>        future.completeExceptionally(err);<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>        return;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span><a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      MergeTableRegionsRequest request = null;<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      try {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        request = RequestConverter.buildMergeTableRegionsRequest(encodedNameOfRegionsToMerge,<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>          forcible, ng.getNonceGroup(), ng.newNonce());<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      } catch (DeserializationException e) {<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>        future.completeExceptionally(e);<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>        return;<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span><a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      addListener(<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        this.&lt;MergeTableRegionsRequest, MergeTableRegionsResponse&gt; procedureCall(tableName, request,<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>          (s, c, req, done) -&gt; s.mergeTableRegions(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>          new MergeTableRegionProcedureBiConsumer(tableName)),<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>        (ret, err2) -&gt; {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>          if (err2 != null) {<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>            future.completeExceptionally(err2);<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>          } else {<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>            future.complete(ret);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>          }<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        });<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    });<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    return future;<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  @Override<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  public CompletableFuture&lt;Void&gt; split(TableName tableName) {<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    addListener(tableExists(tableName), (exist, error) -&gt; {<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>      if (error != null) {<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>        future.completeExceptionally(error);<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>        return;<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      if (!exist) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>        return;<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      addListener(<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        metaTable<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>          .scanAll(new Scan().setReadType(ReadType.PREAD).addFamily(HConstants.CATALOG_FAMILY)<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>            .withStartRow(MetaTableAccessor.getTableStartRowForMeta(tableName, QueryType.REGION))<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>            .withStopRow(MetaTableAccessor.getTableStopRowForMeta(tableName, QueryType.REGION))),<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>        (results, err2) -&gt; {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>          if (err2 != null) {<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>            future.completeExceptionally(err2);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>            return;<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>          }<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>          if (results != null &amp;&amp; !results.isEmpty()) {<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>            List&lt;CompletableFuture&lt;Void&gt;&gt; splitFutures = new ArrayList&lt;&gt;();<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>            for (Result r : results) {<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>              if (r.isEmpty() || MetaTableAccessor.getRegionInfo(r) == null) {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>                continue;<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>              }<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>              RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>              if (rl != null) {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>                for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>                  if (h != null &amp;&amp; h.getServerName() != null) {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>                    RegionInfo hri = h.getRegion();<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>                    if (hri == null || hri.isSplitParent() ||<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>                      hri.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>                      continue;<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>                    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>                    splitFutures.add(split(hri, null));<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>                  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>                }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>              }<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>            }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>            addListener(<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>              CompletableFuture<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>                .allOf(splitFutures.toArray(new CompletableFuture&lt;?&gt;[splitFutures.size()])),<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>              (ret, exception) -&gt; {<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>                if (exception != null) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>                  future.completeExceptionally(exception);<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>                  return;<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>                }<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>                future.complete(ret);<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>              });<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          } else {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            future.complete(null);<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        });<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    });<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    return future;<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  @Override<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>  public CompletableFuture&lt;Void&gt; split(TableName tableName, byte[] splitPoint) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    CompletableFuture&lt;Void&gt; result = new CompletableFuture&lt;&gt;();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    if (splitPoint == null) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      return failedFuture(new IllegalArgumentException("splitPoint can not be null."));<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    addListener(connection.getRegionLocator(tableName).getRegionLocation(splitPoint),<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>      (loc, err) -&gt; {<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>        if (err != null) {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          result.completeExceptionally(err);<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        } else if (loc == null || loc.getRegion() == null) {<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>          result.completeExceptionally(new IllegalArgumentException(<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>            "Region does not found: rowKey=" + Bytes.toStringBinary(splitPoint)));<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>        } else {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>          addListener(splitRegion(loc.getRegion().getRegionName(), splitPoint), (ret, err2) -&gt; {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>            if (err2 != null) {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>              result.completeExceptionally(err2);<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>            } else {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>              result.complete(ret);<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>            }<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>          });<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>        }<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>      });<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    return result;<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>  }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>  @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  public CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        future<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          .completeExceptionally(new IllegalArgumentException("Can't split replicas directly. " +<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>            "Replicas are auto-split when their primary is split."));<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>        return;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>      ServerName serverName = location.getServerName();<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      if (serverName == null) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        future<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>        return;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>      addListener(split(regionInfo, null), (ret, err2) -&gt; {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>        if (err2 != null) {<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>          future.completeExceptionally(err2);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>        } else {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>          future.complete(ret);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>        }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      });<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    });<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    return future;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>  }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>  @Override<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>  public CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName, byte[] splitPoint) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    Preconditions.checkNotNull(splitPoint,<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      "splitPoint is null. If you don't specify a splitPoint, use splitRegion(byte[]) instead");<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        future<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>          .completeExceptionally(new IllegalArgumentException("Can't split replicas directly. " +<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>            "Replicas are auto-split when their primary is split."));<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        return;<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      ServerName serverName = location.getServerName();<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      if (serverName == null) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>        future<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        return;<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>      }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      if (regionInfo.getStartKey() != null &amp;&amp;<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        Bytes.compareTo(regionInfo.getStartKey(), splitPoint) == 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        future.completeExceptionally(<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>          new IllegalArgumentException("should not give a splitkey which equals to startkey!"));<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        return;<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>      }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      addListener(split(regionInfo, splitPoint), (ret, err2) -&gt; {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>        if (err2 != null) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>          future.completeExceptionally(err2);<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>        } else {<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>          future.complete(ret);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      });<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    });<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    return future;<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  private CompletableFuture&lt;Void&gt; split(final RegionInfo hri, byte[] splitPoint) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    TableName tableName = hri.getTable();<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    SplitTableRegionRequest request = null;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    try {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      request = RequestConverter.buildSplitTableRegionRequest(hri, splitPoint, ng.getNonceGroup(),<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>        ng.newNonce());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    } catch (DeserializationException e) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      future.completeExceptionally(e);<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      return future;<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span><a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>    addListener(<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      this.&lt;SplitTableRegionRequest, SplitTableRegionResponse&gt; procedureCall(tableName,<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        request, (s, c, req, done) -&gt; s.splitRegion(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>        new SplitTableRegionProcedureBiConsumer(tableName)),<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      (ret, err2) -&gt; {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>        if (err2 != null) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>          future.completeExceptionally(err2);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>        } else {<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>          future.complete(ret);<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>      });<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>    return future;<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>  }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span><a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>  @Override<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>  public CompletableFuture&lt;Void&gt; assign(byte[] regionName) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>      if (err != null) {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        future.completeExceptionally(err);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        return;<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      addListener(this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        .action(((controller, stub) -&gt; this.&lt;AssignRegionRequest, AssignRegionResponse, Void&gt; call(<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>          controller, stub, RequestConverter.buildAssignRegionRequest(regionInfo.getRegionName()),<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>          (s, c, req, done) -&gt; s.assignRegion(c, req, done), resp -&gt; null)))<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>        .call(), (ret, err2) -&gt; {<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>          if (err2 != null) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>            future.completeExceptionally(err2);<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>          } else {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>            future.complete(ret);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          }<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        });<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    });<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    return future;<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  }<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span><a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>  @Override<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>  public CompletableFuture&lt;Void&gt; unassign(byte[] regionName, boolean forcible) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      if (err != null) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>        future.completeExceptionally(err);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        return;<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      }<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      addListener(<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>        this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>          .action(((controller, stub) -&gt; this<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>            .&lt;UnassignRegionRequest, UnassignRegionResponse, Void&gt; call(controller, stub,<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              RequestConverter.buildUnassignRegionRequest(regionInfo.getRegionName(), forcible),<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              (s, c, req, done) -&gt; s.unassignRegion(c, req, done), resp -&gt; null)))<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          .call(),<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>        (ret, err2) -&gt; {<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (err2 != null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            future.completeExceptionally(err2);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          } else {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>            future.complete(ret);<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>          }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        });<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>    });<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    return future;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  @Override<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  public CompletableFuture&lt;Void&gt; offline(byte[] regionName) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      if (err != null) {<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>        future.completeExceptionally(err);<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      addListener(<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>          .action(((controller, stub) -&gt; this<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>            .&lt;OfflineRegionRequest, OfflineRegionResponse, Void&gt; call(controller, stub,<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>              RequestConverter.buildOfflineRegionRequest(regionInfo.getRegionName()),<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>              (s, c, req, done) -&gt; s.offlineRegion(c, req, done), resp -&gt; null)))<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          .call(),<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>        (ret, err2) -&gt; {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          if (err2 != null) {<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>            future.completeExceptionally(err2);<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>          } else {<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>            future.complete(ret);<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        });<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    });<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    return future;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  }<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span><a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>  @Override<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  public CompletableFuture&lt;Void&gt; move(byte[] regionName) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      if (err != null) {<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        future.completeExceptionally(err);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        return;<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      addListener(<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        moveRegion(regionInfo,<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>          RequestConverter.buildMoveRegionRequest(regionInfo.getEncodedNameAsBytes(), null)),<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        (ret, err2) -&gt; {<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>          if (err2 != null) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>            future.completeExceptionally(err2);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          } else {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            future.complete(ret);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>          }<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>        });<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    });<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    return future;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>  }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span><a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  @Override<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  public CompletableFuture&lt;Void&gt; move(byte[] regionName, ServerName destServerName) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>    Preconditions.checkNotNull(destServerName,<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      "destServerName is null. If you don't specify a destServerName, use move(byte[]) instead");<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      if (err != null) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        future.completeExceptionally(err);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>        return;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      addListener(<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        moveRegion(regionInfo, RequestConverter<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          .buildMoveRegionRequest(regionInfo.getEncodedNameAsBytes(), destServerName)),<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        (ret, err2) -&gt; {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          if (err2 != null) {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>            future.completeExceptionally(err2);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>          } else {<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>            future.complete(ret);<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>          }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        });<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    });<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    return future;<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span><a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  private CompletableFuture&lt;Void&gt; moveRegion(RegionInfo regionInfo, MoveRegionRequest request) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    return this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      .action(<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        (controller, stub) -&gt; this.&lt;MoveRegionRequest, MoveRegionResponse, Void&gt; call(controller,<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>          stub, request, (s, c, req, done) -&gt; s.moveRegion(c, req, done), resp -&gt; null))<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      .call();<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span><a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  @Override<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  public CompletableFuture&lt;Void&gt; setQuota(QuotaSettings quota) {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    return this<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>        .&lt;Void&gt; newMasterCaller()<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>        .action(<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>          (controller, stub) -&gt; this.&lt;SetQuotaRequest, SetQuotaResponse, Void&gt; call(controller,<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>            stub, QuotaSettings.buildSetQuotaRequestProto(quota),<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>            (s, c, req, done) -&gt; s.setQuota(c, req, done), (resp) -&gt; null)).call();<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>  }<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span><a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>  @Override<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>  public CompletableFuture&lt;List&lt;QuotaSettings&gt;&gt; getQuota(QuotaFilter filter) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>    CompletableFuture&lt;List&lt;QuotaSettings&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    Scan scan = QuotaTableUtil.makeScan(filter);<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    this.connection.getTableBuilder(QuotaTableUtil.QUOTA_TABLE_NAME).build()<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        .scan(scan, new AdvancedScanResultConsumer() {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>          List&lt;QuotaSettings&gt; settings = new ArrayList&lt;&gt;();<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>          @Override<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          public void onNext(Result[] results, ScanController controller) {<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>            for (Result result : results) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>              try {<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>                QuotaTableUtil.parseResultToCollection(result, settings);<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>              } catch (IOException e) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>                controller.terminate();<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>                future.completeExceptionally(e);<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>              }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>            }<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          }<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          @Override<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          public void onError(Throwable error) {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>            future.completeExceptionally(error);<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>          }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span><a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>          @Override<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          public void onComplete() {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>            future.complete(settings);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>          }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>        });<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    return future;<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>  }<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span><a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>  @Override<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>  public CompletableFuture&lt;Void&gt; addReplicationPeer(String peerId,<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      ReplicationPeerConfig peerConfig, boolean enabled) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    return this.&lt;AddReplicationPeerRequest, AddReplicationPeerResponse&gt; procedureCall(<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      RequestConverter.buildAddReplicationPeerRequest(peerId, peerConfig, enabled),<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      (s, c, req, done) -&gt; s.addReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "ADD_REPLICATION_PEER"));<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>  @Override<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>  public CompletableFuture&lt;Void&gt; removeReplicationPeer(String peerId) {<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    return this.&lt;RemoveReplicationPeerRequest, RemoveReplicationPeerResponse&gt; procedureCall(<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      RequestConverter.buildRemoveReplicationPeerRequest(peerId),<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      (s, c, req, done) -&gt; s.removeReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "REMOVE_REPLICATION_PEER"));<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>  }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span><a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>  @Override<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  public CompletableFuture&lt;Void&gt; enableReplicationPeer(String peerId) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    return this.&lt;EnableReplicationPeerRequest, EnableReplicationPeerResponse&gt; procedureCall(<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      RequestConverter.buildEnableReplicationPeerRequest(peerId),<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>      (s, c, req, done) -&gt; s.enableReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "ENABLE_REPLICATION_PEER"));<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>  }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span><a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>  @Override<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  public CompletableFuture&lt;Void&gt; disableReplicationPeer(String peerId) {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    return this.&lt;DisableReplicationPeerRequest, DisableReplicationPeerResponse&gt; procedureCall(<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      RequestConverter.buildDisableReplicationPeerRequest(peerId),<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      (s, c, req, done) -&gt; s.disableReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "DISABLE_REPLICATION_PEER"));<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>  }<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span><a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>  @Override<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>  public CompletableFuture&lt;ReplicationPeerConfig&gt; getReplicationPeerConfig(String peerId) {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    return this.&lt;ReplicationPeerConfig&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      .&lt;GetReplicationPeerConfigRequest, GetReplicationPeerConfigResponse, ReplicationPeerConfig&gt; call(<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        controller, stub, RequestConverter.buildGetReplicationPeerConfigRequest(peerId),<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>        (s, c, req, done) -&gt; s.getReplicationPeerConfig(c, req, done),<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>        (resp) -&gt; ReplicationPeerConfigUtil.convert(resp.getPeerConfig())))<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      .call();<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  @Override<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>  public CompletableFuture&lt;Void&gt; updateReplicationPeerConfig(String peerId,<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      ReplicationPeerConfig peerConfig) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>    return this<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      .&lt;UpdateReplicationPeerConfigRequest, UpdateReplicationPeerConfigResponse&gt; procedureCall(<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        RequestConverter.buildUpdateReplicationPeerConfigRequest(peerId, peerConfig),<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        (s, c, req, done) -&gt; s.updateReplicationPeerConfig(c, req, done),<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        (resp) -&gt; resp.getProcId(),<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        new ReplicationProcedureBiConsumer(peerId, () -&gt; "UPDATE_REPLICATION_PEER_CONFIG"));<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>  }<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span><a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>  @Override<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  public CompletableFuture&lt;Void&gt; transitReplicationPeerSyncReplicationState(String peerId,<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      SyncReplicationState clusterState) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    return this<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>      .&lt;TransitReplicationPeerSyncReplicationStateRequest, TransitReplicationPeerSyncReplicationStateResponse&gt; procedureCall(<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        RequestConverter.buildTransitReplicationPeerSyncReplicationStateRequest(peerId,<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>          clusterState),<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        (s, c, req, done) -&gt; s.transitReplicationPeerSyncReplicationState(c, req, done),<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        (resp) -&gt; resp.getProcId(), new ReplicationProcedureBiConsumer(peerId,<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>          () -&gt; "TRANSIT_REPLICATION_PEER_SYNCHRONOUS_REPLICATION_STATE"));<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  @Override<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>  public CompletableFuture&lt;Void&gt; appendReplicationPeerTableCFs(String id,<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      Map&lt;TableName, List&lt;String&gt;&gt; tableCfs) {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>    if (tableCfs == null) {<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      return failedFuture(new ReplicationException("tableCfs is null"));<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    }<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span><a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>    addListener(getReplicationPeerConfig(id), (peerConfig, error) -&gt; {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (!completeExceptionally(future, error)) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        ReplicationPeerConfig newPeerConfig =<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          ReplicationPeerConfigUtil.appendTableCFsToReplicationPeerConfig(tableCfs, peerConfig);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        addListener(updateReplicationPeerConfig(id, newPeerConfig), (result, err) -&gt; {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          if (!completeExceptionally(future, error)) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>            future.complete(result);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>          }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        });<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    });<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>    return future;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span><a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>  @Override<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>  public CompletableFuture&lt;Void&gt; removeReplicationPeerTableCFs(String id,<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>      Map&lt;TableName, List&lt;String&gt;&gt; tableCfs) {<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    if (tableCfs == null) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      return failedFuture(new ReplicationException("tableCfs is null"));<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span><a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    addListener(getReplicationPeerConfig(id), (peerConfig, error) -&gt; {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!completeExceptionally(future, error)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        ReplicationPeerConfig newPeerConfig = null;<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>        try {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>          newPeerConfig = ReplicationPeerConfigUtil<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            .removeTableCFsFromReplicationPeerConfig(tableCfs, peerConfig, id);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        } catch (ReplicationException e) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          future.completeExceptionally(e);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          return;<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>        addListener(updateReplicationPeerConfig(id, newPeerConfig), (result, err) -&gt; {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>          if (!completeExceptionally(future, error)) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>            future.complete(result);<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>          }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        });<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>      }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    });<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    return future;<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  @Override<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  public CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers() {<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>    return listReplicationPeers(RequestConverter.buildListReplicationPeersRequest(null));<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>  @Override<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>  public CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers(Pattern pattern) {<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>    Preconditions.checkNotNull(pattern,<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      "pattern is null. If you don't specify a pattern, use listReplicationPeers() instead");<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    return listReplicationPeers(RequestConverter.buildListReplicationPeersRequest(pattern));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>  }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>  private CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers(<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      ListReplicationPeersRequest request) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    return this<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>        .&lt;List&lt;ReplicationPeerDescription&gt;&gt; newMasterCaller()<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        .action(<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          (controller, stub) -&gt; this<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>              .&lt;ListReplicationPeersRequest, ListReplicationPeersResponse, List&lt;ReplicationPeerDescription&gt;&gt; call(<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>                controller,<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>                stub,<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                request,<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                (s, c, req, done) -&gt; s.listReplicationPeers(c, req, done),<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                (resp) -&gt; resp.getPeerDescList().stream()<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                    .map(ReplicationPeerConfigUtil::toReplicationPeerDescription)<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                    .collect(Collectors.toList()))).call();<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  @Override<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  public CompletableFuture&lt;List&lt;TableCFs&gt;&gt; listReplicatedTableCFs() {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    CompletableFuture&lt;List&lt;TableCFs&gt;&gt; future = new CompletableFuture&lt;List&lt;TableCFs&gt;&gt;();<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    addListener(listTableDescriptors(), (tables, error) -&gt; {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      if (!completeExceptionally(future, error)) {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>        List&lt;TableCFs&gt; replicatedTableCFs = new ArrayList&lt;&gt;();<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>        tables.forEach(table -&gt; {<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          Map&lt;String, Integer&gt; cfs = new HashMap&lt;&gt;();<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>          Stream.of(table.getColumnFamilies())<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            .filter(column -&gt; column.getScope() != HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            .forEach(column -&gt; {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>              cfs.put(column.getNameAsString(), column.getScope());<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>            });<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          if (!cfs.isEmpty()) {<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            replicatedTableCFs.add(new TableCFs(table.getTableName(), cfs));<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>        });<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        future.complete(replicatedTableCFs);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    });<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    return future;<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>  }<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span><a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  @Override<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  public CompletableFuture&lt;Void&gt; snapshot(SnapshotDescription snapshotDesc) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    SnapshotProtos.SnapshotDescription snapshot =<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      ProtobufUtil.createHBaseProtosSnapshotDesc(snapshotDesc);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    try {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>      ClientSnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    } catch (IllegalArgumentException e) {<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      return failedFuture(e);<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    final SnapshotRequest request = SnapshotRequest.newBuilder().setSnapshot(snapshot).build();<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>    addListener(this.&lt;Long&gt; newMasterCaller()<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      .action((controller, stub) -&gt; this.&lt;SnapshotRequest, SnapshotResponse, Long&gt; call(controller,<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        stub, request, (s, c, req, done) -&gt; s.snapshot(c, req, done),<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        resp -&gt; resp.getExpectedTimeout()))<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      .call(), (expectedTimeout, err) -&gt; {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        if (err != null) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>          future.completeExceptionally(err);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>          return;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>        }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>        TimerTask pollingTask = new TimerTask() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>          int tries = 0;<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>          long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>          long endTime = startTime + expectedTimeout;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>          long maxPauseTime = expectedTimeout / maxAttempts;<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span><a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>          @Override<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>          public void run(Timeout timeout) throws Exception {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>            if (EnvironmentEdgeManager.currentTime() &lt; endTime) {<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              addListener(isSnapshotFinished(snapshotDesc), (done, err2) -&gt; {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>                if (err2 != null) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>                  future.completeExceptionally(err2);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                } else if (done) {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>                  future.complete(null);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                } else {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>                  // retry again after pauseTime.<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>                  long pauseTime =<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>                    ConnectionUtils.getPauseTime(TimeUnit.NANOSECONDS.toMillis(pauseNs), ++tries);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>                  pauseTime = Math.min(pauseTime, maxPauseTime);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>                  AsyncConnectionImpl.RETRY_TIMER.newTimeout(this, pauseTime,<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>                    TimeUnit.MILLISECONDS);<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>                }<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>              });<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>            } else {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>              future.completeExceptionally(<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>                new SnapshotCreationException("Snapshot '" + snapshot.getName() +<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>                  "' wasn't completed in expectedTime:" + expectedTimeout + " ms", snapshotDesc));<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>            }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>          }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>        };<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>        AsyncConnectionImpl.RETRY_TIMER.newTimeout(pollingTask, 1, TimeUnit.MILLISECONDS);<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>      });<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    return future;<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  }<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span><a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  @Override<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>  public CompletableFuture&lt;Boolean&gt; isSnapshotFinished(SnapshotDescription snapshot) {<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    return this<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>        .action(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>          (controller, stub) -&gt; this.&lt;IsSnapshotDoneRequest, IsSnapshotDoneResponse, Boolean&gt; call(<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>            controller,<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            stub,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            IsSnapshotDoneRequest.newBuilder()<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>                .setSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot)).build(), (s, c,<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>                req, done) -&gt; s.isSnapshotDone(c, req, done), resp -&gt; resp.getDone())).call();<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>  public CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    boolean takeFailSafeSnapshot = this.connection.getConfiguration().getBoolean(<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT,<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      HConstants.DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    return restoreSnapshot(snapshotName, takeFailSafeSnapshot);<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>  }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span><a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>  @Override<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>  public CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName, boolean takeFailSafeSnapshot,<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      boolean restoreAcl) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>    addListener(listSnapshots(Pattern.compile(snapshotName)), (snapshotDescriptions, err) -&gt; {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      if (err != null) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        future.completeExceptionally(err);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>        return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      TableName tableName = null;<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      if (snapshotDescriptions != null &amp;&amp; !snapshotDescriptions.isEmpty()) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        for (SnapshotDescription snap : snapshotDescriptions) {<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>          if (snap.getName().equals(snapshotName)) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            tableName = snap.getTableName();<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>            break;<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>          }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>        }<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      }<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>      if (tableName == null) {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        future.completeExceptionally(new RestoreSnapshotException(<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>          "Unable to find the table name for snapshot=" + snapshotName));<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>        return;<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      }<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      final TableName finalTableName = tableName;<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>      addListener(tableExists(finalTableName), (exists, err2) -&gt; {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>        if (err2 != null) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          future.completeExceptionally(err2);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        } else if (!exists) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>          // if table does not exist, then just clone snapshot into new table.<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          completeConditionalOnFuture(future,<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>            internalRestoreSnapshot(snapshotName, finalTableName, restoreAcl));<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        } else {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          addListener(isTableDisabled(finalTableName), (disabled, err4) -&gt; {<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            if (err4 != null) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>              future.completeExceptionally(err4);<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>            } else if (!disabled) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>              future.completeExceptionally(new TableNotDisabledException(finalTableName));<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>            } else {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>              completeConditionalOnFuture(future,<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>                restoreSnapshot(snapshotName, finalTableName, takeFailSafeSnapshot, restoreAcl));<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>          });<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>        }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      });<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    });<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    return future;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>  }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span><a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>  private CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName, TableName tableName,<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>      boolean takeFailSafeSnapshot, boolean restoreAcl) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    if (takeFailSafeSnapshot) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>      CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      // Step.1 Take a snapshot of the current state<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>      String failSafeSnapshotSnapshotNameFormat =<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        this.connection.getConfiguration().get(HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME,<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>          HConstants.DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME);<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      final String failSafeSnapshotSnapshotName =<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        failSafeSnapshotSnapshotNameFormat.replace("{snapshot.name}", snapshotName)<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>          .replace("{table.name}", tableName.toString().replace(TableName.NAMESPACE_DELIM, '.'))<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>          .replace("{restore.timestamp}", String.valueOf(EnvironmentEdgeManager.currentTime()));<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      LOG.info("Taking restore-failsafe snapshot: " + failSafeSnapshotSnapshotName);<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      addListener(snapshot(failSafeSnapshotSnapshotName, tableName), (ret, err) -&gt; {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        if (err != null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>          future.completeExceptionally(err);<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        } else {<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>          // Step.2 Restore snapshot<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          addListener(internalRestoreSnapshot(snapshotName, tableName, restoreAcl),<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>            (void2, err2) -&gt; {<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>              if (err2 != null) {<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>                // Step.3.a Something went wrong during the restore and try to rollback.<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>                addListener(<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>                  internalRestoreSnapshot(failSafeSnapshotSnapshotName, tableName, restoreAcl),<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>                  (void3, err3) -&gt; {<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>                    if (err3 != null) {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>                      future.completeExceptionally(err3);<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>                    } else {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>                      String msg =<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>                        "Restore snapshot=" + snapshotName + " failed. Rollback to snapshot=" +<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>                          failSafeSnapshotSnapshotName + " succeeded.";<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>                      future.completeExceptionally(new RestoreSnapshotException(msg, err2));<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>                    }<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>                  });<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>              } else {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>                // Step.3.b If the restore is succeeded, delete the pre-restore snapshot.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>                LOG.info("Deleting restore-failsafe snapshot: " + failSafeSnapshotSnapshotName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>                addListener(deleteSnapshot(failSafeSnapshotSnapshotName), (ret3, err3) -&gt; {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>                  if (err3 != null) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>                    LOG.error(<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>                      "Unable to remove the failsafe snapshot: " + failSafeSnapshotSnapshotName,<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>                      err3);<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>                    future.completeExceptionally(err3);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>                  } else {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                    future.complete(ret3);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>                  }<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>                });<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            });<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>        }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      });<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>      return future;<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    } else {<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      return internalRestoreSnapshot(snapshotName, tableName, restoreAcl);<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>    }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span><a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>  private &lt;T&gt; void completeConditionalOnFuture(CompletableFuture&lt;T&gt; dependentFuture,<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      CompletableFuture&lt;T&gt; parentFuture) {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>    addListener(parentFuture, (res, err) -&gt; {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      if (err != null) {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>        dependentFuture.completeExceptionally(err);<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      } else {<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        dependentFuture.complete(res);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    });<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  @Override<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  public CompletableFuture&lt;Void&gt; cloneSnapshot(String snapshotName, TableName tableName,<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>      boolean restoreAcl) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    addListener(tableExists(tableName), (exists, err) -&gt; {<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      if (err != null) {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>        future.completeExceptionally(err);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      } else if (exists) {<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>        future.completeExceptionally(new TableExistsException(tableName));<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      } else {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>        completeConditionalOnFuture(future,<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>          internalRestoreSnapshot(snapshotName, tableName, restoreAcl));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    });<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    return future;<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private CompletableFuture&lt;Void&gt; internalRestoreSnapshot(String snapshotName, TableName tableName,<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>      boolean restoreAcl) {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    SnapshotProtos.SnapshotDescription snapshot = SnapshotProtos.SnapshotDescription.newBuilder()<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>      .setName(snapshotName).setTable(tableName.getNameAsString()).build();<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    try {<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>      ClientSnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    } catch (IllegalArgumentException e) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      return failedFuture(e);<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    }<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    return waitProcedureResult(this.&lt;Long&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>      .&lt;RestoreSnapshotRequest, RestoreSnapshotResponse, Long&gt; call(controller, stub,<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>        RestoreSnapshotRequest.newBuilder().setSnapshot(snapshot).setNonceGroup(ng.getNonceGroup())<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>          .setNonce(ng.newNonce()).setRestoreACL(restoreAcl).build(),<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>        (s, c, req, done) -&gt; s.restoreSnapshot(c, req, done), (resp) -&gt; resp.getProcId()))<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>      .call());<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  }<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span><a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  @Override<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots() {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    return getCompletedSnapshots(null);<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>  }<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span><a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>  @Override<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots(Pattern pattern) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    Preconditions.checkNotNull(pattern,<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      "pattern is null. If you don't specify a pattern, use listSnapshots() instead");<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    return getCompletedSnapshots(pattern);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>  }<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span><a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>  private CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; getCompletedSnapshots(Pattern pattern) {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    return this.&lt;List&lt;SnapshotDescription&gt;&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        .&lt;GetCompletedSnapshotsRequest, GetCompletedSnapshotsResponse, List&lt;SnapshotDescription&gt;&gt;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        call(controller, stub, GetCompletedSnapshotsRequest.newBuilder().build(),<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          (s, c, req, done) -&gt; s.getCompletedSnapshots(c, req, done),<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>          resp -&gt; ProtobufUtil.toSnapshotDescriptionList(resp, pattern)))<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>        .call();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>  }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>  @Override<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        + " If you don't specify a tableNamePattern, use listSnapshots() instead");<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    return getCompletedSnapshots(tableNamePattern, null);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  @Override<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern,<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      Pattern snapshotNamePattern) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>        + " If you don't specify a tableNamePattern, use listSnapshots(Pattern) instead");<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>        + " If you don't specify a snapshotNamePattern, use listTableSnapshots(Pattern) instead");<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    return getCompletedSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>  }<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span><a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>  private CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; getCompletedSnapshots(<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      Pattern tableNamePattern, Pattern snapshotNamePattern) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    addListener(listTableNames(tableNamePattern, false), (tableNames, err) -&gt; {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      if (err != null) {<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        future.completeExceptionally(err);<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        return;<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>      }<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      if (tableNames == null || tableNames.size() &lt;= 0) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>        future.complete(Collections.emptyList());<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        return;<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>      }<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      addListener(getCompletedSnapshots(snapshotNamePattern), (snapshotDescList, err2) -&gt; {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>        if (err2 != null) {<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>          future.completeExceptionally(err2);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>          return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>        }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>        if (snapshotDescList == null || snapshotDescList.isEmpty()) {<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>          future.complete(Collections.emptyList());<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>          return;<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>        }<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>        future.complete(snapshotDescList.stream()<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>          .filter(snap -&gt; (snap != null &amp;&amp; tableNames.contains(snap.getTableName())))<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>          .collect(Collectors.toList()));<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      });<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>    });<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>    return future;<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  }<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span><a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>  @Override<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>  public CompletableFuture&lt;Void&gt; deleteSnapshot(String snapshotName) {<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    return internalDeleteSnapshot(new SnapshotDescription(snapshotName));<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>  @Override<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>  public CompletableFuture&lt;Void&gt; deleteSnapshots() {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    return internalDeleteSnapshots(null, null);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>  }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>  @Override<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>  public CompletableFuture&lt;Void&gt; deleteSnapshots(Pattern snapshotNamePattern) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>        + " If you don't specify a snapshotNamePattern, use deleteSnapshots() instead");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    return internalDeleteSnapshots(null, snapshotNamePattern);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  @Override<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>  public CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern) {<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>        + " If you don't specify a tableNamePattern, use deleteSnapshots() instead");<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>    return internalDeleteSnapshots(tableNamePattern, null);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>  @Override<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>  public CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern,<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>      Pattern snapshotNamePattern) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        + " If you don't specify a tableNamePattern, use deleteSnapshots(Pattern) instead");<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>        + " If you don't specify a snapshotNamePattern, use deleteSnapshots(Pattern) instead");<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    return internalDeleteSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>  }<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span><a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>  private CompletableFuture&lt;Void&gt; internalDeleteSnapshots(Pattern tableNamePattern,<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      Pattern snapshotNamePattern) {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshotsFuture;<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (tableNamePattern == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      listSnapshotsFuture = getCompletedSnapshots(snapshotNamePattern);<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>    } else {<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      listSnapshotsFuture = getCompletedSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    addListener(listSnapshotsFuture, ((snapshotDescriptions, err) -&gt; {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>      if (err != null) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>        future.completeExceptionally(err);<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        return;<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      if (snapshotDescriptions == null || snapshotDescriptions.isEmpty()) {<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>        future.complete(null);<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>        return;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      }<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      addListener(CompletableFuture.allOf(snapshotDescriptions.stream()<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        .map(this::internalDeleteSnapshot).toArray(CompletableFuture[]::new)), (v, e) -&gt; {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          if (e != null) {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>            future.completeExceptionally(e);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>          } else {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>            future.complete(v);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>          }<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>        });<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    }));<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    return future;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  private CompletableFuture&lt;Void&gt; internalDeleteSnapshot(SnapshotDescription snapshot) {<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>    return this<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        .&lt;Void&gt; newMasterCaller()<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        .action(<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>          (controller, stub) -&gt; this.&lt;DeleteSnapshotRequest, DeleteSnapshotResponse, Void&gt; call(<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>            controller,<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>            stub,<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>            DeleteSnapshotRequest.newBuilder()<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>                .setSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot)).build(), (s, c,<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>                req, done) -&gt; s.deleteSnapshot(c, req, done), resp -&gt; null)).call();<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  }<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span><a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  @Override<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  public CompletableFuture&lt;Void&gt; execProcedure(String signature, String instance,<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>      Map&lt;String, String&gt; props) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    ProcedureDescription procDesc =<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>      ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    addListener(this.&lt;Long&gt; newMasterCaller()<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      .action((controller, stub) -&gt; this.&lt;ExecProcedureRequest, ExecProcedureResponse, Long&gt; call(<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>        controller, stub, ExecProcedureRequest.newBuilder().setProcedure(procDesc).build(),<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>        (s, c, req, done) -&gt; s.execProcedure(c, req, done), resp -&gt; resp.getExpectedTimeout()))<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      .call(), (expectedTimeout, err) -&gt; {<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        if (err != null) {<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          future.completeExceptionally(err);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>          return;<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>        }<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>        TimerTask pollingTask = new TimerTask() {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          int tries = 0;<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>          long startTime = EnvironmentEdgeManager.currentTime();<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>          long endTime = startTime + expectedTimeout;<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>          long maxPauseTime = expectedTimeout / maxAttempts;<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>          @Override<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>          public void run(Timeout timeout) throws Exception {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>            if (EnvironmentEdgeManager.currentTime() &lt; endTime) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>              addListener(isProcedureFinished(signature, instance, props), (done, err2) -&gt; {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>                if (err2 != null) {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>                  future.completeExceptionally(err2);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>                  return;<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>                }<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>                if (done) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>                  future.complete(null);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>                } else {<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>                  // retry again after pauseTime.<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>                  long pauseTime =<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>                    ConnectionUtils.getPauseTime(TimeUnit.NANOSECONDS.toMillis(pauseNs), ++tries);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>                  pauseTime = Math.min(pauseTime, maxPauseTime);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>                  AsyncConnectionImpl.RETRY_TIMER.newTimeout(this, pauseTime,<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>                    TimeUnit.MICROSECONDS);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>                }<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>              });<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            } else {<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>              future.completeExceptionally(new IOException("Procedure '" + signature + " : " +<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>                instance + "' wasn't completed in expectedTime:" + expectedTimeout + " ms"));<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>            }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>          }<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>        };<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>        // Queue the polling task into RETRY_TIMER to poll procedure state asynchronously.<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>        AsyncConnectionImpl.RETRY_TIMER.newTimeout(pollingTask, 1, TimeUnit.MILLISECONDS);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      });<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    return future;<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span><a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  @Override<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  public CompletableFuture&lt;byte[]&gt; execProcedureWithReturn(String signature, String instance,<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      Map&lt;String, String&gt; props) {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    ProcedureDescription proDesc =<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>    return this.&lt;byte[]&gt; newMasterCaller()<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        .action(<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>          (controller, stub) -&gt; this.&lt;ExecProcedureRequest, ExecProcedureResponse, byte[]&gt; call(<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            controller, stub, ExecProcedureRequest.newBuilder().setProcedure(proDesc).build(),<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            (s, c, req, done) -&gt; s.execProcedureWithRet(c, req, done),<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>            resp -&gt; resp.hasReturnData() ? resp.getReturnData().toByteArray() : null))<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        .call();<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  }<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span><a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>  @Override<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  public CompletableFuture&lt;Boolean&gt; isProcedureFinished(String signature, String instance,<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      Map&lt;String, String&gt; props) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    ProcedureDescription proDesc =<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>        ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        .action((controller, stub) -&gt; this<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>            .&lt;IsProcedureDoneRequest, IsProcedureDoneResponse, Boolean&gt; call(controller, stub,<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>              IsProcedureDoneRequest.newBuilder().setProcedure(proDesc).build(),<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>              (s, c, req, done) -&gt; s.isProcedureDone(c, req, done), resp -&gt; resp.getDone()))<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        .call();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  @Override<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  public CompletableFuture&lt;Boolean&gt; abortProcedure(long procId, boolean mayInterruptIfRunning) {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return this.&lt;Boolean&gt; newMasterCaller().action(<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      (controller, stub) -&gt; this.&lt;AbortProcedureRequest, AbortProcedureResponse, Boolean&gt; call(<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        controller, stub, AbortProcedureRequest.newBuilder().setProcId(procId).build(),<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        (s, c, req, done) -&gt; s.abortProcedure(c, req, done), resp -&gt; resp.getIsProcedureAborted()))<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        .call();<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span><a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>  @Override<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  public CompletableFuture&lt;String&gt; getProcedures() {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    return this<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>        .&lt;String&gt; newMasterCaller()<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        .action(<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>          (controller, stub) -&gt; this<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>              .&lt;GetProceduresRequest, GetProceduresResponse, String&gt; call(<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>                controller, stub, GetProceduresRequest.newBuilder().build(),<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>                (s, c, req, done) -&gt; s.getProcedures(c, req, done),<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>                resp -&gt; ProtobufUtil.toProcedureJson(resp.getProcedureList()))).call();<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span><a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  @Override<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  public CompletableFuture&lt;String&gt; getLocks() {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>    return this<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>        .&lt;String&gt; newMasterCaller()<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        .action(<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>          (controller, stub) -&gt; this.&lt;GetLocksRequest, GetLocksResponse, String&gt; call(<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>            controller, stub, GetLocksRequest.newBuilder().build(),<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>            (s, c, req, done) -&gt; s.getLocks(c, req, done),<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>            resp -&gt; ProtobufUtil.toLockJson(resp.getLockList()))).call();<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>  }<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span><a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  @Override<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>  public CompletableFuture&lt;Void&gt; decommissionRegionServers(List&lt;ServerName&gt; servers, boolean offload) {<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>        .action((controller, stub) -&gt; this<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>          .&lt;DecommissionRegionServersRequest, DecommissionRegionServersResponse, Void&gt; call(<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>            controller, stub, RequestConverter.buildDecommissionRegionServersRequest(servers, offload),<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>            (s, c, req, done) -&gt; s.decommissionRegionServers(c, req, done), resp -&gt; null))<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>        .call();<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>  }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span><a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>  @Override<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public CompletableFuture&lt;List&lt;ServerName&gt;&gt; listDecommissionedRegionServers() {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    return this.&lt;List&lt;ServerName&gt;&gt; newMasterCaller()<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>        .action((controller, stub) -&gt; this<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>          .&lt;ListDecommissionedRegionServersRequest, ListDecommissionedRegionServersResponse,<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>            List&lt;ServerName&gt;&gt; call(<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>              controller, stub, ListDecommissionedRegionServersRequest.newBuilder().build(),<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>              (s, c, req, done) -&gt; s.listDecommissionedRegionServers(c, req, done),<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>              resp -&gt; resp.getServerNameList().stream().map(ProtobufUtil::toServerName)<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>                  .collect(Collectors.toList())))<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        .call();<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span><a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>  @Override<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>  public CompletableFuture&lt;Void&gt; recommissionRegionServer(ServerName server,<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>      List&lt;byte[]&gt; encodedRegionNames) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>        .action((controller, stub) -&gt; this<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          .&lt;RecommissionRegionServerRequest, RecommissionRegionServerResponse, Void&gt; call(controller,<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            stub, RequestConverter.buildRecommissionRegionServerRequest(server, encodedRegionNames),<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            (s, c, req, done) -&gt; s.recommissionRegionServer(c, req, done), resp -&gt; null))<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        .call();<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>  }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span><a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>  /**<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>   * Get the region location for the passed region name. The region name may be a full region name<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>   * or encoded region name. If the region does not found, then it'll throw an<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>   * UnknownRegionException wrapped by a {@link CompletableFuture}<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>   * @param regionNameOrEncodedRegionName region name or encoded region name<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>   * @return region location, wrapped by a {@link CompletableFuture}<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>   */<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>  @VisibleForTesting<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(byte[] regionNameOrEncodedRegionName) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    if (regionNameOrEncodedRegionName == null) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      return failedFuture(new IllegalArgumentException("Passed region name can't be null"));<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    try {<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      CompletableFuture&lt;Optional&lt;HRegionLocation&gt;&gt; future;<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      if (RegionInfo.isEncodedRegionName(regionNameOrEncodedRegionName)) {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>        String encodedName = Bytes.toString(regionNameOrEncodedRegionName);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>        if (encodedName.length() &lt; RegionInfo.MD5_HEX_LENGTH) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>          // old format encodedName, should be meta region<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>          future = connection.registry.getMetaRegionLocation()<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>            .thenApply(locs -&gt; Stream.of(locs.getRegionLocations())<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>              .filter(loc -&gt; loc.getRegion().getEncodedName().equals(encodedName)).findFirst());<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>        } else {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>          future = AsyncMetaTableAccessor.getRegionLocationWithEncodedName(metaTable,<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>            regionNameOrEncodedRegionName);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>        }<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      } else {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>        RegionInfo regionInfo =<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>          MetaTableAccessor.parseRegionInfoFromRegionName(regionNameOrEncodedRegionName);<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        if (regionInfo.isMetaRegion()) {<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>          future = connection.registry.getMetaRegionLocation()<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>            .thenApply(locs -&gt; Stream.of(locs.getRegionLocations())<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>              .filter(loc -&gt; loc.getRegion().getReplicaId() == regionInfo.getReplicaId())<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>              .findFirst());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        } else {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          future =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            AsyncMetaTableAccessor.getRegionLocation(metaTable, regionNameOrEncodedRegionName);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        }<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      }<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span><a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      CompletableFuture&lt;HRegionLocation&gt; returnedFuture = new CompletableFuture&lt;&gt;();<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>      addListener(future, (location, err) -&gt; {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        if (err != null) {<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          returnedFuture.completeExceptionally(err);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          return;<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        if (!location.isPresent() || location.get().getRegion() == null) {<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          returnedFuture.completeExceptionally(<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>            new UnknownRegionException("Invalid region name or encoded region name: " +<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>              Bytes.toStringBinary(regionNameOrEncodedRegionName)));<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>        } else {<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>          returnedFuture.complete(location.get());<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        }<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>      });<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>      return returnedFuture;<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    } catch (IOException e) {<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      return failedFuture(e);<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>  }<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span><a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  /**<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>   * Get the region info for the passed region name. The region name may be a full region name or<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>   * encoded region name. If the region does not found, then it'll throw an UnknownRegionException<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>   * wrapped by a {@link CompletableFuture}<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>   * @param regionNameOrEncodedRegionName<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>   * @return region info, wrapped by a {@link CompletableFuture}<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>   */<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>  private CompletableFuture&lt;RegionInfo&gt; getRegionInfo(byte[] regionNameOrEncodedRegionName) {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    if (regionNameOrEncodedRegionName == null) {<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      return failedFuture(new IllegalArgumentException("Passed region name can't be null"));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    }<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span><a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    if (Bytes.equals(regionNameOrEncodedRegionName,<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>      RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName()) ||<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      Bytes.equals(regionNameOrEncodedRegionName,<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>        RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedNameAsBytes())) {<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      return CompletableFuture.completedFuture(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    }<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span><a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    CompletableFuture&lt;RegionInfo&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    addListener(getRegionLocation(regionNameOrEncodedRegionName), (location, err) -&gt; {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      if (err != null) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>        future.completeExceptionally(err);<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        future.complete(location.getRegion());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    });<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>    return future;<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  }<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span><a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>  private byte[][] getSplitKeys(byte[] startKey, byte[] endKey, int numRegions) {<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    if (numRegions &lt; 3) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      throw new IllegalArgumentException("Must create at least three regions");<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    } else if (Bytes.compareTo(startKey, endKey) &gt;= 0) {<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>      throw new IllegalArgumentException("Start key must be smaller than end key");<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    }<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    if (numRegions == 3) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>      return new byte[][] { startKey, endKey };<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    }<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    if (splitKeys == null || splitKeys.length != numRegions - 1) {<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>      throw new IllegalArgumentException("Unable to split key range into enough regions");<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>    return splitKeys;<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>  }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span><a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>  private void verifySplitKeys(byte[][] splitKeys) {<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    Arrays.sort(splitKeys, Bytes.BYTES_COMPARATOR);<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    // Verify there are no duplicate split keys<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    byte[] lastKey = null;<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>    for (byte[] splitKey : splitKeys) {<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      if (Bytes.compareTo(splitKey, HConstants.EMPTY_BYTE_ARRAY) == 0) {<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>        throw new IllegalArgumentException("Empty split key must not be passed in the split keys.");<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>      }<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      if (lastKey != null &amp;&amp; Bytes.equals(splitKey, lastKey)) {<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        throw new IllegalArgumentException("All split keys must be unique, " + "found duplicate: "<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>            + Bytes.toStringBinary(splitKey) + ", " + Bytes.toStringBinary(lastKey));<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>      }<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      lastKey = splitKey;<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    }<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>  }<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span><a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>  private static abstract class ProcedureBiConsumer implements BiConsumer&lt;Void, Throwable&gt; {<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span><a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    abstract void onFinished();<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span><a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>    abstract void onError(Throwable error);<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span><a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>    @Override<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    public void accept(Void v, Throwable error) {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>      if (error != null) {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>        onError(error);<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        return;<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>      }<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>      onFinished();<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    }<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>  }<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span><a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>  private static abstract class TableProcedureBiConsumer extends ProcedureBiConsumer {<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>    protected final TableName tableName;<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span><a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    TableProcedureBiConsumer(TableName tableName) {<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      this.tableName = tableName;<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>    }<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span><a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    abstract String getOperationType();<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span><a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    String getDescription() {<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      return "Operation: " + getOperationType() + ", " + "Table Name: "<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>          + tableName.getNameWithNamespaceInclAsString();<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>    }<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span><a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    @Override<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    void onFinished() {<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      LOG.info(getDescription() + " completed");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span><a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>    @Override<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    void onError(Throwable error) {<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      LOG.info(getDescription() + " failed with " + error.getMessage());<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    }<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>  }<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span><a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>  private static abstract class NamespaceProcedureBiConsumer extends ProcedureBiConsumer {<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    protected final String namespaceName;<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span><a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    NamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>      this.namespaceName = namespaceName;<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>    }<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span><a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    abstract String getOperationType();<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span><a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    String getDescription() {<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      return "Operation: " + getOperationType() + ", Namespace: " + namespaceName;<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>    }<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span><a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>    @Override<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    void onFinished() {<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>      LOG.info(getDescription() + " completed");<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>    }<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span><a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    @Override<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    void onError(Throwable error) {<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>      LOG.info(getDescription() + " failed with " + error.getMessage());<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    }<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span><a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>  private static class CreateTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span><a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    CreateTableProcedureBiConsumer(TableName tableName) {<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>      super(tableName);<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    }<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span><a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    @Override<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    String getOperationType() {<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>      return "CREATE";<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>    }<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>  }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span><a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>  private static class ModifyTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span><a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>    ModifyTableProcedureBiConsumer(AsyncAdmin admin, TableName tableName) {<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>      super(tableName);<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    }<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span><a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    @Override<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    String getOperationType() {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      return "ENABLE";<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  }<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span><a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>  private class DeleteTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span><a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    DeleteTableProcedureBiConsumer(TableName tableName) {<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>      super(tableName);<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    }<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span><a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>    @Override<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String getOperationType() {<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      return "DELETE";<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span><a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>    @Override<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    void onFinished() {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      connection.getLocator().clearCache(this.tableName);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      super.onFinished();<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>    }<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>  }<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span><a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>  private static class TruncateTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span><a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>    TruncateTableProcedureBiConsumer(TableName tableName) {<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      super(tableName);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>    }<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span><a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    @Override<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>    String getOperationType() {<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      return "TRUNCATE";<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>    }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>  }<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span><a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>  private static class EnableTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span><a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>    EnableTableProcedureBiConsumer(TableName tableName) {<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      super(tableName);<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>    }<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span><a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>    @Override<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>    String getOperationType() {<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>      return "ENABLE";<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    }<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>  }<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span><a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>  private static class DisableTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span><a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    DisableTableProcedureBiConsumer(TableName tableName) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      super(tableName);<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>    }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span><a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>    @Override<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>    String getOperationType() {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>      return "DISABLE";<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    }<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>  }<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span><a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  private static class AddColumnFamilyProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span><a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>    AddColumnFamilyProcedureBiConsumer(TableName tableName) {<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      super(tableName);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>    }<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span><a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>    @Override<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>    String getOperationType() {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>      return "ADD_COLUMN_FAMILY";<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>    }<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>  }<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span><a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>  private static class DeleteColumnFamilyProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span><a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>    DeleteColumnFamilyProcedureBiConsumer(TableName tableName) {<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      super(tableName);<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>    }<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span><a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    @Override<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>    String getOperationType() {<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>      return "DELETE_COLUMN_FAMILY";<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>    }<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>  }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span><a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>  private static class ModifyColumnFamilyProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span><a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>    ModifyColumnFamilyProcedureBiConsumer(TableName tableName) {<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      super(tableName);<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>    }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span><a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>    @Override<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>    String getOperationType() {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>      return "MODIFY_COLUMN_FAMILY";<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>  }<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span><a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>  private static class CreateNamespaceProcedureBiConsumer extends NamespaceProcedureBiConsumer {<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span><a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>    CreateNamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      super(namespaceName);<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>    }<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span><a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>    @Override<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>    String getOperationType() {<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>      return "CREATE_NAMESPACE";<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>    }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>  }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>  private static class DeleteNamespaceProcedureBiConsumer extends NamespaceProcedureBiConsumer {<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span><a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    DeleteNamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>      super(namespaceName);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span><a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    @Override<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>    String getOperationType() {<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      return "DELETE_NAMESPACE";<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    }<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>  }<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span><a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>  private static class ModifyNamespaceProcedureBiConsumer extends NamespaceProcedureBiConsumer {<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span><a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    ModifyNamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      super(namespaceName);<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span><a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>    @Override<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    String getOperationType() {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      return "MODIFY_NAMESPACE";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>    }<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>  }<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span><a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>  private static class MergeTableRegionProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>    MergeTableRegionProcedureBiConsumer(TableName tableName) {<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      super(tableName);<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>    }<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span><a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>    @Override<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>    String getOperationType() {<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      return "MERGE_REGIONS";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>  }<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span><a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>  private static class SplitTableRegionProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span><a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>    SplitTableRegionProcedureBiConsumer(TableName tableName) {<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      super(tableName);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>    }<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span><a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    @Override<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>    String getOperationType() {<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>      return "SPLIT_REGION";<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>    }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>  }<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>  private static class ReplicationProcedureBiConsumer extends ProcedureBiConsumer {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>    private final String peerId;<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>    private final Supplier&lt;String&gt; getOperation;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span><a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>    ReplicationProcedureBiConsumer(String peerId, Supplier&lt;String&gt; getOperation) {<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      this.peerId = peerId;<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      this.getOperation = getOperation;<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    }<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span><a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>    String getDescription() {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>      return "Operation: " + getOperation.get() + ", peerId: " + peerId;<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>    }<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span><a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>    @Override<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>    void onFinished() {<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      LOG.info(getDescription() + " completed");<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>    }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>    @Override<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    void onError(Throwable error) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      LOG.info(getDescription() + " failed with " + error.getMessage());<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>  }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>  private CompletableFuture&lt;Void&gt; waitProcedureResult(CompletableFuture&lt;Long&gt; procFuture) {<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>    addListener(procFuture, (procId, error) -&gt; {<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>      if (error != null) {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>        future.completeExceptionally(error);<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>        return;<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      }<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      getProcedureResult(procId, future, 0);<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>    });<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>    return future;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>  }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>  private void getProcedureResult(long procId, CompletableFuture&lt;Void&gt; future, int retries) {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>    addListener(<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>      this.&lt;GetProcedureResultResponse&gt; newMasterCaller()<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        .action((controller, stub) -&gt; this<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>          .&lt;GetProcedureResultRequest, GetProcedureResultResponse, GetProcedureResultResponse&gt; call(<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>            controller, stub, GetProcedureResultRequest.newBuilder().setProcId(procId).build(),<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>            (s, c, req, done) -&gt; s.getProcedureResult(c, req, done), (resp) -&gt; resp))<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>        .call(),<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>      (response, error) -&gt; {<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        if (error != null) {<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>          LOG.warn("failed to get the procedure result procId={}", procId,<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>            ConnectionUtils.translateException(error));<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>          retryTimer.newTimeout(t -&gt; getProcedureResult(procId, future, retries + 1),<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>            ConnectionUtils.getPauseTime(pauseNs, retries), TimeUnit.NANOSECONDS);<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>          return;<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>        }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>        if (response.getState() == GetProcedureResultResponse.State.RUNNING) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>          retryTimer.newTimeout(t -&gt; getProcedureResult(procId, future, retries + 1),<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>            ConnectionUtils.getPauseTime(pauseNs, retries), TimeUnit.NANOSECONDS);<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>          return;<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        }<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>        if (response.hasException()) {<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>          IOException ioe = ForeignExceptionUtil.toIOException(response.getException());<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          future.completeExceptionally(ioe);<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>        } else {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          future.complete(null);<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        }<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>      });<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>  }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span><a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>  private &lt;T&gt; CompletableFuture&lt;T&gt; failedFuture(Throwable error) {<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>    CompletableFuture&lt;T&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>    future.completeExceptionally(error);<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>    return future;<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>  }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span><a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>  private &lt;T&gt; boolean completeExceptionally(CompletableFuture&lt;T&gt; future, Throwable error) {<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    if (error != null) {<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>      future.completeExceptionally(error);<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      return true;<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>    }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>    return false;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>  }<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span><a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>  @Override<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>  public CompletableFuture&lt;ClusterMetrics&gt; getClusterMetrics() {<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    return getClusterMetrics(EnumSet.allOf(Option.class));<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>  }<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span><a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>  @Override<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>  public CompletableFuture&lt;ClusterMetrics&gt; getClusterMetrics(EnumSet&lt;Option&gt; options) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>    return this<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>        .&lt;ClusterMetrics&gt; newMasterCaller()<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>        .action(<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>          (controller, stub) -&gt; this<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>              .&lt;GetClusterStatusRequest, GetClusterStatusResponse, ClusterMetrics&gt; call(controller,<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>                stub, RequestConverter.buildGetClusterStatusRequest(options),<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>                (s, c, req, done) -&gt; s.getClusterStatus(c, req, done),<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>                resp -&gt; ClusterMetricsBuilder.toClusterMetrics(resp.getClusterStatus()))).call();<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>  }<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span><a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>  @Override<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>  public CompletableFuture&lt;Void&gt; shutdown() {<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>    return this.&lt;Void&gt; newMasterCaller().priority(HIGH_QOS)<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      .action((controller, stub) -&gt; this.&lt;ShutdownRequest, ShutdownResponse, Void&gt; call(controller,<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        stub, ShutdownRequest.newBuilder().build(), (s, c, req, done) -&gt; s.shutdown(c, req, done),<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        resp -&gt; null))<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      .call();<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>  }<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span><a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>  @Override<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>  public CompletableFuture&lt;Void&gt; stopMaster() {<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    return this.&lt;Void&gt; newMasterCaller().priority(HIGH_QOS)<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      .action((controller, stub) -&gt; this.&lt;StopMasterRequest, StopMasterResponse, Void&gt; call(<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        controller, stub, StopMasterRequest.newBuilder().build(),<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        (s, c, req, done) -&gt; s.stopMaster(c, req, done), resp -&gt; null))<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      .call();<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>  }<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span><a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>  @Override<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>  public CompletableFuture&lt;Void&gt; stopRegionServer(ServerName serverName) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>    StopServerRequest request = RequestConverter<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      .buildStopServerRequest("Called by admin client " + this.connection.toString());<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>    return this.&lt;Void&gt; newAdminCaller().priority(HIGH_QOS)<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      .action((controller, stub) -&gt; this.&lt;StopServerRequest, StopServerResponse, Void&gt; adminCall(<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>        controller, stub, request, (s, c, req, done) -&gt; s.stopServer(controller, req, done),<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        resp -&gt; null))<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      .serverName(serverName).call();<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>  }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>  @Override<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>  public CompletableFuture&lt;Void&gt; updateConfiguration(ServerName serverName) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    return this<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>        .&lt;Void&gt; newAdminCaller()<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        .action(<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>          (controller, stub) -&gt; this<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>              .&lt;UpdateConfigurationRequest, UpdateConfigurationResponse, Void&gt; adminCall(<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>                controller, stub, UpdateConfigurationRequest.getDefaultInstance(),<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>                (s, c, req, done) -&gt; s.updateConfiguration(controller, req, done), resp -&gt; null))<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        .serverName(serverName).call();<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>  }<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span><a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>  @Override<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>  public CompletableFuture&lt;Void&gt; updateConfiguration() {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    addListener(<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS, Option.MASTER, Option.BACKUP_MASTERS)),<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>      (status, err) -&gt; {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>        if (err != null) {<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>          future.completeExceptionally(err);<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        } else {<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>          List&lt;CompletableFuture&lt;Void&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>          status.getLiveServerMetrics().keySet()<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>            .forEach(server -&gt; futures.add(updateConfiguration(server)));<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>          futures.add(updateConfiguration(status.getMasterName()));<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>          status.getBackupMasterNames().forEach(master -&gt; futures.add(updateConfiguration(master)));<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>          addListener(<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>            CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>            (result, err2) -&gt; {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>              if (err2 != null) {<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>                future.completeExceptionally(err2);<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>              } else {<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>                future.complete(result);<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>              }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>            });<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>        }<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>      });<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>    return future;<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span><a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>  @Override<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>  public CompletableFuture&lt;Void&gt; rollWALWriter(ServerName serverName) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    return this<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>        .&lt;Void&gt; newAdminCaller()<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>        .action(<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>          (controller, stub) -&gt; this.&lt;RollWALWriterRequest, RollWALWriterResponse, Void&gt; adminCall(<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>            controller, stub, RequestConverter.buildRollWALWriterRequest(),<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>            (s, c, req, done) -&gt; s.rollWALWriter(controller, req, done), resp -&gt; null))<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>        .serverName(serverName).call();<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>  }<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span><a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>  @Override<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  public CompletableFuture&lt;Void&gt; clearCompactionQueues(ServerName serverName, Set&lt;String&gt; queues) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return this<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        .&lt;Void&gt; newAdminCaller()<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>        .action(<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>          (controller, stub) -&gt; this<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>              .&lt;ClearCompactionQueuesRequest, ClearCompactionQueuesResponse, Void&gt; adminCall(<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>                controller, stub, RequestConverter.buildClearCompactionQueuesRequest(queues), (s,<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>                    c, req, done) -&gt; s.clearCompactionQueues(controller, req, done), resp -&gt; null))<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>        .serverName(serverName).call();<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span><a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  @Override<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>  public CompletableFuture&lt;List&lt;SecurityCapability&gt;&gt; getSecurityCapabilities() {<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    return this<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>        .&lt;List&lt;SecurityCapability&gt;&gt; newMasterCaller()<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>        .action(<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>          (controller, stub) -&gt; this<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>              .&lt;SecurityCapabilitiesRequest, SecurityCapabilitiesResponse, List&lt;SecurityCapability&gt;&gt; call(<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>                controller, stub, SecurityCapabilitiesRequest.newBuilder().build(), (s, c, req,<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>                    done) -&gt; s.getSecurityCapabilities(c, req, done), (resp) -&gt; ProtobufUtil<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>                    .toSecurityCapabilityList(resp.getCapabilitiesList()))).call();<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>  }<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span><a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>  @Override<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  public CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(ServerName serverName) {<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    return getRegionMetrics(GetRegionLoadRequest.newBuilder().build(), serverName);<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  }<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span><a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>  @Override<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>  public CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(ServerName serverName,<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      TableName tableName) {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>    Preconditions.checkNotNull(tableName,<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      "tableName is null. If you don't specify a tableName, use getRegionLoads() instead");<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>    return getRegionMetrics(RequestConverter.buildGetRegionLoadRequest(tableName), serverName);<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>  }<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span><a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  private CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(GetRegionLoadRequest request,<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>      ServerName serverName) {<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>    return this.&lt;List&lt;RegionMetrics&gt;&gt; newAdminCaller()<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>        .action((controller, stub) -&gt; this<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>            .&lt;GetRegionLoadRequest, GetRegionLoadResponse, List&lt;RegionMetrics&gt;&gt;<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>              adminCall(controller, stub, request, (s, c, req, done) -&gt;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>                s.getRegionLoad(controller, req, done), RegionMetricsBuilder::toRegionMetrics))<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>        .serverName(serverName).call();<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>  }<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span><a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>  @Override<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>  public CompletableFuture&lt;Boolean&gt; isMasterInMaintenanceMode() {<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>    return this<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>        .action(<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>          (controller, stub) -&gt; this<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>              .&lt;IsInMaintenanceModeRequest, IsInMaintenanceModeResponse, Boolean&gt; call(controller,<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>                stub, IsInMaintenanceModeRequest.newBuilder().build(),<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>                (s, c, req, done) -&gt; s.isMasterInMaintenanceMode(c, req, done),<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>                resp -&gt; resp.getInMaintenanceMode())).call();<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>  }<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span><a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>  @Override<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>  public CompletableFuture&lt;CompactionState&gt; getCompactionState(TableName tableName,<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>      CompactType compactType) {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    CompletableFuture&lt;CompactionState&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span><a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    switch (compactType) {<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>      case MOB:<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>        addListener(connection.registry.getMasterAddress(), (serverName, err) -&gt; {<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>          if (err != null) {<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>            future.completeExceptionally(err);<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>            return;<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>          }<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>          RegionInfo regionInfo = RegionInfo.createMobRegionInfo(tableName);<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span><a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>          addListener(this.&lt;GetRegionInfoResponse&gt; newAdminCaller().serverName(serverName)<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>            .action((controller, stub) -&gt; this<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>              .&lt;GetRegionInfoRequest, GetRegionInfoResponse, GetRegionInfoResponse&gt; adminCall(<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>                controller, stub,<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>                RequestConverter.buildGetRegionInfoRequest(regionInfo.getRegionName(), true),<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>                (s, c, req, done) -&gt; s.getRegionInfo(controller, req, done), resp -&gt; resp))<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>            .call(), (resp2, err2) -&gt; {<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>              if (err2 != null) {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>                future.completeExceptionally(err2);<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>              } else {<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>                if (resp2.hasCompactionState()) {<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>                  future.complete(ProtobufUtil.createCompactionState(resp2.getCompactionState()));<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>                } else {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>                  future.complete(CompactionState.NONE);<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>                }<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>              }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>            });<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>        });<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>        break;<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>      case NORMAL:<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>        addListener(getTableHRegionLocations(tableName), (locations, err) -&gt; {<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>          if (err != null) {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>            future.completeExceptionally(err);<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>            return;<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>          }<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>          List&lt;CompactionState&gt; regionStates = new ArrayList&lt;&gt;();<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>          List&lt;CompletableFuture&lt;CompactionState&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>          locations.stream().filter(loc -&gt; loc.getServerName() != null)<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>            .filter(loc -&gt; loc.getRegion() != null).filter(loc -&gt; !loc.getRegion().isOffline())<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>            .map(loc -&gt; loc.getRegion().getRegionName()).forEach(region -&gt; {<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>              futures.add(getCompactionStateForRegion(region).whenComplete((regionState, err2) -&gt; {<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>                // If any region compaction state is MAJOR_AND_MINOR<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>                // the table compaction state is MAJOR_AND_MINOR, too.<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>                if (err2 != null) {<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>                  future.completeExceptionally(unwrapCompletionException(err2));<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>                } else if (regionState == CompactionState.MAJOR_AND_MINOR) {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>                  future.complete(regionState);<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>                } else {<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>                  regionStates.add(regionState);<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>                }<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>              }));<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>            });<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>          addListener(<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>            CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>            (ret, err3) -&gt; {<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>              // If future not completed, check all regions's compaction state<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>              if (!future.isCompletedExceptionally() &amp;&amp; !future.isDone()) {<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>                CompactionState state = CompactionState.NONE;<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>                for (CompactionState regionState : regionStates) {<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>                  switch (regionState) {<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>                    case MAJOR:<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>                      if (state == CompactionState.MINOR) {<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>                        future.complete(CompactionState.MAJOR_AND_MINOR);<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>                      } else {<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>                        state = CompactionState.MAJOR;<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>                      }<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>                      break;<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>                    case MINOR:<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>                      if (state == CompactionState.MAJOR) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>                        future.complete(CompactionState.MAJOR_AND_MINOR);<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>                      } else {<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>                        state = CompactionState.MINOR;<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>                      }<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>                      break;<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>                    case NONE:<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>                    default:<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>                  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>                  if (!future.isDone()) {<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>                    future.complete(state);<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>                  }<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>                }<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>              }<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>            });<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>        });<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>        break;<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>      default:<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>        throw new IllegalArgumentException("Unknown compactType: " + compactType);<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    }<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span><a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>    return future;<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  }<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span><a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>  @Override<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>  public CompletableFuture&lt;CompactionState&gt; getCompactionStateForRegion(byte[] regionName) {<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>    CompletableFuture&lt;CompactionState&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>      if (err != null) {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>        future.completeExceptionally(err);<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>        return;<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>      }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>      ServerName serverName = location.getServerName();<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>      if (serverName == null) {<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>        future<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>        return;<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>      }<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>      addListener(<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>        this.&lt;GetRegionInfoResponse&gt; newAdminCaller()<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>          .action((controller, stub) -&gt; this<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>            .&lt;GetRegionInfoRequest, GetRegionInfoResponse, GetRegionInfoResponse&gt; adminCall(<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>              controller, stub,<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>              RequestConverter.buildGetRegionInfoRequest(location.getRegion().getRegionName(),<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>                true),<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>              (s, c, req, done) -&gt; s.getRegionInfo(controller, req, done), resp -&gt; resp))<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>          .serverName(serverName).call(),<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>        (resp2, err2) -&gt; {<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>          if (err2 != null) {<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>            future.completeExceptionally(err2);<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>          } else {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>            if (resp2.hasCompactionState()) {<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>              future.complete(ProtobufUtil.createCompactionState(resp2.getCompactionState()));<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>            } else {<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>              future.complete(CompactionState.NONE);<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>            }<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>          }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>        });<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>    });<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>    return future;<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>  }<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span><a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>  @Override<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  public CompletableFuture&lt;Optional&lt;Long&gt;&gt; getLastMajorCompactionTimestamp(TableName tableName) {<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>    MajorCompactionTimestampRequest request =<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>        MajorCompactionTimestampRequest.newBuilder()<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>            .setTableName(ProtobufUtil.toProtoTableName(tableName)).build();<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>    return this<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>        .&lt;Optional&lt;Long&gt;&gt; newMasterCaller()<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>        .action(<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>          (controller, stub) -&gt; this<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>              .&lt;MajorCompactionTimestampRequest, MajorCompactionTimestampResponse, Optional&lt;Long&gt;&gt; call(<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>                controller, stub, request,<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>                (s, c, req, done) -&gt; s.getLastMajorCompactionTimestamp(c, req, done),<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>                ProtobufUtil::toOptionalTimestamp)).call();<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span><a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  @Override<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>  public CompletableFuture&lt;Optional&lt;Long&gt;&gt; getLastMajorCompactionTimestampForRegion(<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>      byte[] regionName) {<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>    CompletableFuture&lt;Optional&lt;Long&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>    // regionName may be a full region name or encoded region name, so getRegionInfo(byte[]) first<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>    addListener(getRegionInfo(regionName), (region, err) -&gt; {<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>      if (err != null) {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>        future.completeExceptionally(err);<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        return;<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>      }<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>      MajorCompactionTimestampForRegionRequest.Builder builder =<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>        MajorCompactionTimestampForRegionRequest.newBuilder();<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>      builder.setRegion(<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>        RequestConverter.buildRegionSpecifier(RegionSpecifierType.REGION_NAME, regionName));<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>      addListener(this.&lt;Optional&lt;Long&gt;&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>        .&lt;MajorCompactionTimestampForRegionRequest,<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>        MajorCompactionTimestampResponse, Optional&lt;Long&gt;&gt; call(<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>          controller, stub, builder.build(),<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>          (s, c, req, done) -&gt; s.getLastMajorCompactionTimestampForRegion(c, req, done),<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>          ProtobufUtil::toOptionalTimestamp))<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>        .call(), (timestamp, err2) -&gt; {<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>          if (err2 != null) {<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>            future.completeExceptionally(err2);<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>          } else {<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>            future.complete(timestamp);<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>          }<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>        });<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>    });<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>    return future;<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>  }<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span><a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>  @Override<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>  public CompletableFuture&lt;Map&lt;ServerName, Boolean&gt;&gt; compactionSwitch(boolean switchState,<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      List&lt;String&gt; serverNamesList) {<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    CompletableFuture&lt;Map&lt;ServerName, Boolean&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>    addListener(getRegionServerList(serverNamesList), (serverNames, err) -&gt; {<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>      if (err != null) {<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>        future.completeExceptionally(err);<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>        return;<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>      }<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>      // Accessed by multiple threads.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>      Map&lt;ServerName, Boolean&gt; serverStates = new ConcurrentHashMap&lt;&gt;(serverNames.size());<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>      List&lt;CompletableFuture&lt;Boolean&gt;&gt; futures = new ArrayList&lt;&gt;(serverNames.size());<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>      serverNames.stream().forEach(serverName -&gt; {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>        futures.add(switchCompact(serverName, switchState).whenComplete((serverState, err2) -&gt; {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>          if (err2 != null) {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>            future.completeExceptionally(unwrapCompletionException(err2));<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>          } else {<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>            serverStates.put(serverName, serverState);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>          }<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>        }));<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>      });<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>      addListener(<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>        CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>        (ret, err3) -&gt; {<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>          if (!future.isCompletedExceptionally()) {<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>            if (err3 != null) {<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>              future.completeExceptionally(err3);<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>            } else {<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>              future.complete(serverStates);<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>            }<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>          }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>        });<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>    });<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>    return future;<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>  }<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span><a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>  private CompletableFuture&lt;List&lt;ServerName&gt;&gt; getRegionServerList(List&lt;String&gt; serverNamesList) {<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>    CompletableFuture&lt;List&lt;ServerName&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>    if (serverNamesList.isEmpty()) {<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>      CompletableFuture&lt;ClusterMetrics&gt; clusterMetricsCompletableFuture =<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>        getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS));<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>      addListener(clusterMetricsCompletableFuture, (clusterMetrics, err) -&gt; {<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>        if (err != null) {<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>          future.completeExceptionally(err);<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>        } else {<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>          future.complete(new ArrayList&lt;&gt;(clusterMetrics.getLiveServerMetrics().keySet()));<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>        }<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>      });<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      return future;<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>    } else {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      List&lt;ServerName&gt; serverList = new ArrayList&lt;&gt;();<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>      for (String regionServerName : serverNamesList) {<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        ServerName serverName = null;<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>        try {<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>          serverName = ServerName.valueOf(regionServerName);<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>        } catch (Exception e) {<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>          future.completeExceptionally(<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>            new IllegalArgumentException(String.format("ServerName format: %s", regionServerName)));<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>        }<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>        if (serverName == null) {<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>          future.completeExceptionally(<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>            new IllegalArgumentException(String.format("Null ServerName: %s", regionServerName)));<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>        }<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>      }<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>      future.complete(serverList);<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>    }<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>    return future;<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span><a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>  private CompletableFuture&lt;Boolean&gt; switchCompact(ServerName serverName, boolean onOrOff) {<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>    return this<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>        .&lt;Boolean&gt;newAdminCaller()<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>        .serverName(serverName)<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>        .action((controller, stub) -&gt; this.&lt;CompactionSwitchRequest, CompactionSwitchResponse,<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>            Boolean&gt;adminCall(controller, stub,<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>            CompactionSwitchRequest.newBuilder().setEnabled(onOrOff).build(), (s, c, req, done) -&gt;<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>            s.compactionSwitch(c, req, done), resp -&gt; resp.getPrevState())).call();<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>  }<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span><a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>  @Override<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>  public CompletableFuture&lt;Boolean&gt; balancerSwitch(boolean on, boolean drainRITs) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>      .action((controller, stub) -&gt; this<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>        .&lt;SetBalancerRunningRequest, SetBalancerRunningResponse, Boolean&gt; call(controller, stub,<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>          RequestConverter.buildSetBalancerRunningRequest(on, drainRITs),<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>          (s, c, req, done) -&gt; s.setBalancerRunning(c, req, done),<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>          (resp) -&gt; resp.getPrevBalanceValue()))<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      .call();<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>  }<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span><a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>  @Override<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>  public CompletableFuture&lt;Boolean&gt; balance(boolean forcible) {<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    return this<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>        .action(<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>          (controller, stub) -&gt; this.&lt;BalanceRequest, BalanceResponse, Boolean&gt; call(controller,<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>            stub, RequestConverter.buildBalanceRequest(forcible),<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>            (s, c, req, done) -&gt; s.balance(c, req, done), (resp) -&gt; resp.getBalancerRan())).call();<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>  }<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span><a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>  @Override<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>  public CompletableFuture&lt;Boolean&gt; isBalancerEnabled() {<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>    return this<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>        .action(<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>          (controller, stub) -&gt; this.&lt;IsBalancerEnabledRequest, IsBalancerEnabledResponse, Boolean&gt; call(<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>            controller, stub, RequestConverter.buildIsBalancerEnabledRequest(),<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>            (s, c, req, done) -&gt; s.isBalancerEnabled(c, req, done), (resp) -&gt; resp.getEnabled()))<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>        .call();<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>  }<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span><a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>  @Override<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>  public CompletableFuture&lt;Boolean&gt; normalizerSwitch(boolean on) {<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>    return this<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>        .action(<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>          (controller, stub) -&gt; this<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>              .&lt;SetNormalizerRunningRequest, SetNormalizerRunningResponse, Boolean&gt; call(<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>                controller, stub, RequestConverter.buildSetNormalizerRunningRequest(on), (s, c,<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>                    req, done) -&gt; s.setNormalizerRunning(c, req, done), (resp) -&gt; resp<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>                    .getPrevNormalizerValue())).call();<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>  }<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span><a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>  @Override<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>  public CompletableFuture&lt;Boolean&gt; isNormalizerEnabled() {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>    return this<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>        .action(<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>          (controller, stub) -&gt; this<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>              .&lt;IsNormalizerEnabledRequest, IsNormalizerEnabledResponse, Boolean&gt; call(controller,<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>                stub, RequestConverter.buildIsNormalizerEnabledRequest(),<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>                (s, c, req, done) -&gt; s.isNormalizerEnabled(c, req, done),<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>                (resp) -&gt; resp.getEnabled())).call();<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>  }<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span><a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>  @Override<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>  public CompletableFuture&lt;Boolean&gt; normalize() {<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>    return this<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>        .action(<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>          (controller, stub) -&gt; this.&lt;NormalizeRequest, NormalizeResponse, Boolean&gt; call(<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>            controller, stub, RequestConverter.buildNormalizeRequest(),<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>            (s, c, req, done) -&gt; s.normalize(c, req, done), (resp) -&gt; resp.getNormalizerRan()))<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>        .call();<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>  }<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span><a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>  @Override<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  public CompletableFuture&lt;Boolean&gt; cleanerChoreSwitch(boolean enabled) {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>    return this<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>        .action(<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>          (controller, stub) -&gt; this<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>              .&lt;SetCleanerChoreRunningRequest, SetCleanerChoreRunningResponse, Boolean&gt; call(<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>                controller, stub, RequestConverter.buildSetCleanerChoreRunningRequest(enabled), (s,<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>                    c, req, done) -&gt; s.setCleanerChoreRunning(c, req, done), (resp) -&gt; resp<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>                    .getPrevValue())).call();<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  @Override<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>  public CompletableFuture&lt;Boolean&gt; isCleanerChoreEnabled() {<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>    return this<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>        .action(<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>          (controller, stub) -&gt; this<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>              .&lt;IsCleanerChoreEnabledRequest, IsCleanerChoreEnabledResponse, Boolean&gt; call(<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>                controller, stub, RequestConverter.buildIsCleanerChoreEnabledRequest(), (s, c, req,<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>                    done) -&gt; s.isCleanerChoreEnabled(c, req, done), (resp) -&gt; resp.getValue()))<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>        .call();<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>  }<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span><a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>  @Override<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>  public CompletableFuture&lt;Boolean&gt; runCleanerChore() {<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>    return this<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>        .action(<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>          (controller, stub) -&gt; this<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>              .&lt;RunCleanerChoreRequest, RunCleanerChoreResponse, Boolean&gt; call(controller, stub,<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>                RequestConverter.buildRunCleanerChoreRequest(),<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>                (s, c, req, done) -&gt; s.runCleanerChore(c, req, done),<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>                (resp) -&gt; resp.getCleanerChoreRan())).call();<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>  }<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span><a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>  @Override<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>  public CompletableFuture&lt;Boolean&gt; catalogJanitorSwitch(boolean enabled) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>    return this<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>        .action(<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>          (controller, stub) -&gt; this<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>              .&lt;EnableCatalogJanitorRequest, EnableCatalogJanitorResponse, Boolean&gt; call(<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>                controller, stub, RequestConverter.buildEnableCatalogJanitorRequest(enabled), (s,<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>                    c, req, done) -&gt; s.enableCatalogJanitor(c, req, done), (resp) -&gt; resp<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>                    .getPrevValue())).call();<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>  }<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span><a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>  @Override<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>  public CompletableFuture&lt;Boolean&gt; isCatalogJanitorEnabled() {<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>    return this<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>        .action(<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>          (controller, stub) -&gt; this<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>              .&lt;IsCatalogJanitorEnabledRequest, IsCatalogJanitorEnabledResponse, Boolean&gt; call(<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>                controller, stub, RequestConverter.buildIsCatalogJanitorEnabledRequest(), (s, c,<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>                    req, done) -&gt; s.isCatalogJanitorEnabled(c, req, done), (resp) -&gt; resp<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>                    .getValue())).call();<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>  }<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span><a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>  @Override<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>  public CompletableFuture&lt;Integer&gt; runCatalogJanitor() {<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>    return this<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>        .&lt;Integer&gt; newMasterCaller()<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>        .action(<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>          (controller, stub) -&gt; this.&lt;RunCatalogScanRequest, RunCatalogScanResponse, Integer&gt; call(<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>            controller, stub, RequestConverter.buildCatalogScanRequest(),<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>            (s, c, req, done) -&gt; s.runCatalogScan(c, req, done), (resp) -&gt; resp.getScanResult()))<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>        .call();<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>  }<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span><a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>  @Override<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>  public &lt;S, R&gt; CompletableFuture&lt;R&gt; coprocessorService(Function&lt;RpcChannel, S&gt; stubMaker,<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      ServiceCaller&lt;S, R&gt; callable) {<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>    MasterCoprocessorRpcChannelImpl channel =<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>        new MasterCoprocessorRpcChannelImpl(this.&lt;Message&gt; newMasterCaller());<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>    S stub = stubMaker.apply(channel);<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>    CompletableFuture&lt;R&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>    ClientCoprocessorRpcController controller = new ClientCoprocessorRpcController();<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>    callable.call(stub, controller, resp -&gt; {<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>      if (controller.failed()) {<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>        future.completeExceptionally(controller.getFailed());<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>      } else {<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>        future.complete(resp);<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>      }<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>    });<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>    return future;<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>  }<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span><a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>  @Override<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>  public &lt;S, R&gt; CompletableFuture&lt;R&gt; coprocessorService(Function&lt;RpcChannel, S&gt; stubMaker,<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>      ServiceCaller&lt;S, R&gt; callable, ServerName serverName) {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    RegionServerCoprocessorRpcChannelImpl channel =<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>        new RegionServerCoprocessorRpcChannelImpl(this.&lt;Message&gt; newServerCaller().serverName(<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>          serverName));<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>    S stub = stubMaker.apply(channel);<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>    CompletableFuture&lt;R&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>    ClientCoprocessorRpcController controller = new ClientCoprocessorRpcController();<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>    callable.call(stub, controller, resp -&gt; {<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>      if (controller.failed()) {<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>        future.completeExceptionally(controller.getFailed());<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>      } else {<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>        future.complete(resp);<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>      }<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>    });<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>    return future;<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>  }<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span><a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>  @Override<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>  public CompletableFuture&lt;List&lt;ServerName&gt;&gt; clearDeadServers(List&lt;ServerName&gt; servers) {<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>    return this.&lt;List&lt;ServerName&gt;&gt; newMasterCaller()<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>      .action((controller, stub) -&gt; this<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>        .&lt;ClearDeadServersRequest, ClearDeadServersResponse, List&lt;ServerName&gt;&gt; call(<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>          controller, stub, RequestConverter.buildClearDeadServersRequest(servers),<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>          (s, c, req, done) -&gt; s.clearDeadServers(c, req, done),<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>          (resp) -&gt; ProtobufUtil.toServerNameList(resp.getServerNameList())))<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>      .call();<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>  }<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span><a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>  private &lt;T&gt; ServerRequestCallerBuilder&lt;T&gt; newServerCaller() {<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>    return this.connection.callerFactory.&lt;T&gt; serverRequest()<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>        .rpcTimeout(rpcTimeoutNs, TimeUnit.NANOSECONDS)<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>        .operationTimeout(operationTimeoutNs, TimeUnit.NANOSECONDS)<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>        .pause(pauseNs, TimeUnit.NANOSECONDS).maxAttempts(maxAttempts)<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>        .startLogErrorsCnt(startLogErrorsCnt);<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>  }<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span><a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>  @Override<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>  public CompletableFuture&lt;Void&gt; enableTableReplication(TableName tableName) {<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>    if (tableName == null) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>      return failedFuture(new IllegalArgumentException("Table name is null"));<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>    }<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>    addListener(tableExists(tableName), (exist, err) -&gt; {<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>      if (err != null) {<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>        future.completeExceptionally(err);<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>        return;<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>      }<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>      if (!exist) {<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>        future.completeExceptionally(new TableNotFoundException(<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>          "Table '" + tableName.getNameAsString() + "' does not exists."));<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>        return;<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>      }<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>      addListener(getTableSplits(tableName), (splits, err1) -&gt; {<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span>        if (err1 != null) {<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>          future.completeExceptionally(err1);<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>        } else {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>          addListener(checkAndSyncTableToPeerClusters(tableName, splits), (result, err2) -&gt; {<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>            if (err2 != null) {<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>              future.completeExceptionally(err2);<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>            } else {<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>              addListener(setTableReplication(tableName, true), (result3, err3) -&gt; {<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>                if (err3 != null) {<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>                  future.completeExceptionally(err3);<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>                } else {<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>                  future.complete(result3);<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>                }<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>              });<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>            }<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>          });<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>        }<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>      });<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>    });<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>    return future;<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>  }<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span><a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>  @Override<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>  public CompletableFuture&lt;Void&gt; disableTableReplication(TableName tableName) {<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    if (tableName == null) {<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>      return failedFuture(new IllegalArgumentException("Table name is null"));<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span>    }<a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>    addListener(tableExists(tableName), (exist, err) -&gt; {<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>      if (err != null) {<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>        future.completeExceptionally(err);<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>        return;<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>      }<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>      if (!exist) {<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>        future.completeExceptionally(new TableNotFoundException(<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>          "Table '" + tableName.getNameAsString() + "' does not exists."));<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>        return;<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>      }<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      addListener(setTableReplication(tableName, false), (result, err2) -&gt; {<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>        if (err2 != null) {<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>          future.completeExceptionally(err2);<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>        } else {<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>          future.complete(result);<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>        }<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>      });<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>    });<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    return future;<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>  }<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span><a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>  private CompletableFuture&lt;byte[][]&gt; getTableSplits(TableName tableName) {<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>    CompletableFuture&lt;byte[][]&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>    addListener(getRegions(tableName), (regions, err2) -&gt; {<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span>      if (err2 != null) {<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>        future.completeExceptionally(err2);<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>        return;<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>      }<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>      if (regions.size() == 1) {<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>        future.complete(null);<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>      } else {<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>        byte[][] splits = new byte[regions.size() - 1][];<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>        for (int i = 1; i &lt; regions.size(); i++) {<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>          splits[i - 1] = regions.get(i).getStartKey();<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>        }<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>        future.complete(splits);<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>      }<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>    });<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>    return future;<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>  }<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span><a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>  /**<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>   * Connect to peer and check the table descriptor on peer:<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>   * &lt;ol&gt;<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>   * &lt;li&gt;Create the same table on peer when not exist.&lt;/li&gt;<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>   * &lt;li&gt;Throw an exception if the table already has replication enabled on any of the column<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>   * families.&lt;/li&gt;<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>   * &lt;li&gt;Throw an exception if the table exists on peer cluster but descriptors are not same.&lt;/li&gt;<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>   * &lt;/ol&gt;<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>   * @param tableName name of the table to sync to the peer<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>   * @param splits table split keys<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>   */<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>  private CompletableFuture&lt;Void&gt; checkAndSyncTableToPeerClusters(TableName tableName,<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>      byte[][] splits) {<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>    addListener(listReplicationPeers(), (peers, err) -&gt; {<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>      if (err != null) {<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>        future.completeExceptionally(err);<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>        return;<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>      }<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>      if (peers == null || peers.size() &lt;= 0) {<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>        future.completeExceptionally(<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>          new IllegalArgumentException("Found no peer cluster for replication."));<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>        return;<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>      }<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>      peers.stream().filter(peer -&gt; peer.getPeerConfig().needToReplicate(tableName))<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>        .forEach(peer -&gt; {<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>          futures.add(trySyncTableToPeerCluster(tableName, splits, peer));<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>        });<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>      addListener(<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>        CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>        (result, err2) -&gt; {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>          if (err2 != null) {<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>            future.completeExceptionally(err2);<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>          } else {<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>            future.complete(result);<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>          }<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        });<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>    });<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>    return future;<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span><a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>  private CompletableFuture&lt;Void&gt; trySyncTableToPeerCluster(TableName tableName, byte[][] splits,<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>      ReplicationPeerDescription peer) {<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    Configuration peerConf = null;<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>    try {<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>      peerConf =<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>        ReplicationPeerConfigUtil.getPeerClusterConfiguration(connection.getConfiguration(), peer);<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>    } catch (IOException e) {<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>      return failedFuture(e);<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>    }<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>    addListener(ConnectionFactory.createAsyncConnection(peerConf), (conn, err) -&gt; {<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>      if (err != null) {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>        future.completeExceptionally(err);<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>        return;<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>      }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>      addListener(getDescriptor(tableName), (tableDesc, err1) -&gt; {<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>        if (err1 != null) {<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>          future.completeExceptionally(err1);<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>          return;<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>        }<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>        AsyncAdmin peerAdmin = conn.getAdmin();<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>        addListener(peerAdmin.tableExists(tableName), (exist, err2) -&gt; {<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>          if (err2 != null) {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>            future.completeExceptionally(err2);<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>            return;<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>          }<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>          if (!exist) {<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>            CompletableFuture&lt;Void&gt; createTableFuture = null;<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>            if (splits == null) {<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>              createTableFuture = peerAdmin.createTable(tableDesc);<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>            } else {<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>              createTableFuture = peerAdmin.createTable(tableDesc, splits);<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>            }<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>            addListener(createTableFuture, (result, err3) -&gt; {<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>              if (err3 != null) {<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>                future.completeExceptionally(err3);<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>              } else {<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>                future.complete(result);<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>              }<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>            });<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>          } else {<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>            addListener(compareTableWithPeerCluster(tableName, tableDesc, peer, peerAdmin),<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>              (result, err4) -&gt; {<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>                if (err4 != null) {<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>                  future.completeExceptionally(err4);<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>                } else {<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>                  future.complete(result);<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>                }<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>              });<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>          }<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>        });<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>      });<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>    });<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>    return future;<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>  }<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span><a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>  private CompletableFuture&lt;Void&gt; compareTableWithPeerCluster(TableName tableName,<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>      TableDescriptor tableDesc, ReplicationPeerDescription peer, AsyncAdmin peerAdmin) {<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>    addListener(peerAdmin.getDescriptor(tableName), (peerTableDesc, err) -&gt; {<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>      if (err != null) {<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>        future.completeExceptionally(err);<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>        return;<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>      }<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>      if (peerTableDesc == null) {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>        future.completeExceptionally(<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>          new IllegalArgumentException("Failed to get table descriptor for table " +<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>            tableName.getNameAsString() + " from peer cluster " + peer.getPeerId()));<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>        return;<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>      }<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      if (TableDescriptor.COMPARATOR_IGNORE_REPLICATION.compare(peerTableDesc, tableDesc) != 0) {<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>        future.completeExceptionally(new IllegalArgumentException(<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>          "Table " + tableName.getNameAsString() + " exists in peer cluster " + peer.getPeerId() +<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>            ", but the table descriptors are not same when compared with source cluster." +<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>            " Thus can not enable the table's replication switch."));<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>        return;<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>      }<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>      future.complete(null);<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>    });<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>    return future;<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>  }<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span><a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>  /**<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>   * Set the table's replication switch if the table's replication switch is already not set.<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>   * @param tableName name of the table<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>   * @param enableRep is replication switch enable or disable<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>   */<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>  private CompletableFuture&lt;Void&gt; setTableReplication(TableName tableName, boolean enableRep) {<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>    addListener(getDescriptor(tableName), (tableDesc, err) -&gt; {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>      if (err != null) {<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>        future.completeExceptionally(err);<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>        return;<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      }<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      if (!tableDesc.matchReplicationScope(enableRep)) {<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>        int scope =<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>          enableRep ? HConstants.REPLICATION_SCOPE_GLOBAL : HConstants.REPLICATION_SCOPE_LOCAL;<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>        TableDescriptor newTableDesc =<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>          TableDescriptorBuilder.newBuilder(tableDesc).setReplicationScope(scope).build();<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>        addListener(modifyTable(newTableDesc), (result, err2) -&gt; {<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>          if (err2 != null) {<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>            future.completeExceptionally(err2);<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>          } else {<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>            future.complete(result);<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>          }<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>        });<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>      } else {<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>        future.complete(null);<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>      }<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>    });<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>    return future;<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>  }<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span><a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>  @Override<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>  public CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(TableName tableName) {<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>    CompletableFuture&lt;CacheEvictionStats&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>    addListener(getTableHRegionLocations(tableName), (locations, err) -&gt; {<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>      if (err != null) {<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>        future.completeExceptionally(err);<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>        return;<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>      }<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; regionInfoByServerName =<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>        locations.stream().filter(l -&gt; l.getRegion() != null)<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>          .filter(l -&gt; !l.getRegion().isOffline()).filter(l -&gt; l.getServerName() != null)<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>          .collect(Collectors.groupingBy(l -&gt; l.getServerName(),<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>            Collectors.mapping(l -&gt; l.getRegion(), Collectors.toList())));<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>      List&lt;CompletableFuture&lt;CacheEvictionStats&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>      CacheEvictionStatsAggregator aggregator = new CacheEvictionStatsAggregator();<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : regionInfoByServerName.entrySet()) {<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>        futures<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>          .add(clearBlockCache(entry.getKey(), entry.getValue()).whenComplete((stats, err2) -&gt; {<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>            if (err2 != null) {<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>              future.completeExceptionally(unwrapCompletionException(err2));<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>            } else {<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>              aggregator.append(stats);<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>            }<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>          }));<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>      }<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>      addListener(CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])),<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>        (ret, err3) -&gt; {<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>          if (err3 != null) {<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>            future.completeExceptionally(unwrapCompletionException(err3));<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>          } else {<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>            future.complete(aggregator.sum());<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>          }<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>        });<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>    });<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    return future;<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  }<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span><a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  @Override<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>      boolean preserveSplits) {<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>    addListener(tableExists(tableName), (exist, err) -&gt; {<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>      if (err != null) {<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>        future.completeExceptionally(err);<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>        return;<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>      }<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>      if (!exist) {<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3641"></a>
+<span class="sourceLineNo">841</span>      return connection.registry.getMetaRegionLocation()<a name="line.841"></a>
+<span class="sourceLineNo">842</span>        .thenApply(locs -&gt; Stream.of(locs.getRegionLocations()).map(HRegionLocation::getRegion)<a name="line.842"></a>
+<span class="sourceLineNo">843</span>          .collect(Collectors.toList()));<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    } else {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>      return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName))<a name="line.845"></a>
+<span class="sourceLineNo">846</span>        .thenApply(<a name="line.846"></a>
+<span class="sourceLineNo">847</span>          locs -&gt; locs.stream().map(HRegionLocation::getRegion).collect(Collectors.toList()));<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
+<span class="sourceLineNo">849</span>  }<a name="line.849"></a>
+<span class="sourceLineNo">850</span><a name="line.850"></a>
+<span class="sourceLineNo">851</span>  @Override<a name="line.851"></a>
+<span class="sourceLineNo">852</span>  public CompletableFuture&lt;Void&gt; flush(TableName tableName) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.853"></a>
+<span class="sourceLineNo">854</span>    addListener(tableExists(tableName), (exists, err) -&gt; {<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      if (err != null) {<a name="line.855"></a>
+<span class="sourceLineNo">856</span>        future.completeExceptionally(err);<a name="line.856"></a>
+<span class="sourceLineNo">857</span>      } else if (!exists) {<a name="line.857"></a>
+<span class="sourceLineNo">858</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.858"></a>
+<span class="sourceLineNo">859</span>      } else {<a name="line.859"></a>
+<span class="sourceLineNo">860</span>        addListener(isTableEnabled(tableName), (tableEnabled, err2) -&gt; {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          if (err2 != null) {<a name="line.861"></a>
+<span class="sourceLineNo">862</span>            future.completeExceptionally(err2);<a name="line.862"></a>
+<span class="sourceLineNo">863</span>          } else if (!tableEnabled) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>            future.completeExceptionally(new TableNotEnabledException(tableName));<a name="line.864"></a>
+<span class="sourceLineNo">865</span>          } else {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>            addListener(execProcedure(FLUSH_TABLE_PROCEDURE_SIGNATURE, tableName.getNameAsString(),<a name="line.866"></a>
+<span class="sourceLineNo">867</span>              new HashMap&lt;&gt;()), (ret, err3) -&gt; {<a name="line.867"></a>
+<span class="sourceLineNo">868</span>                if (err3 != null) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>                  future.completeExceptionally(err3);<a name="line.869"></a>
+<span class="sourceLineNo">870</span>                } else {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>                  future.complete(ret);<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>      }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>    });<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    return future;<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>  @Override<a name="line.881"></a>
+<span class="sourceLineNo">882</span>  public CompletableFuture&lt;Void&gt; flushRegion(byte[] regionName) {<a name="line.882"></a>
+<span class="sourceLineNo">883</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.884"></a>
+<span class="sourceLineNo">885</span>      if (err != null) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>        future.completeExceptionally(err);<a name="line.886"></a>
+<span class="sourceLineNo">887</span>        return;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      }<a name="line.888"></a>
+<span class="sourceLineNo">889</span>      ServerName serverName = location.getServerName();<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      if (serverName == null) {<a name="line.890"></a>
+<span class="sourceLineNo">891</span>        future<a name="line.891"></a>
+<span class="sourceLineNo">892</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.892"></a>
+<span class="sourceLineNo">893</span>        return;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>      }<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      addListener(flush(serverName, location.getRegion()), (ret, err2) -&gt; {<a name="line.895"></a>
+<span class="sourceLineNo">896</span>        if (err2 != null) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>          future.completeExceptionally(err2);<a name="line.897"></a>
+<span class="sourceLineNo">898</span>        } else {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>          future.complete(ret);<a name="line.899"></a>
+<span class="sourceLineNo">900</span>        }<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>    return future;<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 CompletableFuture&lt;Void&gt; flush(final ServerName serverName, final RegionInfo regionInfo) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    return this.&lt;Void&gt; newAdminCaller()<a name="line.907"></a>
+<span class="sourceLineNo">908</span>            .serverName(serverName)<a name="line.908"></a>
+<span class="sourceLineNo">909</span>            .action(<a name="line.909"></a>
+<span class="sourceLineNo">910</span>              (controller, stub) -&gt; this.&lt;FlushRegionRequest, FlushRegionResponse, Void&gt; adminCall(<a name="line.910"></a>
+<span class="sourceLineNo">911</span>                controller, stub, RequestConverter.buildFlushRegionRequest(regionInfo<a name="line.911"></a>
+<span class="sourceLineNo">912</span>                  .getRegionName()), (s, c, req, done) -&gt; s.flushRegion(c, req, done),<a name="line.912"></a>
+<span class="sourceLineNo">913</span>                resp -&gt; null))<a name="line.913"></a>
+<span class="sourceLineNo">914</span>            .call();<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>  @Override<a name="line.917"></a>
+<span class="sourceLineNo">918</span>  public CompletableFuture&lt;Void&gt; flushRegionServer(ServerName sn) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    addListener(getRegions(sn), (hRegionInfos, err) -&gt; {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>      if (err != null) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>        future.completeExceptionally(err);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>        return;<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; compactFutures = new ArrayList&lt;&gt;();<a name="line.925"></a>
+<span class="sourceLineNo">926</span>      if (hRegionInfos != null) {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>        hRegionInfos.forEach(region -&gt; compactFutures.add(flush(sn, region)));<a name="line.927"></a>
+<span class="sourceLineNo">928</span>      }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      addListener(CompletableFuture.allOf(<a name="line.929"></a>
+<span class="sourceLineNo">930</span>        compactFutures.toArray(new CompletableFuture&lt;?&gt;[compactFutures.size()])), (ret, err2) -&gt; {<a name="line.930"></a>
+<span class="sourceLineNo">931</span>          if (err2 != null) {<a name="line.931"></a>
+<span class="sourceLineNo">932</span>            future.completeExceptionally(err2);<a name="line.932"></a>
+<span class="sourceLineNo">933</span>          } else {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>            future.complete(ret);<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>
+<span class="sourceLineNo">937</span>    });<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    return future;<a name="line.938"></a>
+<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span>  @Override<a name="line.941"></a>
+<span class="sourceLineNo">942</span>  public CompletableFuture&lt;Void&gt; compact(TableName tableName, CompactType compactType) {<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    return compact(tableName, null, false, compactType);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
+<span class="sourceLineNo">945</span><a name="line.945"></a>
+<span class="sourceLineNo">946</span>  @Override<a name="line.946"></a>
+<span class="sourceLineNo">947</span>  public CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily,<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      CompactType compactType) {<a name="line.948"></a>
+<span class="sourceLineNo">949</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null. "<a name="line.949"></a>
+<span class="sourceLineNo">950</span>        + "If you don't specify a columnFamily, use compact(TableName) instead");<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    return compact(tableName, columnFamily, false, compactType);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>  }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span>  @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  public CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    return compactRegion(regionName, null, false);<a name="line.956"></a>
+<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>  @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName, byte[] columnFamily) {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.961"></a>
+<span class="sourceLineNo">962</span>        + " If you don't specify a columnFamily, use compactRegion(regionName) instead");<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    return compactRegion(regionName, columnFamily, false);<a name="line.963"></a>
+<span class="sourceLineNo">964</span>  }<a name="line.964"></a>
+<span class="sourceLineNo">965</span><a name="line.965"></a>
+<span class="sourceLineNo">966</span>  @Override<a name="line.966"></a>
+<span class="sourceLineNo">967</span>  public CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, CompactType compactType) {<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    return compact(tableName, null, true, compactType);<a name="line.968"></a>
+<span class="sourceLineNo">969</span>  }<a name="line.969"></a>
+<span class="sourceLineNo">970</span><a name="line.970"></a>
+<span class="sourceLineNo">971</span>  @Override<a name="line.971"></a>
+<span class="sourceLineNo">972</span>  public CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, byte[] columnFamily,<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      CompactType compactType) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.974"></a>
+<span class="sourceLineNo">975</span>        + "If you don't specify a columnFamily, use compact(TableName) instead");<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    return compact(tableName, columnFamily, true, compactType);<a name="line.976"></a>
+<span class="sourceLineNo">977</span>  }<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>  @Override<a name="line.979"></a>
+<span class="sourceLineNo">980</span>  public CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName) {<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    return compactRegion(regionName, null, true);<a name="line.981"></a>
+<span class="sourceLineNo">982</span>  }<a name="line.982"></a>
+<span class="sourceLineNo">983</span><a name="line.983"></a>
+<span class="sourceLineNo">984</span>  @Override<a name="line.984"></a>
+<span class="sourceLineNo">985</span>  public CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName, byte[] columnFamily) {<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        + " If you don't specify a columnFamily, use majorCompactRegion(regionName) instead");<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    return compactRegion(regionName, columnFamily, true);<a name="line.988"></a>
+<span class="sourceLineNo">989</span>  }<a name="line.989"></a>
+<span class="sourceLineNo">990</span><a name="line.990"></a>
+<span class="sourceLineNo">991</span>  @Override<a name="line.991"></a>
+<span class="sourceLineNo">992</span>  public CompletableFuture&lt;Void&gt; compactRegionServer(ServerName sn) {<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    return compactRegionServer(sn, false);<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  }<a name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span>  @Override<a name="line.996"></a>
+<span class="sourceLineNo">997</span>  public CompletableFuture&lt;Void&gt; majorCompactRegionServer(ServerName sn) {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>    return compactRegionServer(sn, true);<a name="line.998"></a>
+<span class="sourceLineNo">999</span>  }<a name="line.999"></a>
+<span class="sourceLineNo">1000</span><a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>  private CompletableFuture&lt;Void&gt; compactRegionServer(ServerName sn, boolean major) {<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    addListener(getRegions(sn), (hRegionInfos, err) -&gt; {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      if (err != null) {<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        future.completeExceptionally(err);<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        return;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>      }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; compactFutures = new ArrayList&lt;&gt;();<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      if (hRegionInfos != null) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        hRegionInfos.forEach(region -&gt; compactFutures.add(compact(sn, region, major, null)));<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      }<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      addListener(CompletableFuture.allOf(<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>        compactFutures.toArray(new CompletableFuture&lt;?&gt;[compactFutures.size()])), (ret, err2) -&gt; {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>          if (err2 != null) {<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>            future.completeExceptionally(err2);<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>          } else {<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>            future.complete(ret);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>          }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>        });<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>    });<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>    return future;<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>  }<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span><a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>  private CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName, byte[] columnFamily,<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>      boolean major) {<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>      if (err != null) {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        future.completeExceptionally(err);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>        return;<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      }<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      ServerName serverName = location.getServerName();<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      if (serverName == null) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        future<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        return;<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      addListener(compact(location.getServerName(), location.getRegion(), major, columnFamily),<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>        (ret, err2) -&gt; {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>          if (err2 != null) {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>            future.completeExceptionally(err2);<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>          } else {<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>            future.complete(ret);<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>        });<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    });<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    return future;<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>  }<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span><a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>  /**<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   * List all region locations for the specific table.<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>   */<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>  private CompletableFuture&lt;List&lt;HRegionLocation&gt;&gt; getTableHRegionLocations(TableName tableName) {<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    if (TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      CompletableFuture&lt;List&lt;HRegionLocation&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>      // For meta table, we use zk to fetch all locations.<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>      AsyncRegistry registry = AsyncRegistryFactory.getRegistry(connection.getConfiguration());<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      addListener(registry.getMetaRegionLocation(), (metaRegions, err) -&gt; {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        if (err != null) {<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>          future.completeExceptionally(err);<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>        } else if (metaRegions == null || metaRegions.isEmpty() ||<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          metaRegions.getDefaultRegionLocation() == null) {<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>          future.completeExceptionally(new IOException("meta region does not found"));<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>        } else {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          future.complete(Collections.singletonList(metaRegions.getDefaultRegionLocation()));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>        // close the registry.<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>        IOUtils.closeQuietly(registry);<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      });<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      return future;<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    } else {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      // For non-meta table, we fetch all locations by scanning hbase:meta table<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName));<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    }<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>  }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span><a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  /**<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>   * Compact column family of a table, Asynchronous operation even if CompletableFuture.get()<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>   */<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>  private CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily, boolean major,<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      CompactType compactType) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span><a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    switch (compactType) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      case MOB:<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>        addListener(connection.registry.getMasterAddress(), (serverName, err) -&gt; {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>          if (err != null) {<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>            future.completeExceptionally(err);<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>            return;<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>          }<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>          RegionInfo regionInfo = RegionInfo.createMobRegionInfo(tableName);<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>          addListener(compact(serverName, regionInfo, major, columnFamily), (ret, err2) -&gt; {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>            if (err2 != null) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>              future.completeExceptionally(err2);<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>            } else {<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>              future.complete(ret);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>            }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>          });<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>        });<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        break;<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      case NORMAL:<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        addListener(getTableHRegionLocations(tableName), (locations, err) -&gt; {<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>          if (err != null) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>            future.completeExceptionally(err);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>            return;<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>          }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>          if (locations == null || locations.isEmpty()) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>            future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>          }<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>          CompletableFuture&lt;?&gt;[] compactFutures =<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>            locations.stream().filter(l -&gt; l.getRegion() != null)<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>              .filter(l -&gt; !l.getRegion().isOffline()).filter(l -&gt; l.getServerName() != null)<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>              .map(l -&gt; compact(l.getServerName(), l.getRegion(), major, columnFamily))<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>              .toArray(CompletableFuture&lt;?&gt;[]::new);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>          // future complete unless all of the compact futures are completed.<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>          addListener(CompletableFuture.allOf(compactFutures), (ret, err2) -&gt; {<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>            if (err2 != null) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>              future.completeExceptionally(err2);<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>            } else {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>              future.complete(ret);<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>            }<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>          });<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>        });<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        break;<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>      default:<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>        throw new IllegalArgumentException("Unknown compactType: " + compactType);<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    }<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    return future;<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  }<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  /**<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>   * Compact the region at specific region server.<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>   */<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>  private CompletableFuture&lt;Void&gt; compact(final ServerName sn, final RegionInfo hri,<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      final boolean major, byte[] columnFamily) {<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    return this<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>        .&lt;Void&gt; newAdminCaller()<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>        .serverName(sn)<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>        .action(<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>          (controller, stub) -&gt; this.&lt;CompactRegionRequest, CompactRegionResponse, Void&gt; adminCall(<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>            controller, stub, RequestConverter.buildCompactRegionRequest(hri.getRegionName(),<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>              major, columnFamily), (s, c, req, done) -&gt; s.compactRegion(c, req, done),<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>            resp -&gt; null)).call();<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>  }<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span><a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>  private byte[] toEncodeRegionName(byte[] regionName) {<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    try {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      return RegionInfo.isEncodedRegionName(regionName) ? regionName<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>          : Bytes.toBytes(RegionInfo.encodeRegionName(regionName));<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    } catch (IOException e) {<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>      return regionName;<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    }<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>  }<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span><a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>  private void checkAndGetTableName(byte[] encodeRegionName, AtomicReference&lt;TableName&gt; tableName,<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      CompletableFuture&lt;TableName&gt; result) {<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    addListener(getRegionLocation(encodeRegionName), (location, err) -&gt; {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      if (err != null) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>        result.completeExceptionally(err);<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>        return;<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      }<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>        result.completeExceptionally(<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>          new IllegalArgumentException("Can't invoke merge on non-default regions directly"));<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>        return;<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>      }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>      if (!tableName.compareAndSet(null, regionInfo.getTable())) {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        if (!tableName.get().equals(regionInfo.getTable())) {<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>          // tables of this two region should be same.<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>          result.completeExceptionally(<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>            new IllegalArgumentException("Cannot merge regions from two different tables " +<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>              tableName.get() + " and " + regionInfo.getTable()));<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>        } else {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>          result.complete(tableName.get());<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>        }<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      }<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    });<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>  }<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span><a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>  private CompletableFuture&lt;TableName&gt; checkRegionsAndGetTableName(byte[][] encodedRegionNames) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    AtomicReference&lt;TableName&gt; tableNameRef = new AtomicReference&lt;&gt;();<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    CompletableFuture&lt;TableName&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>      checkAndGetTableName(encodedRegionName, tableNameRef, future);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    }<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    return future;<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  @Override<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>  public CompletableFuture&lt;Boolean&gt; mergeSwitch(boolean enabled, boolean drainMerges) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>    return setSplitOrMergeOn(enabled, drainMerges, MasterSwitchType.MERGE);<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>  }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  @Override<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>  public CompletableFuture&lt;Boolean&gt; isMergeEnabled() {<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    return isSplitOrMergeOn(MasterSwitchType.MERGE);<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  }<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span><a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @Override<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public CompletableFuture&lt;Boolean&gt; splitSwitch(boolean enabled, boolean drainSplits) {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    return setSplitOrMergeOn(enabled, drainSplits, MasterSwitchType.SPLIT);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  }<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span><a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>  @Override<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  public CompletableFuture&lt;Boolean&gt; isSplitEnabled() {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>    return isSplitOrMergeOn(MasterSwitchType.SPLIT);<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>  }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span><a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  private CompletableFuture&lt;Boolean&gt; setSplitOrMergeOn(boolean enabled, boolean synchronous,<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      MasterSwitchType switchType) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>    SetSplitOrMergeEnabledRequest request =<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>      RequestConverter.buildSetSplitOrMergeEnabledRequest(enabled, synchronous, switchType);<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>      .action((controller, stub) -&gt; this<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        .&lt;SetSplitOrMergeEnabledRequest, SetSplitOrMergeEnabledResponse, Boolean&gt; call(controller,<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>          stub, request, (s, c, req, done) -&gt; s.setSplitOrMergeEnabled(c, req, done),<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>          (resp) -&gt; resp.getPrevValueList().get(0)))<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      .call();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>  }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span><a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  private CompletableFuture&lt;Boolean&gt; isSplitOrMergeOn(MasterSwitchType switchType) {<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>    IsSplitOrMergeEnabledRequest request =<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(switchType);<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    return this<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>        .action(<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>          (controller, stub) -&gt; this<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>              .&lt;IsSplitOrMergeEnabledRequest, IsSplitOrMergeEnabledResponse, Boolean&gt; call(<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>                controller, stub, request,<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>                (s, c, req, done) -&gt; s.isSplitOrMergeEnabled(c, req, done),<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>                (resp) -&gt; resp.getEnabled())).call();<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>  }<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span><a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  @Override<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>  public CompletableFuture&lt;Void&gt; mergeRegions(List&lt;byte[]&gt; nameOfRegionsToMerge, boolean forcible) {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>    if (nameOfRegionsToMerge.size() &lt; 2) {<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>      return failedFuture(new IllegalArgumentException(<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>        "Can not merge only " + nameOfRegionsToMerge.size() + " region"));<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    }<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>    byte[][] encodedNameOfRegionsToMerge =<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      nameOfRegionsToMerge.stream().map(this::toEncodeRegionName).toArray(byte[][]::new);<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span><a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    addListener(checkRegionsAndGetTableName(encodedNameOfRegionsToMerge), (tableName, err) -&gt; {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      if (err != null) {<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        future.completeExceptionally(err);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>        return;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span><a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      MergeTableRegionsRequest request = null;<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>      try {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>        request = RequestConverter.buildMergeTableRegionsRequest(encodedNameOfRegionsToMerge,<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>          forcible, ng.getNonceGroup(), ng.newNonce());<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      } catch (DeserializationException e) {<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>        future.completeExceptionally(e);<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>        return;<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>      }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span><a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      addListener(<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>        this.&lt;MergeTableRegionsRequest, MergeTableRegionsResponse&gt; procedureCall(tableName, request,<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>          (s, c, req, done) -&gt; s.mergeTableRegions(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>          new MergeTableRegionProcedureBiConsumer(tableName)),<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        (ret, err2) -&gt; {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>          if (err2 != null) {<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>            future.completeExceptionally(err2);<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>          } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>            future.complete(ret);<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>          }<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        });<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    });<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    return future;<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>  }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span><a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>  @Override<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>  public CompletableFuture&lt;Void&gt; split(TableName tableName) {<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    addListener(tableExists(tableName), (exist, error) -&gt; {<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>      if (error != null) {<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>        future.completeExceptionally(error);<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>        return;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      if (!exist) {<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>        return;<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      }<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      addListener(<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>        metaTable<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>          .scanAll(new Scan().setReadType(ReadType.PREAD).addFamily(HConstants.CATALOG_FAMILY)<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>            .withStartRow(MetaTableAccessor.getTableStartRowForMeta(tableName, QueryType.REGION))<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>            .withStopRow(MetaTableAccessor.getTableStopRowForMeta(tableName, QueryType.REGION))),<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>        (results, err2) -&gt; {<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>          if (err2 != null) {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>            future.completeExceptionally(err2);<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>            return;<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>          }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>          if (results != null &amp;&amp; !results.isEmpty()) {<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>            List&lt;CompletableFuture&lt;Void&gt;&gt; splitFutures = new ArrayList&lt;&gt;();<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>            for (Result r : results) {<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>              if (r.isEmpty() || MetaTableAccessor.getRegionInfo(r) == null) {<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>                continue;<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>              }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>              RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>              if (rl != null) {<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>                for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>                  if (h != null &amp;&amp; h.getServerName() != null) {<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>                    RegionInfo hri = h.getRegion();<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>                    if (hri == null || hri.isSplitParent() ||<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>                      hri.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>                      continue;<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>                    }<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>                    splitFutures.add(split(hri, null));<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>                  }<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>                }<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>              }<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>            }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>            addListener(<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>              CompletableFuture<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>                .allOf(splitFutures.toArray(new CompletableFuture&lt;?&gt;[splitFutures.size()])),<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>              (ret, exception) -&gt; {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>                if (exception != null) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>                  future.completeExceptionally(exception);<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>                  return;<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>                }<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>                future.complete(ret);<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>              });<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>          } else {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>            future.complete(null);<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>          }<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        });<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    });<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    return future;<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  }<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span><a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  @Override<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  public CompletableFuture&lt;Void&gt; split(TableName tableName, byte[] splitPoint) {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    CompletableFuture&lt;Void&gt; result = new CompletableFuture&lt;&gt;();<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    if (splitPoint == null) {<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>      return failedFuture(new IllegalArgumentException("splitPoint can not be null."));<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    }<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    addListener(connection.getRegionLocator(tableName).getRegionLocation(splitPoint),<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>      (loc, err) -&gt; {<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>        if (err != null) {<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>          result.completeExceptionally(err);<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>        } else if (loc == null || loc.getRegion() == null) {<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>          result.completeExceptionally(new IllegalArgumentException(<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>            "Region does not found: rowKey=" + Bytes.toStringBinary(splitPoint)));<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>        } else {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>          addListener(splitRegion(loc.getRegion().getRegionName(), splitPoint), (ret, err2) -&gt; {<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>            if (err2 != null) {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>              result.completeExceptionally(err2);<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>            } else {<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>              result.complete(ret);<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>            }<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span><a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>          });<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>        }<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>      });<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    return result;<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>  }<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span><a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>  @Override<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>  public CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        future<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          .completeExceptionally(new IllegalArgumentException("Can't split replicas directly. " +<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>            "Replicas are auto-split when their primary is split."));<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        return;<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>      ServerName serverName = location.getServerName();<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      if (serverName == null) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>        future<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>        return;<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      addListener(split(regionInfo, null), (ret, err2) -&gt; {<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>        if (err2 != null) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>          future.completeExceptionally(err2);<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>        } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>          future.complete(ret);<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      });<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    });<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>    return future;<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>  }<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span><a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>  @Override<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>  public CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName, byte[] splitPoint) {<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>    Preconditions.checkNotNull(splitPoint,<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>      "splitPoint is null. If you don't specify a splitPoint, use splitRegion(byte[]) instead");<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>        future<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>          .completeExceptionally(new IllegalArgumentException("Can't split replicas directly. " +<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>            "Replicas are auto-split when their primary is split."));<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        return;<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>      }<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>      ServerName serverName = location.getServerName();<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      if (serverName == null) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>        future<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        return;<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      if (regionInfo.getStartKey() != null &amp;&amp;<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>        Bytes.compareTo(regionInfo.getStartKey(), splitPoint) == 0) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>        future.completeExceptionally(<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          new IllegalArgumentException("should not give a splitkey which equals to startkey!"));<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        return;<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      addListener(split(regionInfo, splitPoint), (ret, err2) -&gt; {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (err2 != null) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          future.completeExceptionally(err2);<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        } else {<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>          future.complete(ret);<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>        }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      });<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>    });<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    return future;<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span><a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  private CompletableFuture&lt;Void&gt; split(final RegionInfo hri, byte[] splitPoint) {<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    TableName tableName = hri.getTable();<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>    SplitTableRegionRequest request = null;<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>    try {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      request = RequestConverter.buildSplitTableRegionRequest(hri, splitPoint, ng.getNonceGroup(),<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>        ng.newNonce());<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    } catch (DeserializationException e) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      future.completeExceptionally(e);<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      return future;<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>    }<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span><a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>    addListener(<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      this.&lt;SplitTableRegionRequest, SplitTableRegionResponse&gt; procedureCall(tableName,<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>        request, (s, c, req, done) -&gt; s.splitRegion(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        new SplitTableRegionProcedureBiConsumer(tableName)),<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>      (ret, err2) -&gt; {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>        if (err2 != null) {<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>          future.completeExceptionally(err2);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        } else {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>          future.complete(ret);<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      });<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>    return future;<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>  }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span><a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  @Override<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  public CompletableFuture&lt;Void&gt; assign(byte[] regionName) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      if (err != null) {<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        future.completeExceptionally(err);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        return;<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>      addListener(this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>        .action(((controller, stub) -&gt; this.&lt;AssignRegionRequest, AssignRegionResponse, Void&gt; call(<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          controller, stub, RequestConverter.buildAssignRegionRequest(regionInfo.getRegionName()),<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>          (s, c, req, done) -&gt; s.assignRegion(c, req, done), resp -&gt; null)))<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        .call(), (ret, err2) -&gt; {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>          if (err2 != null) {<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>            future.completeExceptionally(err2);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>          } else {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>            future.complete(ret);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>          }<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        });<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>    });<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    return future;<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>  }<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span><a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  @Override<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>  public CompletableFuture&lt;Void&gt; unassign(byte[] regionName, boolean forcible) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>      if (err != null) {<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        future.completeExceptionally(err);<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        return;<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>      addListener(<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>          .action(((controller, stub) -&gt; this<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>            .&lt;UnassignRegionRequest, UnassignRegionResponse, Void&gt; call(controller, stub,<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>              RequestConverter.buildUnassignRegionRequest(regionInfo.getRegionName(), forcible),<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>              (s, c, req, done) -&gt; s.unassignRegion(c, req, done), resp -&gt; null)))<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>          .call(),<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        (ret, err2) -&gt; {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>          if (err2 != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>            future.completeExceptionally(err2);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          } else {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            future.complete(ret);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        });<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    });<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>    return future;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>  }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span><a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>  @Override<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  public CompletableFuture&lt;Void&gt; offline(byte[] regionName) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      if (err != null) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        future.completeExceptionally(err);<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        return;<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      addListener(<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>        this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>          .action(((controller, stub) -&gt; this<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>            .&lt;OfflineRegionRequest, OfflineRegionResponse, Void&gt; call(controller, stub,<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>              RequestConverter.buildOfflineRegionRequest(regionInfo.getRegionName()),<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>              (s, c, req, done) -&gt; s.offlineRegion(c, req, done), resp -&gt; null)))<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>          .call(),<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        (ret, err2) -&gt; {<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>          if (err2 != null) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>            future.completeExceptionally(err2);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>          } else {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>            future.complete(ret);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        });<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>    });<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    return future;<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  public CompletableFuture&lt;Void&gt; move(byte[] regionName) {<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      if (err != null) {<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>        future.completeExceptionally(err);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>        return;<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      addListener(<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>        moveRegion(regionInfo,<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>          RequestConverter.buildMoveRegionRequest(regionInfo.getEncodedNameAsBytes(), null)),<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>        (ret, err2) -&gt; {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>          if (err2 != null) {<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>            future.completeExceptionally(err2);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>          } else {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>            future.complete(ret);<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>          }<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>        });<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    });<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return future;<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>  }<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span><a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public CompletableFuture&lt;Void&gt; move(byte[] regionName, ServerName destServerName) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    Preconditions.checkNotNull(destServerName,<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      "destServerName is null. If you don't specify a destServerName, use move(byte[]) instead");<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      if (err != null) {<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        future.completeExceptionally(err);<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>        return;<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>      }<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      addListener(<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>        moveRegion(regionInfo, RequestConverter<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          .buildMoveRegionRequest(regionInfo.getEncodedNameAsBytes(), destServerName)),<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        (ret, err2) -&gt; {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>          if (err2 != null) {<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>            future.completeExceptionally(err2);<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>          } else {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>            future.complete(ret);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>          }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        });<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    });<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>    return future;<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>  }<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span><a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>  private CompletableFuture&lt;Void&gt; moveRegion(RegionInfo regionInfo, MoveRegionRequest request) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    return this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      .action(<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        (controller, stub) -&gt; this.&lt;MoveRegionRequest, MoveRegionResponse, Void&gt; call(controller,<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>          stub, request, (s, c, req, done) -&gt; s.moveRegion(c, req, done), resp -&gt; null))<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      .call();<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>  }<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>  @Override<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  public CompletableFuture&lt;Void&gt; setQuota(QuotaSettings quota) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    return this<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        .&lt;Void&gt; newMasterCaller()<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>        .action(<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>          (controller, stub) -&gt; this.&lt;SetQuotaRequest, SetQuotaResponse, Void&gt; call(controller,<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>            stub, QuotaSettings.buildSetQuotaRequestProto(quota),<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>            (s, c, req, done) -&gt; s.setQuota(c, req, done), (resp) -&gt; null)).call();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span><a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>  @Override<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>  public CompletableFuture&lt;List&lt;QuotaSettings&gt;&gt; getQuota(QuotaFilter filter) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    CompletableFuture&lt;List&lt;QuotaSettings&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    Scan scan = QuotaTableUtil.makeScan(filter);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    this.connection.getTableBuilder(QuotaTableUtil.QUOTA_TABLE_NAME).build()<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>        .scan(scan, new AdvancedScanResultConsumer() {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>          List&lt;QuotaSettings&gt; settings = new ArrayList&lt;&gt;();<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span><a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>          @Override<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>          public void onNext(Result[] results, ScanController controller) {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>            for (Result result : results) {<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>              try {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>                QuotaTableUtil.parseResultToCollection(result, settings);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>              } catch (IOException e) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>                controller.terminate();<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>                future.completeExceptionally(e);<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>              }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>            }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>          }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>          @Override<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>          public void onError(Throwable error) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>            future.completeExceptionally(error);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>          }<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span><a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          @Override<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>          public void onComplete() {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>            future.complete(settings);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>          }<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        });<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>    return future;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>  }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>  @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>  public CompletableFuture&lt;Void&gt; addReplicationPeer(String peerId,<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      ReplicationPeerConfig peerConfig, boolean enabled) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    return this.&lt;AddReplicationPeerRequest, AddReplicationPeerResponse&gt; procedureCall(<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      RequestConverter.buildAddReplicationPeerRequest(peerId, peerConfig, enabled),<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      (s, c, req, done) -&gt; s.addReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "ADD_REPLICATION_PEER"));<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>  }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span><a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  @Override<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>  public CompletableFuture&lt;Void&gt; removeReplicationPeer(String peerId) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    return this.&lt;RemoveReplicationPeerRequest, RemoveReplicationPeerResponse&gt; procedureCall(<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>      RequestConverter.buildRemoveReplicationPeerRequest(peerId),<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>      (s, c, req, done) -&gt; s.removeReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "REMOVE_REPLICATION_PEER"));<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span><a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>  @Override<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>  public CompletableFuture&lt;Void&gt; enableReplicationPeer(String peerId) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    return this.&lt;EnableReplicationPeerRequest, EnableReplicationPeerResponse&gt; procedureCall(<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>      RequestConverter.buildEnableReplicationPeerRequest(peerId),<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      (s, c, req, done) -&gt; s.enableReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "ENABLE_REPLICATION_PEER"));<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>  }<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span><a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>  @Override<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>  public CompletableFuture&lt;Void&gt; disableReplicationPeer(String peerId) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>    return this.&lt;DisableReplicationPeerRequest, DisableReplicationPeerResponse&gt; procedureCall(<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      RequestConverter.buildDisableReplicationPeerRequest(peerId),<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      (s, c, req, done) -&gt; s.disableReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "DISABLE_REPLICATION_PEER"));<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>  @Override<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>  public CompletableFuture&lt;ReplicationPeerConfig&gt; getReplicationPeerConfig(String peerId) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    return this.&lt;ReplicationPeerConfig&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>      .&lt;GetReplicationPeerConfigRequest, GetReplicationPeerConfigResponse, ReplicationPeerConfig&gt; call(<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>        controller, stub, RequestConverter.buildGetReplicationPeerConfigRequest(peerId),<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>        (s, c, req, done) -&gt; s.getReplicationPeerConfig(c, req, done),<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>        (resp) -&gt; ReplicationPeerConfigUtil.convert(resp.getPeerConfig())))<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>      .call();<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>  }<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span><a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>  @Override<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>  public CompletableFuture&lt;Void&gt; updateReplicationPeerConfig(String peerId,<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      ReplicationPeerConfig peerConfig) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>    return this<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      .&lt;UpdateReplicationPeerConfigRequest, UpdateReplicationPeerConfigResponse&gt; procedureCall(<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>        RequestConverter.buildUpdateReplicationPeerConfigRequest(peerId, peerConfig),<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>        (s, c, req, done) -&gt; s.updateReplicationPeerConfig(c, req, done),<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>        (resp) -&gt; resp.getProcId(),<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        new ReplicationProcedureBiConsumer(peerId, () -&gt; "UPDATE_REPLICATION_PEER_CONFIG"));<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @Override<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  public CompletableFuture&lt;Void&gt; transitReplicationPeerSyncReplicationState(String peerId,<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>      SyncReplicationState clusterState) {<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>    return this<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      .&lt;TransitReplicationPeerSyncReplicationStateRequest, TransitReplicationPeerSyncReplicationStateResponse&gt; procedureCall(<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        RequestConverter.buildTransitReplicationPeerSyncReplicationStateRequest(peerId,<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>          clusterState),<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>        (s, c, req, done) -&gt; s.transitReplicationPeerSyncReplicationState(c, req, done),<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>        (resp) -&gt; resp.getProcId(), new ReplicationProcedureBiConsumer(peerId,<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>          () -&gt; "TRANSIT_REPLICATION_PEER_SYNCHRONOUS_REPLICATION_STATE"));<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>  }<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @Override<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  public CompletableFuture&lt;Void&gt; appendReplicationPeerTableCFs(String id,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      Map&lt;TableName, List&lt;String&gt;&gt; tableCfs) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    if (tableCfs == null) {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      return failedFuture(new ReplicationException("tableCfs is null"));<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    addListener(getReplicationPeerConfig(id), (peerConfig, error) -&gt; {<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      if (!completeExceptionally(future, error)) {<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>        ReplicationPeerConfig newPeerConfig =<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>          ReplicationPeerConfigUtil.appendTableCFsToReplicationPeerConfig(tableCfs, peerConfig);<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        addListener(updateReplicationPeerConfig(id, newPeerConfig), (result, err) -&gt; {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>          if (!completeExceptionally(future, error)) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>            future.complete(result);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          }<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        });<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      }<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>    });<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>    return future;<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span><a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>  @Override<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  public CompletableFuture&lt;Void&gt; removeReplicationPeerTableCFs(String id,<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      Map&lt;TableName, List&lt;String&gt;&gt; tableCfs) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    if (tableCfs == null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      return failedFuture(new ReplicationException("tableCfs is null"));<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span><a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    addListener(getReplicationPeerConfig(id), (peerConfig, error) -&gt; {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      if (!completeExceptionally(future, error)) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>        ReplicationPeerConfig newPeerConfig = null;<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>        try {<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>          newPeerConfig = ReplicationPeerConfigUtil<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>            .removeTableCFsFromReplicationPeerConfig(tableCfs, peerConfig, id);<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>        } catch (ReplicationException e) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          future.completeExceptionally(e);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>          return;<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        addListener(updateReplicationPeerConfig(id, newPeerConfig), (result, err) -&gt; {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          if (!completeExceptionally(future, error)) {<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>            future.complete(result);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>        });<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    });<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    return future;<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>  }<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span><a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>  @Override<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return listReplicationPeers(RequestConverter.buildListReplicationPeersRequest(null));<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  @Override<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  public CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers(Pattern pattern) {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>    Preconditions.checkNotNull(pattern,<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      "pattern is null. If you don't specify a pattern, use listReplicationPeers() instead");<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    return listReplicationPeers(RequestConverter.buildListReplicationPeersRequest(pattern));<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>  }<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>  private CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers(<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      ListReplicationPeersRequest request) {<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    return this<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        .&lt;List&lt;ReplicationPeerDescription&gt;&gt; newMasterCaller()<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>        .action(<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>          (controller, stub) -&gt; this<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>              .&lt;ListReplicationPeersRequest, ListReplicationPeersResponse, List&lt;ReplicationPeerDescription&gt;&gt; call(<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>                controller,<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>                stub,<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>                request,<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>                (s, c, req, done) -&gt; s.listReplicationPeers(c, req, done),<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>                (resp) -&gt; resp.getPeerDescList().stream()<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>                    .map(ReplicationPeerConfigUtil::toReplicationPeerDescription)<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>                    .collect(Collectors.toList()))).call();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  public CompletableFuture&lt;List&lt;TableCFs&gt;&gt; listReplicatedTableCFs() {<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    CompletableFuture&lt;List&lt;TableCFs&gt;&gt; future = new CompletableFuture&lt;List&lt;TableCFs&gt;&gt;();<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    addListener(listTableDescriptors(), (tables, error) -&gt; {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>      if (!completeExceptionally(future, error)) {<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>        List&lt;TableCFs&gt; replicatedTableCFs = new ArrayList&lt;&gt;();<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>        tables.forEach(table -&gt; {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>          Map&lt;String, Integer&gt; cfs = new HashMap&lt;&gt;();<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>          Stream.of(table.getColumnFamilies())<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>            .filter(column -&gt; column.getScope() != HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>            .forEach(column -&gt; {<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>              cfs.put(column.getNameAsString(), column.getScope());<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>            });<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>          if (!cfs.isEmpty()) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>            replicatedTableCFs.add(new TableCFs(table.getTableName(), cfs));<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>          }<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        });<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        future.complete(replicatedTableCFs);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>      }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    });<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>    return future;<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>  }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span><a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>  @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  public CompletableFuture&lt;Void&gt; snapshot(SnapshotDescription snapshotDesc) {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    SnapshotProtos.SnapshotDescription snapshot =<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      ProtobufUtil.createHBaseProtosSnapshotDesc(snapshotDesc);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    try {<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      ClientSnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>    } catch (IllegalArgumentException e) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      return failedFuture(e);<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>    }<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    final SnapshotRequest request = SnapshotRequest.newBuilder().setSnapshot(snapshot).build();<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    addListener(this.&lt;Long&gt; newMasterCaller()<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      .action((controller, stub) -&gt; this.&lt;SnapshotRequest, SnapshotResponse, Long&gt; call(controller,<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        stub, request, (s, c, req, done) -&gt; s.snapshot(c, req, done),<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>        resp -&gt; resp.getExpectedTimeout()))<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>      .call(), (expectedTimeout, err) -&gt; {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>        if (err != null) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>          future.completeExceptionally(err);<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>          return;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        }<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        TimerTask pollingTask = new TimerTask() {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          int tries = 0;<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>          long endTime = startTime + expectedTimeout;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          long maxPauseTime = expectedTimeout / maxAttempts;<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>          @Override<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>          public void run(Timeout timeout) throws Exception {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>            if (EnvironmentEdgeManager.currentTime() &lt; endTime) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>              addListener(isSnapshotFinished(snapshotDesc), (done, err2) -&gt; {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>                if (err2 != null) {<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>                  future.completeExceptionally(err2);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>                } else if (done) {<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>                  future.complete(null);<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>                } else {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>                  // retry again after pauseTime.<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>                  long pauseTime =<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>                    ConnectionUtils.getPauseTime(TimeUnit.NANOSECONDS.toMillis(pauseNs), ++tries);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>                  pauseTime = Math.min(pauseTime, maxPauseTime);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>                  AsyncConnectionImpl.RETRY_TIMER.newTimeout(this, pauseTime,<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>                    TimeUnit.MILLISECONDS);<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>                }<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>              });<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>            } else {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>              future.completeExceptionally(<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>                new SnapshotCreationException("Snapshot '" + snapshot.getName() +<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>                  "' wasn't completed in expectedTime:" + expectedTimeout + " ms", snapshotDesc));<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>            }<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>        };<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>        AsyncConnectionImpl.RETRY_TIMER.newTimeout(pollingTask, 1, TimeUnit.MILLISECONDS);<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>      });<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>    return future;<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  }<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span><a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  @Override<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>  public CompletableFuture&lt;Boolean&gt; isSnapshotFinished(SnapshotDescription snapshot) {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    return this<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>        .action(<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          (controller, stub) -&gt; this.&lt;IsSnapshotDoneRequest, IsSnapshotDoneResponse, Boolean&gt; call(<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>            controller,<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>            stub,<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            IsSnapshotDoneRequest.newBuilder()<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>                .setSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot)).build(), (s, c,<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>                req, done) -&gt; s.isSnapshotDone(c, req, done), resp -&gt; resp.getDone())).call();<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>  }<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span><a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @Override<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    boolean takeFailSafeSnapshot = this.connection.getConfiguration().getBoolean(<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT,<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      HConstants.DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    return restoreSnapshot(snapshotName, takeFailSafeSnapshot);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>  }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>  @Override<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>  public CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName, boolean takeFailSafeSnapshot,<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      boolean restoreAcl) {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    addListener(listSnapshots(Pattern.compile(snapshotName)), (snapshotDescriptions, err) -&gt; {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      if (err != null) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        future.completeExceptionally(err);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>        return;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      TableName tableName = null;<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      if (snapshotDescriptions != null &amp;&amp; !snapshotDescriptions.isEmpty()) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        for (SnapshotDescription snap : snapshotDescriptions) {<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>          if (snap.getName().equals(snapshotName)) {<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>            tableName = snap.getTableName();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>            break;<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>          }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>        }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>      }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>      if (tableName == null) {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>        future.completeExceptionally(new RestoreSnapshotException(<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>          "Unable to find the table name for snapshot=" + snapshotName));<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>        return;<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      }<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      final TableName finalTableName = tableName;<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      addListener(tableExists(finalTableName), (exists, err2) -&gt; {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>        if (err2 != null) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>          future.completeExceptionally(err2);<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>        } else if (!exists) {<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>          // if table does not exist, then just clone snapshot into new table.<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>          completeConditionalOnFuture(future,<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>            internalRestoreSnapshot(snapshotName, finalTableName, restoreAcl));<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        } else {<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          addListener(isTableDisabled(finalTableName), (disabled, err4) -&gt; {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            if (err4 != null) {<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>              future.completeExceptionally(err4);<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>            } else if (!disabled) {<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>              future.completeExceptionally(new TableNotDisabledException(finalTableName));<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>            } else {<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>              completeConditionalOnFuture(future,<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>                restoreSnapshot(snapshotName, finalTableName, takeFailSafeSnapshot, restoreAcl));<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>            }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>          });<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      });<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>    });<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>    return future;<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>  }<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span><a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>  private CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName, TableName tableName,<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      boolean takeFailSafeSnapshot, boolean restoreAcl) {<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>    if (takeFailSafeSnapshot) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>      CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      // Step.1 Take a snapshot of the current state<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      String failSafeSnapshotSnapshotNameFormat =<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>        this.connection.getConfiguration().get(HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME,<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>          HConstants.DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME);<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      final String failSafeSnapshotSnapshotName =<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>        failSafeSnapshotSnapshotNameFormat.replace("{snapshot.name}", snapshotName)<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>          .replace("{table.name}", tableName.toString().replace(TableName.NAMESPACE_DELIM, '.'))<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>          .replace("{restore.timestamp}", String.valueOf(EnvironmentEdgeManager.currentTime()));<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      LOG.info("Taking restore-failsafe snapshot: " + failSafeSnapshotSnapshotName);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>      addListener(snapshot(failSafeSnapshotSnapshotName, tableName), (ret, err) -&gt; {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        if (err != null) {<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>          future.completeExceptionally(err);<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>        } else {<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>          // Step.2 Restore snapshot<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>          addListener(internalRestoreSnapshot(snapshotName, tableName, restoreAcl),<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>            (void2, err2) -&gt; {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>              if (err2 != null) {<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>                // Step.3.a Something went wrong during the restore and try to rollback.<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>                addListener(<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>                  internalRestoreSnapshot(failSafeSnapshotSnapshotName, tableName, restoreAcl),<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>                  (void3, err3) -&gt; {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>                    if (err3 != null) {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>                      future.completeExceptionally(err3);<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>                    } else {<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>                      String msg =<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>                        "Restore snapshot=" + snapshotName + " failed. Rollback to snapshot=" +<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>                          failSafeSnapshotSnapshotName + " succeeded.";<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>                      future.completeExceptionally(new RestoreSnapshotException(msg, err2));<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>                    }<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>                  });<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>              } else {<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>                // Step.3.b If the restore is succeeded, delete the pre-restore snapshot.<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>                LOG.info("Deleting restore-failsafe snapshot: " + failSafeSnapshotSnapshotName);<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>                addListener(deleteSnapshot(failSafeSnapshotSnapshotName), (ret3, err3) -&gt; {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>                  if (err3 != null) {<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>                    LOG.error(<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>                      "Unable to remove the failsafe snapshot: " + failSafeSnapshotSnapshotName,<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>                      err3);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>                    future.completeExceptionally(err3);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>                  } else {<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>                    future.complete(ret3);<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>                  }<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>                });<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>              }<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>            });<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>        }<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      });<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      return future;<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>    } else {<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      return internalRestoreSnapshot(snapshotName, tableName, restoreAcl);<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>    }<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>  }<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span><a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>  private &lt;T&gt; void completeConditionalOnFuture(CompletableFuture&lt;T&gt; dependentFuture,<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      CompletableFuture&lt;T&gt; parentFuture) {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    addListener(parentFuture, (res, err) -&gt; {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>      if (err != null) {<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>        dependentFuture.completeExceptionally(err);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>      } else {<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>        dependentFuture.complete(res);<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    });<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  @Override<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>  public CompletableFuture&lt;Void&gt; cloneSnapshot(String snapshotName, TableName tableName,<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      boolean restoreAcl) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    addListener(tableExists(tableName), (exists, err) -&gt; {<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      if (err != null) {<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>        future.completeExceptionally(err);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      } else if (exists) {<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>        future.completeExceptionally(new TableExistsException(tableName));<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      } else {<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>        completeConditionalOnFuture(future,<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>          internalRestoreSnapshot(snapshotName, tableName, restoreAcl));<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>      }<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    });<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    return future;<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  }<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span><a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>  private CompletableFuture&lt;Void&gt; internalRestoreSnapshot(String snapshotName, TableName tableName,<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      boolean restoreAcl) {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    SnapshotProtos.SnapshotDescription snapshot = SnapshotProtos.SnapshotDescription.newBuilder()<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      .setName(snapshotName).setTable(tableName.getNameAsString()).build();<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    try {<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>      ClientSnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    } catch (IllegalArgumentException e) {<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>      return failedFuture(e);<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    return waitProcedureResult(this.&lt;Long&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>      .&lt;RestoreSnapshotRequest, RestoreSnapshotResponse, Long&gt; call(controller, stub,<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>        RestoreSnapshotRequest.newBuilder().setSnapshot(snapshot).setNonceGroup(ng.getNonceGroup())<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>          .setNonce(ng.newNonce()).setRestoreACL(restoreAcl).build(),<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>        (s, c, req, done) -&gt; s.restoreSnapshot(c, req, done), (resp) -&gt; resp.getProcId()))<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>      .call());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>  }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  @Override<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots() {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>    return getCompletedSnapshots(null);<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span><a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>  @Override<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots(Pattern pattern) {<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    Preconditions.checkNotNull(pattern,<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>      "pattern is null. If you don't specify a pattern, use listSnapshots() instead");<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    return getCompletedSnapshots(pattern);<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>  }<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span><a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>  private CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; getCompletedSnapshots(Pattern pattern) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    return this.&lt;List&lt;SnapshotDescription&gt;&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>        .&lt;GetCompletedSnapshotsRequest, GetCompletedSnapshotsResponse, List&lt;SnapshotDescription&gt;&gt;<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        call(controller, stub, GetCompletedSnapshotsRequest.newBuilder().build(),<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>          (s, c, req, done) -&gt; s.getCompletedSnapshots(c, req, done),<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>          resp -&gt; ProtobufUtil.toSnapshotDescriptionList(resp, pattern)))<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        .call();<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>  }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>  @Override<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern) {<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>        + " If you don't specify a tableNamePattern, use listSnapshots() instead");<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    return getCompletedSnapshots(tableNamePattern, null);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>  }<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span><a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>  @Override<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern,<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>      Pattern snapshotNamePattern) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>        + " If you don't specify a tableNamePattern, use listSnapshots(Pattern) instead");<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>        + " If you don't specify a snapshotNamePattern, use listTableSnapshots(Pattern) instead");<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>    return getCompletedSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  private CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; getCompletedSnapshots(<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      Pattern tableNamePattern, Pattern snapshotNamePattern) {<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>    CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    addListener(listTableNames(tableNamePattern, false), (tableNames, err) -&gt; {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>      if (err != null) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>        future.completeExceptionally(err);<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        return;<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      }<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>      if (tableNames == null || tableNames.size() &lt;= 0) {<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        future.complete(Collections.emptyList());<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        return;<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      }<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      addListener(getCompletedSnapshots(snapshotNamePattern), (snapshotDescList, err2) -&gt; {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>        if (err2 != null) {<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>          future.completeExceptionally(err2);<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>          return;<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        }<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>        if (snapshotDescList == null || snapshotDescList.isEmpty()) {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>          future.complete(Collections.emptyList());<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>          return;<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>        }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>        future.complete(snapshotDescList.stream()<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>          .filter(snap -&gt; (snap != null &amp;&amp; tableNames.contains(snap.getTableName())))<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>          .collect(Collectors.toList()));<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      });<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>    });<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    return future;<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>  }<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span><a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  @Override<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>  public CompletableFuture&lt;Void&gt; deleteSnapshot(String snapshotName) {<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>    return internalDeleteSnapshot(new SnapshotDescription(snapshotName));<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>  }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>  @Override<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>  public CompletableFuture&lt;Void&gt; deleteSnapshots() {<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>    return internalDeleteSnapshots(null, null);<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>  }<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span><a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>  @Override<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>  public CompletableFuture&lt;Void&gt; deleteSnapshots(Pattern snapshotNamePattern) {<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>        + " If you don't specify a snapshotNamePattern, use deleteSnapshots() instead");<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>    return internalDeleteSnapshots(null, snapshotNamePattern);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>  }<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span><a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>  @Override<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>  public CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern) {<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>        + " If you don't specify a tableNamePattern, use deleteSnapshots() instead");<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    return internalDeleteSnapshots(tableNamePattern, null);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span><a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>  @Override<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>  public CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern,<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>      Pattern snapshotNamePattern) {<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>        + " If you don't specify a tableNamePattern, use deleteSnapshots(Pattern) instead");<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>        + " If you don't specify a snapshotNamePattern, use deleteSnapshots(Pattern) instead");<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    return internalDeleteSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>  }<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span><a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>  private CompletableFuture&lt;Void&gt; internalDeleteSnapshots(Pattern tableNamePattern,<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>      Pattern snapshotNamePattern) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>    CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshotsFuture;<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (tableNamePattern == null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      listSnapshotsFuture = getCompletedSnapshots(snapshotNamePattern);<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>    } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>      listSnapshotsFuture = getCompletedSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>    }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    addListener(listSnapshotsFuture, ((snapshotDescriptions, err) -&gt; {<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>      if (err != null) {<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>        future.completeExceptionally(err);<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>        return;<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      }<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>      if (snapshotDescriptions == null || snapshotDescriptions.isEmpty()) {<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>        future.complete(null);<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>        return;<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>      }<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      addListener(CompletableFuture.allOf(snapshotDescriptions.stream()<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>        .map(this::internalDeleteSnapshot).toArray(CompletableFuture[]::new)), (v, e) -&gt; {<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>          if (e != null) {<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>            future.completeExceptionally(e);<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>          } else {<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>            future.complete(v);<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>          }<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>        });<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    }));<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    return future;<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>  }<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span><a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>  private CompletableFuture&lt;Void&gt; internalDeleteSnapshot(SnapshotDescription snapshot) {<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    return this<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>        .&lt;Void&gt; newMasterCaller()<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>        .action(<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>          (controller, stub) -&gt; this.&lt;DeleteSnapshotRequest, DeleteSnapshotResponse, Void&gt; call(<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>            controller,<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>            stub,<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>            DeleteSnapshotRequest.newBuilder()<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>                .setSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot)).build(), (s, c,<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>                req, done) -&gt; s.deleteSnapshot(c, req, done), resp -&gt; null)).call();<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>  }<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span><a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>  @Override<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>  public CompletableFuture&lt;Void&gt; execProcedure(String signature, String instance,<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>      Map&lt;String, String&gt; props) {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    ProcedureDescription procDesc =<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>      ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>    addListener(this.&lt;Long&gt; newMasterCaller()<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>      .action((controller, stub) -&gt; this.&lt;ExecProcedureRequest, ExecProcedureResponse, Long&gt; call(<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>        controller, stub, ExecProcedureRequest.newBuilder().setProcedure(procDesc).build(),<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>        (s, c, req, done) -&gt; s.execProcedure(c, req, done), resp -&gt; resp.getExpectedTimeout()))<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      .call(), (expectedTimeout, err) -&gt; {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>        if (err != null) {<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>          future.completeExceptionally(err);<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>          return;<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>        }<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>        TimerTask pollingTask = new TimerTask() {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>          int tries = 0;<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>          long startTime = EnvironmentEdgeManager.currentTime();<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>          long endTime = startTime + expectedTimeout;<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          long maxPauseTime = expectedTimeout / maxAttempts;<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span><a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>          @Override<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          public void run(Timeout timeout) throws Exception {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>            if (EnvironmentEdgeManager.currentTime() &lt; endTime) {<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>              addListener(isProcedureFinished(signature, instance, props), (done, err2) -&gt; {<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>                if (err2 != null) {<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>                  future.completeExceptionally(err2);<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>                  return;<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>                }<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>                if (done) {<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>                  future.complete(null);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>                } else {<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>                  // retry again after pauseTime.<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>                  long pauseTime =<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>                    ConnectionUtils.getPauseTime(TimeUnit.NANOSECONDS.toMillis(pauseNs), ++tries);<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>                  pauseTime = Math.min(pauseTime, maxPauseTime);<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>                  AsyncConnectionImpl.RETRY_TIMER.newTimeout(this, pauseTime,<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>                    TimeUnit.MICROSECONDS);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>                }<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>              });<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>            } else {<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>              future.completeExceptionally(new IOException("Procedure '" + signature + " : " +<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>                instance + "' wasn't completed in expectedTime:" + expectedTimeout + " ms"));<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>            }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>          }<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>        };<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>        // Queue the polling task into RETRY_TIMER to poll procedure state asynchronously.<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>        AsyncConnectionImpl.RETRY_TIMER.newTimeout(pollingTask, 1, TimeUnit.MILLISECONDS);<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      });<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    return future;<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>  }<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span><a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>  @Override<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  public CompletableFuture&lt;byte[]&gt; execProcedureWithReturn(String signature, String instance,<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>      Map&lt;String, String&gt; props) {<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>    ProcedureDescription proDesc =<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    return this.&lt;byte[]&gt; newMasterCaller()<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        .action(<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>          (controller, stub) -&gt; this.&lt;ExecProcedureRequest, ExecProcedureResponse, byte[]&gt; call(<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>            controller, stub, ExecProcedureRequest.newBuilder().setProcedure(proDesc).build(),<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            (s, c, req, done) -&gt; s.execProcedureWithRet(c, req, done),<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            resp -&gt; resp.hasReturnData() ? resp.getReturnData().toByteArray() : null))<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        .call();<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span><a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>  public CompletableFuture&lt;Boolean&gt; isProcedureFinished(String signature, String instance,<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      Map&lt;String, String&gt; props) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>    ProcedureDescription proDesc =<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        .action((controller, stub) -&gt; this<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>            .&lt;IsProcedureDoneRequest, IsProcedureDoneResponse, Boolean&gt; call(controller, stub,<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>              IsProcedureDoneRequest.newBuilder().setProcedure(proDesc).build(),<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>              (s, c, req, done) -&gt; s.isProcedureDone(c, req, done), resp -&gt; resp.getDone()))<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>        .call();<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span><a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  @Override<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>  public CompletableFuture&lt;Boolean&gt; abortProcedure(long procId, boolean mayInterruptIfRunning) {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>    return this.&lt;Boolean&gt; newMasterCaller().action(<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      (controller, stub) -&gt; this.&lt;AbortProcedureRequest, AbortProcedureResponse, Boolean&gt; call(<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        controller, stub, AbortProcedureRequest.newBuilder().setProcId(procId).build(),<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>        (s, c, req, done) -&gt; s.abortProcedure(c, req, done), resp -&gt; resp.getIsProcedureAborted()))<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        .call();<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>  }<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span><a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>  @Override<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  public CompletableFuture&lt;String&gt; getProcedures() {<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>    return this<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>        .&lt;String&gt; newMasterCaller()<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        .action(<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          (controller, stub) -&gt; this<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>              .&lt;GetProceduresRequest, GetProceduresResponse, String&gt; call(<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>                controller, stub, GetProceduresRequest.newBuilder().build(),<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>                (s, c, req, done) -&gt; s.getProcedures(c, req, done),<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>                resp -&gt; ProtobufUtil.toProcedureJson(resp.getProcedureList()))).call();<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  @Override<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>  public CompletableFuture&lt;String&gt; getLocks() {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    return this<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>        .&lt;String&gt; newMasterCaller()<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>        .action(<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>          (controller, stub) -&gt; this.&lt;GetLocksRequest, GetLocksResponse, String&gt; call(<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>            controller, stub, GetLocksRequest.newBuilder().build(),<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>            (s, c, req, done) -&gt; s.getLocks(c, req, done),<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>            resp -&gt; ProtobufUtil.toLockJson(resp.getLockList()))).call();<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>  }<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span><a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  @Override<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>  public CompletableFuture&lt;Void&gt; decommissionRegionServers(List&lt;ServerName&gt; servers, boolean offload) {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>        .action((controller, stub) -&gt; this<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>          .&lt;DecommissionRegionServersRequest, DecommissionRegionServersResponse, Void&gt; call(<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>            controller, stub, RequestConverter.buildDecommissionRegionServersRequest(servers, offload),<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>            (s, c, req, done) -&gt; s.decommissionRegionServers(c, req, done), resp -&gt; null))<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>        .call();<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span><a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>  @Override<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>  public CompletableFuture&lt;List&lt;ServerName&gt;&gt; listDecommissionedRegionServers() {<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    return this.&lt;List&lt;ServerName&gt;&gt; newMasterCaller()<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>        .action((controller, stub) -&gt; this<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>          .&lt;ListDecommissionedRegionServersRequest, ListDecommissionedRegionServersResponse,<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>            List&lt;ServerName&gt;&gt; call(<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>              controller, stub, ListDecommissionedRegionServersRequest.newBuilder().build(),<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>              (s, c, req, done) -&gt; s.listDecommissionedRegionServers(c, req, done),<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>              resp -&gt; resp.getServerNameList().stream().map(ProtobufUtil::toServerName)<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>                  .collect(Collectors.toList())))<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>        .call();<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span><a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  public CompletableFuture&lt;Void&gt; recommissionRegionServer(ServerName server,<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>      List&lt;byte[]&gt; encodedRegionNames) {<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>        .action((controller, stub) -&gt; this<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>          .&lt;RecommissionRegionServerRequest, RecommissionRegionServerResponse, Void&gt; call(controller,<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>            stub, RequestConverter.buildRecommissionRegionServerRequest(server, encodedRegionNames),<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>            (s, c, req, done) -&gt; s.recommissionRegionServer(c, req, done), resp -&gt; null))<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>        .call();<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>  }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>  /**<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>   * Get the region location for the passed region name. The region name may be a full region name<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>   * or encoded region name. If the region does not found, then it'll throw an<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>   * UnknownRegionException wrapped by a {@link CompletableFuture}<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>   * @param regionNameOrEncodedRegionName region name or encoded region name<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>   * @return region location, wrapped by a {@link CompletableFuture}<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>   */<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>  @VisibleForTesting<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(byte[] regionNameOrEncodedRegionName) {<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    if (regionNameOrEncodedRegionName == null) {<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>      return failedFuture(new IllegalArgumentException("Passed region name can't be null"));<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    }<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    try {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      CompletableFuture&lt;Optional&lt;HRegionLocation&gt;&gt; future;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      if (RegionInfo.isEncodedRegionName(regionNameOrEncodedRegionName)) {<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>        String encodedName = Bytes.toString(regionNameOrEncodedRegionName);<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>        if (encodedName.length() &lt; RegionInfo.MD5_HEX_LENGTH) {<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>          // old format encodedName, should be meta region<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>          future = connection.registry.getMetaRegionLocation()<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>            .thenApply(locs -&gt; Stream.of(locs.getRegionLocations())<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>              .filter(loc -&gt; loc.getRegion().getEncodedName().equals(encodedName)).findFirst());<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>        } else {<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>          future = AsyncMetaTableAccessor.getRegionLocationWithEncodedName(metaTable,<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>            regionNameOrEncodedRegionName);<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>        }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>      } else {<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>        RegionInfo regionInfo =<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>          MetaTableAccessor.parseRegionInfoFromRegionName(regionNameOrEncodedRegionName);<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>        if (regionInfo.isMetaRegion()) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>          future = connection.registry.getMetaRegionLocation()<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>            .thenApply(locs -&gt; Stream.of(locs.getRegionLocations())<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>              .filter(loc -&gt; loc.getRegion().getReplicaId() == regionInfo.getReplicaId())<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>              .findFirst());<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>        } else {<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>          future =<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>            AsyncMetaTableAccessor.getRegionLocation(metaTable, regionNameOrEncodedRegionName);<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        }<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      }<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span><a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>      CompletableFuture&lt;HRegionLocation&gt; returnedFuture = new CompletableFuture&lt;&gt;();<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      addListener(future, (location, err) -&gt; {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        if (err != null) {<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>          returnedFuture.completeExceptionally(err);<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>          return;<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        }<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>        if (!location.isPresent() || location.get().getRegion() == null) {<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>          returnedFuture.completeExceptionally(<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>            new UnknownRegionException("Invalid region name or encoded region name: " +<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>              Bytes.toStringBinary(regionNameOrEncodedRegionName)));<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>        } else {<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          returnedFuture.complete(location.get());<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      });<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>      return returnedFuture;<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    } catch (IOException e) {<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>      return failedFuture(e);<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    }<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span><a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>  /**<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>   * Get the region info for the passed region name. The region name may be a full region name or<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>   * encoded region name. If the region does not found, then it'll throw an UnknownRegionException<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>   * wrapped by a {@link CompletableFuture}<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>   * @param regionNameOrEncodedRegionName<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>   * @return region info, wrapped by a {@link CompletableFuture}<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>   */<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  private CompletableFuture&lt;RegionInfo&gt; getRegionInfo(byte[] regionNameOrEncodedRegionName) {<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    if (regionNameOrEncodedRegionName == null) {<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      return failedFuture(new IllegalArgumentException("Passed region name can't be null"));<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>    }<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span><a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    if (Bytes.equals(regionNameOrEncodedRegionName,<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>      RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName()) ||<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>      Bytes.equals(regionNameOrEncodedRegionName,<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>        RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedNameAsBytes())) {<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>      return CompletableFuture.completedFuture(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span><a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>    CompletableFuture&lt;RegionInfo&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    addListener(getRegionLocation(regionNameOrEncodedRegionName), (location, err) -&gt; {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (err != null) {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>        future.completeExceptionally(err);<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>      } else {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>        future.complete(location.getRegion());<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      }<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    });<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    return future;<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>  }<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span><a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>  private byte[][] getSplitKeys(byte[] startKey, byte[] endKey, int numRegions) {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>    if (numRegions &lt; 3) {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>      throw new IllegalArgumentException("Must create at least three regions");<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span>    } else if (Bytes.compareTo(startKey, endKey) &gt;= 0) {<a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>      throw new IllegalArgumentException("Start key must be smaller than end key");<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>    }<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    if (numRegions == 3) {<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>      return new byte[][] { startKey, endKey };<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>    }<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    if (splitKeys == null || splitKeys.length != numRegions - 1) {<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>      throw new IllegalArgumentException("Unable to split key range into enough regions");<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>    return splitKeys;<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  }<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span><a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>  private void verifySplitKeys(byte[][] splitKeys) {<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    Arrays.sort(splitKeys, Bytes.BYTES_COMPARATOR);<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    // Verify there are no duplicate split keys<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    byte[] lastKey = null;<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>    for (byte[] splitKey : splitKeys) {<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>      if (Bytes.compareTo(splitKey, HConstants.EMPTY_BYTE_ARRAY) == 0) {<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>        throw new IllegalArgumentException("Empty split key must not be passed in the split keys.");<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>      }<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>      if (lastKey != null &amp;&amp; Bytes.equals(splitKey, lastKey)) {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        throw new IllegalArgumentException("All split keys must be unique, " + "found duplicate: "<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>            + Bytes.toStringBinary(splitKey) + ", " + Bytes.toStringBinary(lastKey));<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>      }<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>      lastKey = splitKey;<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>    }<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>  }<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span><a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>  private static abstract class ProcedureBiConsumer implements BiConsumer&lt;Void, Throwable&gt; {<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span><a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>    abstract void onFinished();<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span><a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>    abstract void onError(Throwable error);<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span><a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>    @Override<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>    public void accept(Void v, Throwable error) {<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>      if (error != null) {<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>        onError(error);<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>        return;<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>      }<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>      onFinished();<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>    }<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>  }<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span><a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>  private static abstract class TableProcedureBiConsumer extends ProcedureBiConsumer {<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>    protected final TableName tableName;<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span><a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>    TableProcedureBiConsumer(TableName tableName) {<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>      this.tableName = tableName;<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>    }<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span><a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>    abstract String getOperationType();<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span><a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>    String getDescription() {<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>      return "Operation: " + getOperationType() + ", " + "Table Name: "<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>          + tableName.getNameWithNamespaceInclAsString();<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>    }<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span><a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>    @Override<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>    void onFinished() {<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      LOG.info(getDescription() + " completed");<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    }<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span><a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>    @Override<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>    void onError(Throwable error) {<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>      LOG.info(getDescription() + " failed with " + error.getMessage());<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>  }<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span><a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>  private static abstract class NamespaceProcedureBiConsumer extends ProcedureBiConsumer {<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    protected final String namespaceName;<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span><a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>    NamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>      this.namespaceName = namespaceName;<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>    }<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span><a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>    abstract String getOperationType();<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span><a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>    String getDescription() {<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>      return "Operation: " + getOperationType() + ", Namespace: " + namespaceName;<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>    }<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span><a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>    @Override<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    void onFinished() {<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>      LOG.info(getDescription() + " completed");<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>    }<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span><a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>    @Override<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>    void onError(Throwable error) {<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>      LOG.info(getDescription() + " failed with " + error.getMessage());<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>    }<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>  }<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span><a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>  private static class CreateTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span><a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>    CreateTableProcedureBiConsumer(TableName tableName) {<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>      super(tableName);<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>    }<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span><a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    @Override<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>    String getOperationType() {<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>      return "CREATE";<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>  }<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span><a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>  private static class ModifyTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span><a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>    ModifyTableProcedureBiConsumer(AsyncAdmin admin, TableName tableName) {<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>      super(tableName);<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    }<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span><a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>    @Override<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>    String getOperationType() {<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>      return "ENABLE";<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    }<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>  }<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span><a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>  private class DeleteTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span><a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    DeleteTableProcedureBiConsumer(TableName tableName) {<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>      super(tableName);<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>    }<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span><a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>    @Override<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>    String getOperationType() {<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>      return "DELETE";<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>    }<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span><a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    @Override<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    void onFinished() {<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>      connection.getLocator().clearCache(this.tableName);<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>      super.onFinished();<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    }<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>  }<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span><a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>  private static class TruncateTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span><a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>    TruncateTableProcedureBiConsumer(TableName tableName) {<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>      super(tableName);<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>    }<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span><a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>    @Override<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>    String getOperationType() {<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      return "TRUNCATE";<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>    }<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>  }<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span><a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>  private static class EnableTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span><a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>    EnableTableProcedureBiConsumer(TableName tableName) {<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>      super(tableName);<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>    }<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span><a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>    @Override<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    String getOperationType() {<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>      return "ENABLE";<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    }<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>  }<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span><a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>  private static class DisableTableProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span><a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>    DisableTableProcedureBiConsumer(TableName tableName) {<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>      super(tableName);<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>    }<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span><a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>    @Override<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>    String getOperationType() {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>      return "DISABLE";<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>    }<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>  }<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span><a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>  private static class AddColumnFamilyProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span><a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>    AddColumnFamilyProcedureBiConsumer(TableName tableName) {<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>      super(tableName);<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>    }<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span><a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>    @Override<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>    String getOperationType() {<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>      return "ADD_COLUMN_FAMILY";<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>    }<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>  }<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span><a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>  private static class DeleteColumnFamilyProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span><a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>    DeleteColumnFamilyProcedureBiConsumer(TableName tableName) {<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>      super(tableName);<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>    }<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span><a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    @Override<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    String getOperationType() {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>      return "DELETE_COLUMN_FAMILY";<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span><a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>  private static class ModifyColumnFamilyProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span><a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>    ModifyColumnFamilyProcedureBiConsumer(TableName tableName) {<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      super(tableName);<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>    }<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span><a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>    @Override<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>    String getOperationType() {<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>      return "MODIFY_COLUMN_FAMILY";<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>    }<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>  }<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span><a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>  private static class CreateNamespaceProcedureBiConsumer extends NamespaceProcedureBiConsumer {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span><a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>    CreateNamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>      super(namespaceName);<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>    }<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span><a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>    @Override<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>    String getOperationType() {<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>      return "CREATE_NAMESPACE";<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>    }<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>  }<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span><a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>  private static class DeleteNamespaceProcedureBiConsumer extends NamespaceProcedureBiConsumer {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span><a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>    DeleteNamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      super(namespaceName);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>    }<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span><a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>    @Override<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>    String getOperationType() {<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      return "DELETE_NAMESPACE";<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>    }<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>  }<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span><a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>  private static class ModifyNamespaceProcedureBiConsumer extends NamespaceProcedureBiConsumer {<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span><a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>    ModifyNamespaceProcedureBiConsumer(String namespaceName) {<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>      super(namespaceName);<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>    }<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span><a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>    @Override<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    String getOperationType() {<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>      return "MODIFY_NAMESPACE";<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>    }<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>  }<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span><a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>  private static class MergeTableRegionProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span><a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>    MergeTableRegionProcedureBiConsumer(TableName tableName) {<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      super(tableName);<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    }<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span><a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>    @Override<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    String getOperationType() {<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>      return "MERGE_REGIONS";<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>    }<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>  }<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span><a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>  private static class SplitTableRegionProcedureBiConsumer extends TableProcedureBiConsumer {<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>    SplitTableRegionProcedureBiConsumer(TableName tableName) {<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>      super(tableName);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span>    }<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span><a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>    @Override<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>    String getOperationType() {<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>      return "SPLIT_REGION";<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>    }<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>  }<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span><a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>  private static class ReplicationProcedureBiConsumer extends ProcedureBiConsumer {<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>    private final String peerId;<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>    private final Supplier&lt;String&gt; getOperation;<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span><a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>    ReplicationProcedureBiConsumer(String peerId, Supplier&lt;String&gt; getOperation) {<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>      this.peerId = peerId;<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>      this.getOperation = getOperation;<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    }<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span><a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>    String getDescription() {<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>      return "Operation: " + getOperation.get() + ", peerId: " + peerId;<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>    }<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span><a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>    @Override<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>    void onFinished() {<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>      LOG.info(getDescription() + " completed");<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>    }<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span><a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    @Override<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>    void onError(Throwable error) {<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>      LOG.info(getDescription() + " failed with " + error.getMessage());<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    }<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>  }<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span><a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>  private CompletableFuture&lt;Void&gt; waitProcedureResult(CompletableFuture&lt;Long&gt; procFuture) {<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>    addListener(procFuture, (procId, error) -&gt; {<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>      if (error != null) {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>        future.completeExceptionally(error);<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>        return;<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>      }<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>      getProcedureResult(procId, future, 0);<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>    });<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    return future;<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>  }<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span><a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>  private void getProcedureResult(long procId, CompletableFuture&lt;Void&gt; future, int retries) {<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    addListener(<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>      this.&lt;GetProcedureResultResponse&gt; newMasterCaller()<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>        .action((controller, stub) -&gt; this<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>          .&lt;GetProcedureResultRequest, GetProcedureResultResponse, GetProcedureResultResponse&gt; call(<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>            controller, stub, GetProcedureResultRequest.newBuilder().setProcId(procId).build(),<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>            (s, c, req, done) -&gt; s.getProcedureResult(c, req, done), (resp) -&gt; resp))<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>        .call(),<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>      (response, error) -&gt; {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>        if (error != null) {<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>          LOG.warn("failed to get the procedure result procId={}", procId,<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>            ConnectionUtils.translateException(error));<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>          retryTimer.newTimeout(t -&gt; getProcedureResult(procId, future, retries + 1),<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>            ConnectionUtils.getPauseTime(pauseNs, retries), TimeUnit.NANOSECONDS);<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>          return;<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>        }<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>        if (response.getState() == GetProcedureResultResponse.State.RUNNING) {<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>          retryTimer.newTimeout(t -&gt; getProcedureResult(procId, future, retries + 1),<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            ConnectionUtils.getPauseTime(pauseNs, retries), TimeUnit.NANOSECONDS);<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>          return;<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>        }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>        if (response.hasException()) {<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>          IOException ioe = ForeignExceptionUtil.toIOException(response.getException());<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>          future.completeExceptionally(ioe);<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>        } else {<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          future.complete(null);<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>        }<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>      });<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>  }<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span><a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>  private &lt;T&gt; CompletableFuture&lt;T&gt; failedFuture(Throwable error) {<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>    CompletableFuture&lt;T&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>    future.completeExceptionally(error);<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>    return future;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>  }<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span><a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>  private &lt;T&gt; boolean completeExceptionally(CompletableFuture&lt;T&gt; future, Throwable error) {<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>    if (error != null) {<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>      future.completeExceptionally(error);<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>      return true;<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>    }<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>    return false;<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>  }<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span><a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>  @Override<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>  public CompletableFuture&lt;ClusterMetrics&gt; getClusterMetrics() {<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    return getClusterMetrics(EnumSet.allOf(Option.class));<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>  }<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span><a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>  @Override<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>  public CompletableFuture&lt;ClusterMetrics&gt; getClusterMetrics(EnumSet&lt;Option&gt; options) {<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>    return this<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>        .&lt;ClusterMetrics&gt; newMasterCaller()<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>        .action(<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>          (controller, stub) -&gt; this<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>              .&lt;GetClusterStatusRequest, GetClusterStatusResponse, ClusterMetrics&gt; call(controller,<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>                stub, RequestConverter.buildGetClusterStatusRequest(options),<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>                (s, c, req, done) -&gt; s.getClusterStatus(c, req, done),<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>                resp -&gt; ClusterMetricsBuilder.toClusterMetrics(resp.getClusterStatus()))).call();<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span><a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>  @Override<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  public CompletableFuture&lt;Void&gt; shutdown() {<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    return this.&lt;Void&gt; newMasterCaller().priority(HIGH_QOS)<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      .action((controller, stub) -&gt; this.&lt;ShutdownRequest, ShutdownResponse, Void&gt; call(controller,<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>        stub, ShutdownRequest.newBuilder().build(), (s, c, req, done) -&gt; s.shutdown(c, req, done),<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        resp -&gt; null))<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>      .call();<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  }<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span><a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>  @Override<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>  public CompletableFuture&lt;Void&gt; stopMaster() {<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>    return this.&lt;Void&gt; newMasterCaller().priority(HIGH_QOS)<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>      .action((controller, stub) -&gt; this.&lt;StopMasterRequest, StopMasterResponse, Void&gt; call(<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>        controller, stub, StopMasterRequest.newBuilder().build(),<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        (s, c, req, done) -&gt; s.stopMaster(c, req, done), resp -&gt; null))<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>      .call();<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>  }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span><a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>  @Override<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>  public CompletableFuture&lt;Void&gt; stopRegionServer(ServerName serverName) {<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    StopServerRequest request = RequestConverter<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>      .buildStopServerRequest("Called by admin client " + this.connection.toString());<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>    return this.&lt;Void&gt; newAdminCaller().priority(HIGH_QOS)<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>      .action((controller, stub) -&gt; this.&lt;StopServerRequest, StopServerResponse, Void&gt; adminCall(<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>        controller, stub, request, (s, c, req, done) -&gt; s.stopServer(controller, req, done),<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>        resp -&gt; null))<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      .serverName(serverName).call();<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span><a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>  @Override<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>  public CompletableFuture&lt;Void&gt; updateConfiguration(ServerName serverName) {<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>    return this<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>        .&lt;Void&gt; newAdminCaller()<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>        .action(<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>          (controller, stub) -&gt; this<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>              .&lt;UpdateConfigurationRequest, UpdateConfigurationResponse, Void&gt; adminCall(<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>                controller, stub, UpdateConfigurationRequest.getDefaultInstance(),<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>                (s, c, req, done) -&gt; s.updateConfiguration(controller, req, done), resp -&gt; null))<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>        .serverName(serverName).call();<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>  }<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span><a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>  @Override<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>  public CompletableFuture&lt;Void&gt; updateConfiguration() {<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    addListener(<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>      getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS, Option.MASTER, Option.BACKUP_MASTERS)),<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>      (status, err) -&gt; {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>        if (err != null) {<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>          future.completeExceptionally(err);<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        } else {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>          List&lt;CompletableFuture&lt;Void&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>          status.getLiveServerMetrics().keySet()<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>            .forEach(server -&gt; futures.add(updateConfiguration(server)));<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>          futures.add(updateConfiguration(status.getMasterName()));<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>          status.getBackupMasterNames().forEach(master -&gt; futures.add(updateConfiguration(master)));<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>          addListener(<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>            CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>            (result, err2) -&gt; {<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>              if (err2 != null) {<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>                future.completeExceptionally(err2);<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>              } else {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>                future.complete(result);<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>              }<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>            });<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>        }<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>      });<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    return future;<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span><a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  @Override<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>  public CompletableFuture&lt;Void&gt; rollWALWriter(ServerName serverName) {<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    return this<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>        .&lt;Void&gt; newAdminCaller()<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>        .action(<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>          (controller, stub) -&gt; this.&lt;RollWALWriterRequest, RollWALWriterResponse, Void&gt; adminCall(<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>            controller, stub, RequestConverter.buildRollWALWriterRequest(),<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>            (s, c, req, done) -&gt; s.rollWALWriter(controller, req, done), resp -&gt; null))<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>        .serverName(serverName).call();<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span><a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>  @Override<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>  public CompletableFuture&lt;Void&gt; clearCompactionQueues(ServerName serverName, Set&lt;String&gt; queues) {<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>    return this<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>        .&lt;Void&gt; newAdminCaller()<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>        .action(<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>          (controller, stub) -&gt; this<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>              .&lt;ClearCompactionQueuesRequest, ClearCompactionQueuesResponse, Void&gt; adminCall(<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>                controller, stub, RequestConverter.buildClearCompactionQueuesRequest(queues), (s,<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>                    c, req, done) -&gt; s.clearCompactionQueues(controller, req, done), resp -&gt; null))<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>        .serverName(serverName).call();<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>  }<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span><a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>  @Override<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>  public CompletableFuture&lt;List&lt;SecurityCapability&gt;&gt; getSecurityCapabilities() {<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>    return this<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        .&lt;List&lt;SecurityCapability&gt;&gt; newMasterCaller()<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>        .action(<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>          (controller, stub) -&gt; this<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>              .&lt;SecurityCapabilitiesRequest, SecurityCapabilitiesResponse, List&lt;SecurityCapability&gt;&gt; call(<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>                controller, stub, SecurityCapabilitiesRequest.newBuilder().build(), (s, c, req,<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>                    done) -&gt; s.getSecurityCapabilities(c, req, done), (resp) -&gt; ProtobufUtil<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>                    .toSecurityCapabilityList(resp.getCapabilitiesList()))).call();<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>  }<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span><a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>  @Override<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>  public CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(ServerName serverName) {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>    return getRegionMetrics(GetRegionLoadRequest.newBuilder().build(), serverName);<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>  }<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span><a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  @Override<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>  public CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(ServerName serverName,<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>      TableName tableName) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>    Preconditions.checkNotNull(tableName,<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>      "tableName is null. If you don't specify a tableName, use getRegionLoads() instead");<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    return getRegionMetrics(RequestConverter.buildGetRegionLoadRequest(tableName), serverName);<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>  }<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span><a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>  private CompletableFuture&lt;List&lt;RegionMetrics&gt;&gt; getRegionMetrics(GetRegionLoadRequest request,<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>      ServerName serverName) {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>    return this.&lt;List&lt;RegionMetrics&gt;&gt; newAdminCaller()<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>        .action((controller, stub) -&gt; this<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>            .&lt;GetRegionLoadRequest, GetRegionLoadResponse, List&lt;RegionMetrics&gt;&gt;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>              adminCall(controller, stub, request, (s, c, req, done) -&gt;<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>                s.getRegionLoad(controller, req, done), RegionMetricsBuilder::toRegionMetrics))<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>        .serverName(serverName).call();<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  }<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span><a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>  @Override<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>  public CompletableFuture&lt;Boolean&gt; isMasterInMaintenanceMode() {<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>    return this<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>        .action(<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>          (controller, stub) -&gt; this<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>              .&lt;IsInMaintenanceModeRequest, IsInMaintenanceModeResponse, Boolean&gt; call(controller,<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>                stub, IsInMaintenanceModeRequest.newBuilder().build(),<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>                (s, c, req, done) -&gt; s.isMasterInMaintenanceMode(c, req, done),<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>                resp -&gt; resp.getInMaintenanceMode())).call();<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span><a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>  @Override<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>  public CompletableFuture&lt;CompactionState&gt; getCompactionState(TableName tableName,<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>      CompactType compactType) {<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>    CompletableFuture&lt;CompactionState&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span><a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>    switch (compactType) {<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>      case MOB:<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>        addListener(connection.registry.getMasterAddress(), (serverName, err) -&gt; {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>          if (err != null) {<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>            future.completeExceptionally(err);<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>            return;<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>          }<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>          RegionInfo regionInfo = RegionInfo.createMobRegionInfo(tableName);<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span><a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>          addListener(this.&lt;GetRegionInfoResponse&gt; newAdminCaller().serverName(serverName)<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>            .action((controller, stub) -&gt; this<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>              .&lt;GetRegionInfoRequest, GetRegionInfoResponse, GetRegionInfoResponse&gt; adminCall(<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>                controller, stub,<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>                RequestConverter.buildGetRegionInfoRequest(regionInfo.getRegionName(), true),<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>                (s, c, req, done) -&gt; s.getRegionInfo(controller, req, done), resp -&gt; resp))<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>            .call(), (resp2, err2) -&gt; {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>              if (err2 != null) {<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>                future.completeExceptionally(err2);<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>              } else {<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>                if (resp2.hasCompactionState()) {<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>                  future.complete(ProtobufUtil.createCompactionState(resp2.getCompactionState()));<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>                } else {<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>                  future.complete(CompactionState.NONE);<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>                }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>              }<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>            });<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>        });<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>        break;<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>      case NORMAL:<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>        addListener(getTableHRegionLocations(tableName), (locations, err) -&gt; {<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>          if (err != null) {<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>            future.completeExceptionally(err);<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>            return;<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>          }<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>          List&lt;CompactionState&gt; regionStates = new ArrayList&lt;&gt;();<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>          List&lt;CompletableFuture&lt;CompactionState&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>          locations.stream().filter(loc -&gt; loc.getServerName() != null)<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>            .filter(loc -&gt; loc.getRegion() != null).filter(loc -&gt; !loc.getRegion().isOffline())<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>            .map(loc -&gt; loc.getRegion().getRegionName()).forEach(region -&gt; {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>              futures.add(getCompactionStateForRegion(region).whenComplete((regionState, err2) -&gt; {<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>                // If any region compaction state is MAJOR_AND_MINOR<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>                // the table compaction state is MAJOR_AND_MINOR, too.<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>                if (err2 != null) {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>                  future.completeExceptionally(unwrapCompletionException(err2));<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>                } else if (regionState == CompactionState.MAJOR_AND_MINOR) {<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>                  future.complete(regionState);<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>                } else {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>                  regionStates.add(regionState);<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>                }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>              }));<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>            });<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>          addListener(<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>            CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>            (ret, err3) -&gt; {<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>              // If future not completed, check all regions's compaction state<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>              if (!future.isCompletedExceptionally() &amp;&amp; !future.isDone()) {<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>                CompactionState state = CompactionState.NONE;<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>                for (CompactionState regionState : regionStates) {<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>                  switch (regionState) {<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>                    case MAJOR:<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>                      if (state == CompactionState.MINOR) {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>                        future.complete(CompactionState.MAJOR_AND_MINOR);<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>                      } else {<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>                        state = CompactionState.MAJOR;<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>                      }<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>                      break;<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>                    case MINOR:<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>                      if (state == CompactionState.MAJOR) {<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>                        future.complete(CompactionState.MAJOR_AND_MINOR);<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>                      } else {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>                        state = CompactionState.MINOR;<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>                      }<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>                      break;<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>                    case NONE:<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>                    default:<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>                  }<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>                  if (!future.isDone()) {<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>                    future.complete(state);<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>                  }<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>                }<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>              }<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>            });<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>        });<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>        break;<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>      default:<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>        throw new IllegalArgumentException("Unknown compactType: " + compactType);<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    }<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span><a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>    return future;<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  }<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span><a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>  @Override<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  public CompletableFuture&lt;CompactionState&gt; getCompactionStateForRegion(byte[] regionName) {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    CompletableFuture&lt;CompactionState&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>      if (err != null) {<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>        future.completeExceptionally(err);<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>        return;<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>      }<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>      ServerName serverName = location.getServerName();<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>      if (serverName == null) {<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>        future<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>        return;<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>      }<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>      addListener(<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>        this.&lt;GetRegionInfoResponse&gt; newAdminCaller()<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>          .action((controller, stub) -&gt; this<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>            .&lt;GetRegionInfoRequest, GetRegionInfoResponse, GetRegionInfoResponse&gt; adminCall(<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>              controller, stub,<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>              RequestConverter.buildGetRegionInfoRequest(location.getRegion().getRegionName(),<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>                true),<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>              (s, c, req, done) -&gt; s.getRegionInfo(controller, req, done), resp -&gt; resp))<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>          .serverName(serverName).call(),<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>        (resp2, err2) -&gt; {<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>          if (err2 != null) {<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>            future.completeExceptionally(err2);<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>          } else {<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>            if (resp2.hasCompactionState()) {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>              future.complete(ProtobufUtil.createCompactionState(resp2.getCompactionState()));<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>            } else {<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>              future.complete(CompactionState.NONE);<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>            }<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>          }<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>        });<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>    });<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>    return future;<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>  }<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span><a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>  @Override<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  public CompletableFuture&lt;Optional&lt;Long&gt;&gt; getLastMajorCompactionTimestamp(TableName tableName) {<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>    MajorCompactionTimestampRequest request =<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>        MajorCompactionTimestampRequest.newBuilder()<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>            .setTableName(ProtobufUtil.toProtoTableName(tableName)).build();<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>    return this<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>        .&lt;Optional&lt;Long&gt;&gt; newMasterCaller()<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>        .action(<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>          (controller, stub) -&gt; this<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>              .&lt;MajorCompactionTimestampRequest, MajorCompactionTimestampResponse, Optional&lt;Long&gt;&gt; call(<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>                controller, stub, request,<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>                (s, c, req, done) -&gt; s.getLastMajorCompactionTimestamp(c, req, done),<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>                ProtobufUtil::toOptionalTimestamp)).call();<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  }<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span><a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>  @Override<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  public CompletableFuture&lt;Optional&lt;Long&gt;&gt; getLastMajorCompactionTimestampForRegion(<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>      byte[] regionName) {<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>    CompletableFuture&lt;Optional&lt;Long&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    // regionName may be a full region name or encoded region name, so getRegionInfo(byte[]) first<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>    addListener(getRegionInfo(regionName), (region, err) -&gt; {<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>      if (err != null) {<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>        future.completeExceptionally(err);<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>        return;<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>      }<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>      MajorCompactionTimestampForRegionRequest.Builder builder =<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>        MajorCompactionTimestampForRegionRequest.newBuilder();<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>      builder.setRegion(<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>        RequestConverter.buildRegionSpecifier(RegionSpecifierType.REGION_NAME, regionName));<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>      addListener(this.&lt;Optional&lt;Long&gt;&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>        .&lt;MajorCompactionTimestampForRegionRequest,<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>        MajorCompactionTimestampResponse, Optional&lt;Long&gt;&gt; call(<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>          controller, stub, builder.build(),<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>          (s, c, req, done) -&gt; s.getLastMajorCompactionTimestampForRegion(c, req, done),<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>          ProtobufUtil::toOptionalTimestamp))<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>        .call(), (timestamp, err2) -&gt; {<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>          if (err2 != null) {<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>            future.completeExceptionally(err2);<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>          } else {<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>            future.complete(timestamp);<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>          }<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>        });<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>    });<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    return future;<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>  }<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span><a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>  @Override<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>  public CompletableFuture&lt;Map&lt;ServerName, Boolean&gt;&gt; compactionSwitch(boolean switchState,<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>      List&lt;String&gt; serverNamesList) {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    CompletableFuture&lt;Map&lt;ServerName, Boolean&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    addListener(getRegionServerList(serverNamesList), (serverNames, err) -&gt; {<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>      if (err != null) {<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>        future.completeExceptionally(err);<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>        return;<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>      }<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>      // Accessed by multiple threads.<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>      Map&lt;ServerName, Boolean&gt; serverStates = new ConcurrentHashMap&lt;&gt;(serverNames.size());<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>      List&lt;CompletableFuture&lt;Boolean&gt;&gt; futures = new ArrayList&lt;&gt;(serverNames.size());<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>      serverNames.stream().forEach(serverName -&gt; {<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>        futures.add(switchCompact(serverName, switchState).whenComplete((serverState, err2) -&gt; {<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>          if (err2 != null) {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>            future.completeExceptionally(unwrapCompletionException(err2));<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>          } else {<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>            serverStates.put(serverName, serverState);<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>          }<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>        }));<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>      });<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>      addListener(<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>        CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>        (ret, err3) -&gt; {<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>          if (!future.isCompletedExceptionally()) {<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>            if (err3 != null) {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>              future.completeExceptionally(err3);<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>            } else {<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>              future.complete(serverStates);<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>            }<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>          }<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>        });<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>    });<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>    return future;<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>  }<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span><a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  private CompletableFuture&lt;List&lt;ServerName&gt;&gt; getRegionServerList(List&lt;String&gt; serverNamesList) {<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>    CompletableFuture&lt;List&lt;ServerName&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>    if (serverNamesList.isEmpty()) {<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>      CompletableFuture&lt;ClusterMetrics&gt; clusterMetricsCompletableFuture =<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>        getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS));<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      addListener(clusterMetricsCompletableFuture, (clusterMetrics, err) -&gt; {<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>        if (err != null) {<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>          future.completeExceptionally(err);<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>        } else {<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>          future.complete(new ArrayList&lt;&gt;(clusterMetrics.getLiveServerMetrics().keySet()));<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>        }<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      });<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>      return future;<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    } else {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>      List&lt;ServerName&gt; serverList = new ArrayList&lt;&gt;();<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>      for (String regionServerName : serverNamesList) {<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>        ServerName serverName = null;<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>        try {<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>          serverName = ServerName.valueOf(regionServerName);<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        } catch (Exception e) {<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>          future.completeExceptionally(<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>            new IllegalArgumentException(String.format("ServerName format: %s", regionServerName)));<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>        }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>        if (serverName == null) {<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>          future.completeExceptionally(<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>            new IllegalArgumentException(String.format("Null ServerName: %s", regionServerName)));<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>        }<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>      }<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      future.complete(serverList);<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>    }<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    return future;<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span><a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  private CompletableFuture&lt;Boolean&gt; switchCompact(ServerName serverName, boolean onOrOff) {<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>    return this<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>        .&lt;Boolean&gt;newAdminCaller()<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>        .serverName(serverName)<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>        .action((controller, stub) -&gt; this.&lt;CompactionSwitchRequest, CompactionSwitchResponse,<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>            Boolean&gt;adminCall(controller, stub,<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>            CompactionSwitchRequest.newBuilder().setEnabled(onOrOff).build(), (s, c, req, done) -&gt;<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>            s.compactionSwitch(c, req, done), resp -&gt; resp.getPrevState())).call();<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>  }<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span><a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>  @Override<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>  public CompletableFuture&lt;Boolean&gt; balancerSwitch(boolean on, boolean drainRITs) {<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      .action((controller, stub) -&gt; this<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        .&lt;SetBalancerRunningRequest, SetBalancerRunningResponse, Boolean&gt; call(controller, stub,<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>          RequestConverter.buildSetBalancerRunningRequest(on, drainRITs),<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>          (s, c, req, done) -&gt; s.setBalancerRunning(c, req, done),<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>          (resp) -&gt; resp.getPrevBalanceValue()))<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>      .call();<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>  }<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span><a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>  @Override<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>  public CompletableFuture&lt;Boolean&gt; balance(boolean forcible) {<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>    return this<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>        .action(<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>          (controller, stub) -&gt; this.&lt;BalanceRequest, BalanceResponse, Boolean&gt; call(controller,<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>            stub, RequestConverter.buildBalanceRequest(forcible),<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>            (s, c, req, done) -&gt; s.balance(c, req, done), (resp) -&gt; resp.getBalancerRan())).call();<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>  }<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span><a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>  @Override<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>  public CompletableFuture&lt;Boolean&gt; isBalancerEnabled() {<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    return this<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>        .action(<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>          (controller, stub) -&gt; this.&lt;IsBalancerEnabledRequest, IsBalancerEnabledResponse, Boolean&gt; call(<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>            controller, stub, RequestConverter.buildIsBalancerEnabledRequest(),<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>            (s, c, req, done) -&gt; s.isBalancerEnabled(c, req, done), (resp) -&gt; resp.getEnabled()))<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>        .call();<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>  }<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span><a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>  @Override<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  public CompletableFuture&lt;Boolean&gt; normalizerSwitch(boolean on) {<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>    return this<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>        .action(<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>          (controller, stub) -&gt; this<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>              .&lt;SetNormalizerRunningRequest, SetNormalizerRunningResponse, Boolean&gt; call(<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>                controller, stub, RequestConverter.buildSetNormalizerRunningRequest(on), (s, c,<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>                    req, done) -&gt; s.setNormalizerRunning(c, req, done), (resp) -&gt; resp<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>                    .getPrevNormalizerValue())).call();<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>  }<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span><a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>  @Override<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>  public CompletableFuture&lt;Boolean&gt; isNormalizerEnabled() {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>    return this<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>        .action(<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>          (controller, stub) -&gt; this<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>              .&lt;IsNormalizerEnabledRequest, IsNormalizerEnabledResponse, Boolean&gt; call(controller,<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>                stub, RequestConverter.buildIsNormalizerEnabledRequest(),<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span>                (s, c, req, done) -&gt; s.isNormalizerEnabled(c, req, done),<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>                (resp) -&gt; resp.getEnabled())).call();<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>  }<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span><a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>  @Override<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>  public CompletableFuture&lt;Boolean&gt; normalize() {<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>    return this<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>        .action(<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>          (controller, stub) -&gt; this.&lt;NormalizeRequest, NormalizeResponse, Boolean&gt; call(<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>            controller, stub, RequestConverter.buildNormalizeRequest(),<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>            (s, c, req, done) -&gt; s.normalize(c, req, done), (resp) -&gt; resp.getNormalizerRan()))<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>        .call();<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>  }<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span><a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>  @Override<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>  public CompletableFuture&lt;Boolean&gt; cleanerChoreSwitch(boolean enabled) {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>    return this<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>        .action(<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>          (controller, stub) -&gt; this<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>              .&lt;SetCleanerChoreRunningRequest, SetCleanerChoreRunningResponse, Boolean&gt; call(<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>                controller, stub, RequestConverter.buildSetCleanerChoreRunningRequest(enabled), (s,<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>                    c, req, done) -&gt; s.setCleanerChoreRunning(c, req, done), (resp) -&gt; resp<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>                    .getPrevValue())).call();<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>  }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span><a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>  @Override<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>  public CompletableFuture&lt;Boolean&gt; isCleanerChoreEnabled() {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>    return this<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>        .action(<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>          (controller, stub) -&gt; this<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>              .&lt;IsCleanerChoreEnabledRequest, IsCleanerChoreEnabledResponse, Boolean&gt; call(<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>                controller, stub, RequestConverter.buildIsCleanerChoreEnabledRequest(), (s, c, req,<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>                    done) -&gt; s.isCleanerChoreEnabled(c, req, done), (resp) -&gt; resp.getValue()))<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>        .call();<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>  }<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span><a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>  @Override<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>  public CompletableFuture&lt;Boolean&gt; runCleanerChore() {<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>    return this<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>        .action(<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>          (controller, stub) -&gt; this<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>              .&lt;RunCleanerChoreRequest, RunCleanerChoreResponse, Boolean&gt; call(controller, stub,<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>                RequestConverter.buildRunCleanerChoreRequest(),<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>                (s, c, req, done) -&gt; s.runCleanerChore(c, req, done),<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>                (resp) -&gt; resp.getCleanerChoreRan())).call();<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>  }<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span><a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>  @Override<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>  public CompletableFuture&lt;Boolean&gt; catalogJanitorSwitch(boolean enabled) {<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>    return this<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>        .action(<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>          (controller, stub) -&gt; this<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>              .&lt;EnableCatalogJanitorRequest, EnableCatalogJanitorResponse, Boolean&gt; call(<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>                controller, stub, RequestConverter.buildEnableCatalogJanitorRequest(enabled), (s,<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>                    c, req, done) -&gt; s.enableCatalogJanitor(c, req, done), (resp) -&gt; resp<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>                    .getPrevValue())).call();<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>  }<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span><a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>  @Override<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>  public CompletableFuture&lt;Boolean&gt; isCatalogJanitorEnabled() {<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    return this<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>        .action(<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>          (controller, stub) -&gt; this<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>              .&lt;IsCatalogJanitorEnabledRequest, IsCatalogJanitorEnabledResponse, Boolean&gt; call(<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>                controller, stub, RequestConverter.buildIsCatalogJanitorEnabledRequest(), (s, c,<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>                    req, done) -&gt; s.isCatalogJanitorEnabled(c, req, done), (resp) -&gt; resp<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>                    .getValue())).call();<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>  }<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span><a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>  @Override<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>  public CompletableFuture&lt;Integer&gt; runCatalogJanitor() {<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>    return this<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>        .&lt;Integer&gt; newMasterCaller()<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>        .action(<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>          (controller, stub) -&gt; this.&lt;RunCatalogScanRequest, RunCatalogScanResponse, Integer&gt; call(<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>            controller, stub, RequestConverter.buildCatalogScanRequest(),<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>            (s, c, req, done) -&gt; s.runCatalogScan(c, req, done), (resp) -&gt; resp.getScanResult()))<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        .call();<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>  }<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span><a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>  @Override<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>  public &lt;S, R&gt; CompletableFuture&lt;R&gt; coprocessorService(Function&lt;RpcChannel, S&gt; stubMaker,<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      ServiceCaller&lt;S, R&gt; callable) {<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>    MasterCoprocessorRpcChannelImpl channel =<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>        new MasterCoprocessorRpcChannelImpl(this.&lt;Message&gt; newMasterCaller());<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>    S stub = stubMaker.apply(channel);<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>    CompletableFuture&lt;R&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>    ClientCoprocessorRpcController controller = new ClientCoprocessorRpcController();<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>    callable.call(stub, controller, resp -&gt; {<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>      if (controller.failed()) {<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>        future.completeExceptionally(controller.getFailed());<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>      } else {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>        future.complete(resp);<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>      }<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>    });<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>    return future;<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>  }<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span><a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>  @Override<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>  public &lt;S, R&gt; CompletableFuture&lt;R&gt; coprocessorService(Function&lt;RpcChannel, S&gt; stubMaker,<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>      ServiceCaller&lt;S, R&gt; callable, ServerName serverName) {<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>    RegionServerCoprocessorRpcChannelImpl channel =<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>        new RegionServerCoprocessorRpcChannelImpl(this.&lt;Message&gt; newServerCaller().serverName(<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>          serverName));<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>    S stub = stubMaker.apply(channel);<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>    CompletableFuture&lt;R&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>    ClientCoprocessorRpcController controller = new ClientCoprocessorRpcController();<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>    callable.call(stub, controller, resp -&gt; {<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>      if (controller.failed()) {<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>        future.completeExceptionally(controller.getFailed());<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>      } else {<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>        future.complete(resp);<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      }<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    });<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    return future;<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>  }<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span><a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>  @Override<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>  public CompletableFuture&lt;List&lt;ServerName&gt;&gt; clearDeadServers(List&lt;ServerName&gt; servers) {<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>    return this.&lt;List&lt;ServerName&gt;&gt; newMasterCaller()<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>      .action((controller, stub) -&gt; this<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>        .&lt;ClearDeadServersRequest, ClearDeadServersResponse, List&lt;ServerName&gt;&gt; call(<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>          controller, stub, RequestConverter.buildClearDeadServersRequest(servers),<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>          (s, c, req, done) -&gt; s.clearDeadServers(c, req, done),<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>          (resp) -&gt; ProtobufUtil.toServerNameList(resp.getServerNameList())))<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>      .call();<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>  }<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span><a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>  private &lt;T&gt; ServerRequestCallerBuilder&lt;T&gt; newServerCaller() {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>    return this.connection.callerFactory.&lt;T&gt; serverRequest()<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>        .rpcTimeout(rpcTimeoutNs, TimeUnit.NANOSECONDS)<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>        .operationTimeout(operationTimeoutNs, TimeUnit.NANOSECONDS)<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>        .pause(pauseNs, TimeUnit.NANOSECONDS).maxAttempts(maxAttempts)<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>        .startLogErrorsCnt(startLogErrorsCnt);<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>  }<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span><a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>  @Override<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>  public CompletableFuture&lt;Void&gt; enableTableReplication(TableName tableName) {<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>    if (tableName == null) {<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>      return failedFuture(new IllegalArgumentException("Table name is null"));<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>    }<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>    addListener(tableExists(tableName), (exist, err) -&gt; {<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      if (err != null) {<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>        future.completeExceptionally(err);<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>        return;<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>      }<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>      if (!exist) {<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>        future.completeExceptionally(new TableNotFoundException(<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>          "Table '" + tableName.getNameAsString() + "' does not exists."));<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>        return;<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>      }<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>      addListener(getTableSplits(tableName), (splits, err1) -&gt; {<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>        if (err1 != null) {<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>          future.completeExceptionally(err1);<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>        } else {<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>          addListener(checkAndSyncTableToPeerClusters(tableName, splits), (result, err2) -&gt; {<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>            if (err2 != null) {<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>              future.completeExceptionally(err2);<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>            } else {<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>              addListener(setTableReplication(tableName, true), (result3, err3) -&gt; {<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>                if (err3 != null) {<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>                  future.completeExceptionally(err3);<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>                } else {<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>                  future.complete(result3);<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>                }<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>              });<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>            }<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>          });<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>        }<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>      });<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>    });<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>    return future;<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>  }<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span><a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>  @Override<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>  public CompletableFuture&lt;Void&gt; disableTableReplication(TableName tableName) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>    if (tableName == null) {<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>      return failedFuture(new IllegalArgumentException("Table name is null"));<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>    }<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>    addListener(tableExists(tableName), (exist, err) -&gt; {<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>      if (err != null) {<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>        future.completeExceptionally(err);<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>        return;<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>      }<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>      if (!exist) {<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>        future.completeExceptionally(new TableNotFoundException(<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>          "Table '" + tableName.getNameAsString() + "' does not exists."));<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>        return;<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>      }<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>      addListener(setTableReplication(tableName, false), (result, err2) -&gt; {<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>        if (err2 != null) {<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span>          future.completeExceptionally(err2);<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>        } else {<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>          future.complete(result);<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>        }<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>      });<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>    });<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>    return future;<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>  }<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span><a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>  private CompletableFuture&lt;byte[][]&gt; getTableSplits(TableName tableName) {<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    CompletableFuture&lt;byte[][]&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    addListener(<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      getRegions(tableName).thenApply(regions -&gt; regions.stream()<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>        .filter(RegionReplicaUtil::isDefaultReplica).collect(Collectors.toList())),<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>      (regions, err2) -&gt; {<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>        if (err2 != null) {<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>          future.completeExceptionally(err2);<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>          return;<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>        }<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>        if (regions.size() == 1) {<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>          future.complete(null);<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>        } else {<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>          byte[][] splits = new byte[regions.size() - 1][];<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>          for (int i = 1; i &lt; regions.size(); i++) {<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>            splits[i - 1] = regions.get(i).getStartKey();<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>          }<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>          future.complete(splits);<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>        }<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>      });<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>    return future;<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>  }<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span><a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>  /**<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>   * Connect to peer and check the table descriptor on peer:<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>   * &lt;ol&gt;<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>   * &lt;li&gt;Create the same table on peer when not exist.&lt;/li&gt;<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>   * &lt;li&gt;Throw an exception if the table already has replication enabled on any of the column<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>   * families.&lt;/li&gt;<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>   * &lt;li&gt;Throw an exception if the table exists on peer cluster but descriptors are not same.&lt;/li&gt;<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>   * &lt;/ol&gt;<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>   * @param tableName name of the table to sync to the peer<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>   * @param splits table split keys<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>   */<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>  private CompletableFuture&lt;Void&gt; checkAndSyncTableToPeerClusters(TableName tableName,<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>      byte[][] splits) {<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>    addListener(listReplicationPeers(), (peers, err) -&gt; {<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>      if (err != null) {<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>        future.completeExceptionally(err);<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>        return;<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>      }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>      if (peers == null || peers.size() &lt;= 0) {<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>        future.completeExceptionally(<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>          new IllegalArgumentException("Found no peer cluster for replication."));<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>        return;<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>      }<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>      peers.stream().filter(peer -&gt; peer.getPeerConfig().needToReplicate(tableName))<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>        .forEach(peer -&gt; {<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>          futures.add(trySyncTableToPeerCluster(tableName, splits, peer));<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>        });<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>      addListener(<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>        CompletableFuture.allOf(futures.toArray(new CompletableFuture&lt;?&gt;[futures.size()])),<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>        (result, err2) -&gt; {<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>          if (err2 != null) {<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>            future.completeExceptionally(err2);<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>          } else {<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>            future.complete(result);<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          }<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>        });<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>    });<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>    return future;<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>  }<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span><a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>  private CompletableFuture&lt;Void&gt; trySyncTableToPeerCluster(TableName tableName, byte[][] splits,<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>      ReplicationPeerDescription peer) {<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>    Configuration peerConf = null;<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    try {<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>      peerConf =<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>        ReplicationPeerConfigUtil.getPeerClusterConfiguration(connection.getConfiguration(), peer);<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>    } catch (IOException e) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>      return failedFuture(e);<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>    }<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>    addListener(ConnectionFactory.createAsyncConnection(peerConf), (conn, err) -&gt; {<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>      if (err != null) {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>        future.completeExceptionally(err);<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>        return;<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>      }<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      addListener(getDescriptor(tableName), (tableDesc, err1) -&gt; {<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>        if (err1 != null) {<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>          future.completeExceptionally(err1);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>          return;<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>        }<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>        AsyncAdmin peerAdmin = conn.getAdmin();<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>        addListener(peerAdmin.tableExists(tableName), (exist, err2) -&gt; {<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>          if (err2 != null) {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>            future.completeExceptionally(err2);<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>            return;<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>          }<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>          if (!exist) {<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>            CompletableFuture&lt;Void&gt; createTableFuture = null;<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>            if (splits == null) {<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>              createTableFuture = peerAdmin.createTable(tableDesc);<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>            } else {<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>              createTableFuture = peerAdmin.createTable(tableDesc, splits);<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>            }<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>            addListener(createTableFuture, (result, err3) -&gt; {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>              if (err3 != null) {<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>                future.completeExceptionally(err3);<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>              } else {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>                future.complete(result);<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>              }<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>            });<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>          } else {<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>            addListener(compareTableWithPeerCluster(tableName, tableDesc, peer, peerAdmin),<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>              (result, err4) -&gt; {<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>                if (err4 != null) {<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>                  future.completeExceptionally(err4);<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>                } else {<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>                  future.complete(result);<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>                }<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>              });<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>          }<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>        });<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>      });<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>    });<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>    return future;<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>  }<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span><a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>  private CompletableFuture&lt;Void&gt; compareTableWithPeerCluster(TableName tableName,<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>      TableDescriptor tableDesc, ReplicationPeerDescription peer, AsyncAdmin peerAdmin) {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>    addListener(peerAdmin.getDescriptor(tableName), (peerTableDesc, err) -&gt; {<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>      if (err != null) {<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>        future.completeExceptionally(err);<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>        return;<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>      }<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>      if (peerTableDesc == null) {<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>        future.completeExceptionally(<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>          new IllegalArgumentException("Failed to get table descriptor for table " +<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>            tableName.getNameAsString() + " from peer cluster " + peer.getPeerId()));<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>        return;<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>      }<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>      if (TableDescriptor.COMPARATOR_IGNORE_REPLICATION.compare(peerTableDesc, tableDesc) != 0) {<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>        future.completeExceptionally(new IllegalArgumentException(<a name="line.3556"></a>
+<span class="sourceLineNo">3557</span>          "Table " + tableName.getNameAsString() + " exists in peer cluster " + peer.getPeerId() +<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>            ", but the table descriptors are not same when compared with source cluster." +<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>            " Thus can not enable the table's replication switch."));<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>        return;<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>      }<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>      future.complete(null);<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>    });<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>    return future;<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>  }<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span><a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>  /**<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>   * Set the table's replication switch if the table's replication switch is already not set.<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>   * @param tableName name of the table<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>   * @param enableRep is replication switch enable or disable<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>   */<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>  private CompletableFuture&lt;Void&gt; setTableReplication(TableName tableName, boolean enableRep) {<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>    addListener(getDescriptor(tableName), (tableDesc, err) -&gt; {<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>      if (err != null) {<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>        future.completeExceptionally(err);<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>        return;<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>      }<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>      if (!tableDesc.matchReplicationScope(enableRep)) {<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>        int scope =<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>          enableRep ? HConstants.REPLICATION_SCOPE_GLOBAL : HConstants.REPLICATION_SCOPE_LOCAL;<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>        TableDescriptor newTableDesc =<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>          TableDescriptorBuilder.newBuilder(tableDesc).setReplicationScope(scope).build();<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>        addListener(modifyTable(newTableDesc), (result, err2) -&gt; {<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>          if (err2 != null) {<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>            future.completeExceptionally(err2);<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>          } else {<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>            future.complete(result);<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>          }<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>        });<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      } else {<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        future.complete(null);<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>      }<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>    });<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    return future;<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>  }<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span><a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  @Override<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span>  public CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(TableName tableName) {<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>    CompletableFuture&lt;CacheEvictionStats&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>    addListener(getTableHRegionLocations(tableName), (locations, err) -&gt; {<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>      if (err != null) {<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>        future.completeExceptionally(err);<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>        return;<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span>      }<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; regionInfoByServerName =<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>        locations.stream().filter(l -&gt; l.getRegion() != null)<a name="line.3607"></a>
+<span class="sourceLineNo">3608</span>          .filter(l -&gt; !l.getRegion().isOffline()).filter(l -&gt; l.getServerName() != null)<a name="line.3608"></a>
+<span class="sourceLineNo">3609</span>          .collect(Collectors.groupingBy(l -&gt; l.getServerName(),<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span>            Collectors.mapping(l -&gt; l.getRegion(), Collectors.toList())));<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>      List&lt;CompletableFuture&lt;CacheEvictionStats&gt;&gt; futures = new ArrayList&lt;&gt;();<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>      CacheEvictionStatsAggregator aggregator = new CacheEvictionStatsAggregator();<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : regionInfoByServerName.entrySet()) {<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>        futures<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>          .add(clearBlockCache(entry.getKey(), entry.getValue()).whenComplete((stats, err2) -&gt; {<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>            if (err2 != null) {<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>              future.completeExceptionally(unwrapCompletionException(err2));<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>            } else {<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span>              aggregator.append(stats);<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>            }<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>          }));<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>      }<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>      addListener(CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])),<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span>        (ret, err3) -&gt; {<a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>          if (err3 != null) {<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>            future.completeExceptionally(unwrapCompletionException(err3));<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>          } else {<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>            future.complete(aggregator.sum());<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>          }<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>        });<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>    });<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>    return future;<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>  }<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span><a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>  @Override<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>  public CompletableFuture&lt;Void&gt; cloneTableSchema(TableName tableName, TableName newTableName,<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>      boolean preserveSplits) {<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>    addListener(tableExists(tableName), (exist, err) -&gt; {<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>      if (err != null) {<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>        future.completeExceptionally(err);<a name="line.3641"></a>
 <span class="sourceLineNo">3642</span>        return;<a name="line.3642"></a>
 <span class="sourceLineNo">3643</span>      }<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>      addListener(tableExists(newTableName), (exist1, err1) -&gt; {<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>        if (err1 != null) {<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>          future.completeExceptionally(err1);<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>          return;<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>        }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span>        if (exist1) {<a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>          future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3650"></a>
+<span class="sourceLineNo">3644</span>      if (!exist) {<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>        return;<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>      addListener(tableExists(newTableName), (exist1, err1) -&gt; {<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>        if (err1 != null) {<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>          future.completeExceptionally(err1);<a name="line.3650"></a>
 <span class="sourceLineNo">3651</span>          return;<a name="line.3651"></a>
 <span class="sourceLineNo">3652</span>        }<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>        addListener(getDescriptor(tableName), (tableDesc, err2) -&gt; {<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>          if (err2 != null) {<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>            future.completeExceptionally(err2);<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>            return;<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>          }<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>          TableDescriptor newTableDesc = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>          if (preserveSplits) {<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>            addListener(getTableSplits(tableName), (splits, err3) -&gt; {<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>              if (err3 != null) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>                future.completeExceptionally(err3);<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>              } else {<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>                addListener(createTable(newTableDesc, splits), (result, err4) -&gt; {<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>                  if (err4 != null) {<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>                    future.completeExceptionally(err4);<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>                  } else {<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>                    future.complete(result);<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>                  }<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>                });<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>              }<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>            });<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>          } else {<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>            addListener(createTable(newTableDesc), (result, err5) -&gt; {<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>              if (err5 != null) {<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>                future.completeExceptionally(err5);<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>              } else {<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>                future.complete(result);<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>              }<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>            });<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>          }<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>        });<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>      });<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    });<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>    return future;<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span>  }<a name="line.3686"></a>
-<span class="sourceLineNo">3687</span><a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>      .serverName(serverName).call();<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>  }<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span><a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>  @Override<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>  public CompletableFuture&lt;Boolean&gt; switchRpcThrottle(boolean enable) {<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span>    CompletableFuture&lt;Boolean&gt; future = this.&lt;Boolean&gt; newMasterCaller()<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>        .action((controller, stub) -&gt; this<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>            .&lt;SwitchRpcThrottleRequest, SwitchRpcThrottleResponse, Boolean&gt; call(controller, stub,<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>              SwitchRpcThrottleRequest.newBuilder().setRpcThrottleEnabled(enable).build(),<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>              (s, c, req, done) -&gt; s.switchRpcThrottle(c, req, done),<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>              resp -&gt; resp.getPreviousRpcThrottleEnabled()))<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>        .call();<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>    return future;<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>  }<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span><a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>  @Override<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>  public CompletableFuture&lt;Boolean&gt; isRpcThrottleEnabled() {<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span>    CompletableFuture&lt;Boolean&gt; future = this.&lt;Boolean&gt; newMasterCaller()<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>        .action((controller, stub) -&gt; this<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span>            .&lt;IsRpcThrottleEnabledRequest, IsRpcThrottleEnabledResponse, Boolean&gt; call(controller,<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>              stub, IsRpcThrottleEnabledRequest.newBuilder().build(),<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>              (s, c, req, done) -&gt; s.isRpcThrottleEnabled(c, req, done),<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>              resp -&gt; resp.getRpcThrottleEnabled()))<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>        .call();<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span>    return future;<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>  }<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span><a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>  @Override<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>  public CompletableFuture&lt;Boolean&gt; exceedThrottleQuotaSwitch(boolean enable) {<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>    CompletableFuture&lt;Boolean&gt; future = this.&lt;Boolean&gt; newMasterCaller()<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>        .action((controller, stub) -&gt; this<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>            .&lt;SwitchExceedThrottleQuotaRequest, SwitchExceedThrottleQuotaResponse, Boolean&gt; call(<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>              controller, stub,<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>              SwitchExceedThrottleQuotaRequest.newBuilder().setExceedThrottleQuotaEnabled(enable)<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>                  .build(),<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>              (s, c, req, done) -&gt; s.switchExceedThrottleQuota(c, req, done),<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>              resp -&gt; resp.getPreviousExceedThrottleQuotaEnabled()))<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>        .call();<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>    return future;<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>  }<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span><a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>  @Override<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>  public CompletableFuture&lt;Map&lt;TableName, Long&gt;&gt; getSpaceQuotaTableSizes() {<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>    return this.&lt;Map&lt;TableName, Long&gt;&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>      .&lt;GetSpaceQuotaRegionSizesRequest, GetSpaceQuotaRegionSizesResponse,<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>      Map&lt;TableName, Long&gt;&gt; call(controller, stub,<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>        RequestConverter.buildGetSpaceQuotaRegionSizesRequest(),<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span>        (s, c, req, done) -&gt; s.getSpaceQuotaRegionSizes(c, req, done),<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>        resp -&gt; resp.getSizesList().stream().collect(Collectors<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>          .toMap(sizes -&gt; ProtobufUtil.toTableName(sizes.getTableName()), RegionSizes::getSize))))<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      .call();<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>  }<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span><a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>  @Override<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>  public CompletableFuture&lt;Map&lt;TableName, SpaceQuotaSnapshot&gt;&gt; getRegionServerSpaceQuotaSnapshots(<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>      ServerName serverName) {<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>    return this.&lt;Map&lt;TableName, SpaceQuotaSnapshot&gt;&gt; newAdminCaller()<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>      .action((controller, stub) -&gt; this<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>        .&lt;GetSpaceQuotaSnapshotsRequest, GetSpaceQuotaSnapshotsResponse,<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>        Map&lt;TableName, SpaceQuotaSnapshot&gt;&gt; adminCall(controller, stub,<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>          RequestConverter.buildGetSpaceQuotaSnapshotsRequest(),<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>          (s, c, req, done) -&gt; s.getSpaceQuotaSnapshots(controller, req, done),<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>          resp -&gt; resp.getSnapshotsList().stream()<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>            .collect(Collectors.toMap(snapshot -&gt; ProtobufUtil.toTableName(snapshot.getTableName()),<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>              snapshot -&gt; SpaceQuotaSnapshot.toSpaceQuotaSnapshot(snapshot.getSnapshot())))))<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>      .serverName(serverName).call();<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>  }<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span><a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>  private CompletableFuture&lt;SpaceQuotaSnapshot&gt; getCurrentSpaceQuotaSnapshot(<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>      Converter&lt;SpaceQuotaSnapshot, GetQuotaStatesResponse&gt; converter) {<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>    return this.&lt;SpaceQuotaSnapshot&gt; newMasterCaller()<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>      .action((controller, stub) -&gt; this<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>        .&lt;GetQuotaStatesRequest, GetQuotaStatesResponse, SpaceQuotaSnapshot&gt; call(controller, stub,<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>          RequestConverter.buildGetQuotaStatesRequest(),<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>          (s, c, req, done) -&gt; s.getQuotaStates(c, req, done), converter))<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>      .call();<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>  }<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span><a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>  @Override<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>  public CompletableFuture&lt;SpaceQuotaSnapshot&gt; getCurrentSpaceQuotaSnapshot(String namespace) {<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>    return getCurrentSpaceQuotaSnapshot(resp -&gt; resp.getNsSnapshotsList().stream()<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span>      .filter(s -&gt; s.getNamespace().equals(namespace)).findFirst()<a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>      .map(s -&gt; SpaceQuotaSnapshot.toSpaceQuotaSnapshot(s.getSnapshot())).orElse(null));<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>  }<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span><a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>  @Override<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>  public CompletableFuture&lt;SpaceQuotaSnapshot&gt; getCurrentSpaceQuotaSnapshot(TableName tableName) {<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>    HBaseProtos.TableName protoTableName = ProtobufUtil.toProtoTableName(tableName);<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>    return getCurrentSpaceQuotaSnapshot(resp -&gt; resp.getTableSnapshotsList().stream()<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>      .filter(s -&gt; s.getTableName().equals(protoTableName)).findFirst()<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>      .map(s -&gt; SpaceQuotaSnapshot.toSpaceQuotaSnapshot(s.getSnapshot())).orElse(null));<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>  }<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span><a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>  @Override<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  public CompletableFuture&lt;Void&gt; grant(UserPermission userPermission,<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span>      boolean mergeExistingPermissions) {<a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>        .action((controller, stub) -&gt; this.&lt;GrantRequest, GrantResponse, Void&gt; call(controller,<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>          stub, ShadedAccessControlUtil.buildGrantRequest(userPermission, mergeExistingPermissions),<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span>          (s, c, req, done) -&gt; s.grant(c, req, done), resp -&gt; null))<a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>        .call();<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>  }<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span><a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>  @Override<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>  public CompletableFuture&lt;Void&gt; revoke(UserPermission userPermission) {<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>        .action((controller, stub) -&gt; this.&lt;RevokeRequest, RevokeResponse, Void&gt; call(controller,<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>          stub, ShadedAccessControlUtil.buildRevokeRequest(userPermission),<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>          (s, c, req, done) -&gt; s.revoke(c, req, done), resp -&gt; null))<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>        .call();<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>  }<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span><a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>  @Override<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>  public CompletableFuture&lt;List&lt;UserPermission&gt;&gt;<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>      getUserPermissions(GetUserPermissionsRequest getUserPermissionsRequest) {<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>    return this.&lt;List&lt;UserPermission&gt;&gt; newMasterCaller().action((controller,<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>        stub) -&gt; this.&lt;AccessControlProtos.GetUserPermissionsRequest, GetUserPermissionsResponse,<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>            List&lt;UserPermission&gt;&gt; call(controller, stub,<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>              ShadedAccessControlUtil.buildGetUserPermissionsRequest(getUserPermissionsRequest),<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span>              (s, c, req, done) -&gt; s.getUserPermissions(c, req, done),<a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>              resp -&gt; resp.getUserPermissionList().stream()<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>                .map(uPerm -&gt; ShadedAccessControlUtil.toUserPermission(uPerm))<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>                .collect(Collectors.toList())))<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>        .call();<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>  }<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>}<a name="line.3820"></a>
+<span class="sourceLineNo">3653</span>        if (exist1) {<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>          future.completeExceptionally(new TableExistsException(newTableName));<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>          return;<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>        }<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>        addListener(getDescriptor(tableName), (tableDesc, err2) -&gt; {<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>          if (err2 != null) {<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>            future.completeExceptionally(err2);<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>            return;<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>          }<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>          TableDescriptor newTableDesc = TableDescriptorBuilder.copy(newTableName, tableDesc);<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>          if (preserveSplits) {<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>            addListener(getTableSplits(tableName), (splits, err3) -&gt; {<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>              if (err3 != null) {<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>                future.completeExceptionally(err3);<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>              } else {<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>                addListener(<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>                  splits != null ? createTable(newTableDesc, splits) : createTable(newTableDesc),<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>                  (result, err4) -&gt; {<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>                    if (err4 != null) {<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>                      future.completeExceptionally(err4);<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>                    } else {<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>                      future.complete(result);<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>                    }<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>                  });<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>              }<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>            });<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>          } else {<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>            addListener(createTable(newTableDesc), (result, err5) -&gt; {<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>              if (err5 != null) {<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>                future.completeExceptionally(err5);<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>              } else {<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>                future.complete(result);<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>              }<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>            });<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>          }<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>        });<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>      });<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    });<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>    return future;<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span>  }<a name="line.3692"></a>
+<span class="sourceLineNo">3693</span><a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>  private CompletableFuture&lt;CacheEvictionStats&gt; clearBlockCache(ServerName serverName,<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>      List&lt;RegionInfo&gt; hris) {<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>    return this.&lt;CacheEvictionStats&gt; newAdminCaller().action((controller, stub) -&gt; this<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>      .&lt;ClearRegionBlockCacheRequest, ClearRegionBlockCacheResponse, CacheEvictionStats&gt; adminCall(<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>        controller, stub, RequestConverter.buildClearRegionBlockCacheRequest(hris),<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>        (s, c, req, done) -&gt; s.clearRegionBlockCache(controller, req, done),<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>        resp -&gt; ProtobufUtil.toCacheEvictionStats(resp.getStats())))<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>      .serverName(serverName).call();<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  }<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span><a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>  @Override<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>  public CompletableFuture&lt;Boolean&gt; switchRpcThrottle(boolean enable) {<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>    CompletableFuture&lt;Boolean&gt; future = this.&lt;Boolean&gt; newMasterCaller()<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>        .action((controller, stub) -&gt; this<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>            .&lt;SwitchRpcThrottleRequest, SwitchRpcThrottleResponse, Boolean&gt; call(controller, stub,<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>              SwitchRpcThrottleRequest.newBuilder().setRpcThrottleEnabled(enable).build(),<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>              (s, c, req, done) -&gt; s.switchRpcThrottle(c, req, done),<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>              resp -&gt; resp.getPreviousRpcThrottleEnabled()))<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>        .call();<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span>    return future;<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span><a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  public CompletableFuture&lt;Boolean&gt; isRpcThrottleEnabled() {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    CompletableFuture&lt;Boolean&gt; future = this.&lt;Boolean&gt; newMasterCaller()<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>        .action((controller, stub) -&gt; this<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>            .&lt;IsRpcThrottleEnabledRequest, IsRpcThrottleEnabledResponse, Boolean&gt; call(controller,<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>              stub, IsRpcThrottleEnabledRequest.newBuilder().build(),<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>              (s, c, req, done) -&gt; s.isRpcThrottleEnabled(c, req, done),<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>              resp -&gt; resp.getRpcThrottleEnabled()))<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>        .call();<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    return future;<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>  }<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span><a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>  @Override<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>  public CompletableFuture&lt;Boolean&gt; exceedThrottleQuotaSwitch(boolean enable) {<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>    CompletableFuture&lt;Boolean&gt; future = this.&lt;Boolean&gt; newMasterCaller()<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>        .action((controller, stub) -&gt; this<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>            .&lt;SwitchExceedThrottleQuotaRequest, SwitchExceedThrottleQuotaResponse, Boolean&gt; call(<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>              controller, stub,<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>              SwitchExceedThrottleQuotaRequest.newBuilder().setExceedThrottleQuotaEnabled(enable)<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>                  .build(),<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>              (s, c, req, done) -&gt; s.switchExceedThrottleQuota(c, req, done),<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>              resp -&gt; resp.getPreviousExceedThrottleQuotaEnabled()))<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>        .call();<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span>    return future;<a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>  }<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span><a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>  @Override<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>  public CompletableFuture&lt;Map&lt;TableName, Long&gt;&gt; getSpaceQuotaTableSizes() {<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>    return this.&lt;Map&lt;TableName, Long&gt;&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>      .&lt;GetSpaceQuotaRegionSizesRequest, GetSpaceQuotaRegionSizesResponse,<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>      Map&lt;TableName, Long&gt;&gt; call(controller, stub,<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>        RequestConverter.buildGetSpaceQuotaRegionSizesRequest(),<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>        (s, c, req, done) -&gt; s.getSpaceQuotaRegionSizes(c, req, done),<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>        resp -&gt; resp.getSizesList().stream().collect(Collectors<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>          .toMap(sizes -&gt; ProtobufUtil.toTableName(sizes.getTableName()), RegionSizes::getSize))))<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>      .call();<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>  }<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span><a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>  @Override<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>  public CompletableFuture&lt;Map&lt;TableName, SpaceQuotaSnapshot&gt;&gt; getRegionServerSpaceQuotaSnapshots(<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>      ServerName serverName) {<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>    return this.&lt;Map&lt;TableName, SpaceQuotaSnapshot&gt;&gt; newAdminCaller()<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>      .action((controller, stub) -&gt; this<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>        .&lt;GetSpaceQuotaSnapshotsRequest, GetSpaceQuotaSnapshotsResponse,<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>        Map&lt;TableName, SpaceQuotaSnapshot&gt;&gt; adminCall(controller, stub,<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>          RequestConverter.buildGetSpaceQuotaSnapshotsRequest(),<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>          (s, c, req, done) -&gt; s.getSpaceQuotaSnapshots(controller, req, done),<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>          resp -&gt; resp.getSnapshotsList().stream()<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>            .collect(Collectors.toMap(snapshot -&gt; ProtobufUtil.toTableName(snapshot.getTableName()),<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>              snapshot -&gt; SpaceQuotaSnapshot.toSpaceQuotaSnapshot(snapshot.getSnapshot())))))<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>      .serverName(serverName).call();<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>  }<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span><a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>  private CompletableFuture&lt;SpaceQuotaSnapshot&gt; getCurrentSpaceQuotaSnapshot(<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>      Converter&lt;SpaceQuotaSnapshot, GetQuotaStatesResponse&gt; converter) {<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>    return this.&lt;SpaceQuotaSnapshot&gt; newMasterCaller()<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>      .action((controller, stub) -&gt; this<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>        .&lt;GetQuotaStatesRequest, GetQuotaStatesResponse, SpaceQuotaSnapshot&gt; call(controller, stub,<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>          RequestConverter.buildGetQuotaStatesRequest(),<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          (s, c, req, done) -&gt; s.getQuotaStates(c, req, done), converter))<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>      .call();<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>  }<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span><a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>  @Override<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>  public CompletableFuture&lt;SpaceQuotaSnapshot&gt; getCurrentSpaceQuotaSnapshot(String namespace) {<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>    return getCurrentSpaceQuotaSnapshot(resp -&gt; resp.getNsSnapshotsList().stream()<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>      .filter(s -&gt; s.getNamespace().equals(namespace)).findFirst()<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      .map(s -&gt; SpaceQuotaSnapshot.toSpaceQuotaSnapshot(s.getSnapshot())).orElse(null));<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>  }<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span><a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>  @Override<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>  public CompletableFuture&lt;SpaceQuotaSnapshot&gt; getCurrentSpaceQuotaSnapshot(TableName tableName) {<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    HBaseProtos.TableName protoTableName = ProtobufUtil.toProtoTableName(tableName);<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    return getCurrentSpaceQuotaSnapshot(resp -&gt; resp.getTableSnapshotsList().stream()<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>      .filter(s -&gt; s.getTableName().equals(protoTableName)).findFirst()<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span>      .map(s -&gt; SpaceQuotaSnapshot.toSpaceQuotaSnapshot(s.getSnapshot())).orElse(null));<a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>  }<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span><a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>  @Override<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span>  public CompletableFuture&lt;Void&gt; grant(UserPermission userPermission,<a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>      boolean mergeExistingPermissions) {<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>        .action((controller, stub) -&gt; this.&lt;GrantRequest, GrantResponse, Void&gt; call(controller,<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>          stub, ShadedAccessControlUtil.buildGrantRequest(userPermission, mergeExistingPermissions),<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>          (s, c, req, done) -&gt; s.grant(c, req, done), resp -&gt; null))<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span>        .call();<a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>  }<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span><a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  @Override<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span>  public CompletableFuture&lt;Void&gt; revoke(UserPermission userPermission) {<a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>        .action((controller, stub) -&gt; this.&lt;RevokeRequest, RevokeResponse, Void&gt; call(controller,<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>          stub, ShadedAccessControlUtil.buildRevokeRequest(userPermission),<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span>          (s, c, req, done) -&gt; s.revoke(c, req, done), resp -&gt; null))<a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>        .call();<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>  }<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span><a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>  @Override<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>  public CompletableFuture&lt;List&lt;UserPermission&gt;&gt;<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      getUserPermissions(GetUserPermissionsRequest getUserPermissionsRequest) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>    return this.&lt;List&lt;UserPermission&gt;&gt; newMasterCaller().action((controller,<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>        stub) -&gt; this.&lt;AccessControlProtos.GetUserPermissionsRequest, GetUserPermissionsResponse,<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>            List&lt;UserPermission&gt;&gt; call(controller, stub,<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>              ShadedAccessControlUtil.buildGetUserPermissionsRequest(getUserPermissionsRequest),<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span>              (s, c, req, done) -&gt; s.getUserPermissions(c, req, done),<a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>              resp -&gt; resp.getUserPermissionList().stream()<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>                .map(uPerm -&gt; ShadedAccessControlUtil.toUserPermission(uPerm))<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>                .collect(Collectors.toList())))<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>        .call();<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span>  }<a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>}<a name="line.3826"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html
index 7482d1b..1e3ec31 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.AdminRpcCall.html
@@ -846,2986 +846,2992 @@
 <span class="sourceLineNo">838</span>  @Override<a name="line.838"></a>
 <span class="sourceLineNo">839</span>  public CompletableFuture&lt;List&lt;RegionInfo&gt;&gt; getRegions(TableName tableName) {<a name="line.839"></a>
 <span class="sourceLineNo">840</span>    if (tableName.equals(META_TABLE_NAME)) {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      return connection.getLocator().getRegionLocation(tableName, null, null, operationTimeoutNs)<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          .thenApply(loc -&gt; Collections.singletonList(loc.getRegion()));<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    } else {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName))<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          .thenApply(<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            locs -&gt; locs.stream().map(loc -&gt; loc.getRegion()).collect(Collectors.toList()));<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  }<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>  @Override<a name="line.850"></a>
-<span class="sourceLineNo">851</span>  public CompletableFuture&lt;Void&gt; flush(TableName tableName) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.852"></a>
-<span class="sourceLineNo">853</span>    addListener(tableExists(tableName), (exists, err) -&gt; {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      if (err != null) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        future.completeExceptionally(err);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      } else if (!exists) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      } else {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        addListener(isTableEnabled(tableName), (tableEnabled, err2) -&gt; {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          if (err2 != null) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>            future.completeExceptionally(err2);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          } else if (!tableEnabled) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>            future.completeExceptionally(new TableNotEnabledException(tableName));<a name="line.863"></a>
-<span class="sourceLineNo">864</span>          } else {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>            addListener(execProcedure(FLUSH_TABLE_PROCEDURE_SIGNATURE, tableName.getNameAsString(),<a name="line.865"></a>
-<span class="sourceLineNo">866</span>              new HashMap&lt;&gt;()), (ret, err3) -&gt; {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>                if (err3 != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>                  future.completeExceptionally(err3);<a name="line.868"></a>
-<span class="sourceLineNo">869</span>                } else {<a name="line.869"></a>
-<span class="sourceLineNo">870</span>                  future.complete(ret);<a name="line.870"></a>
-<span class="sourceLineNo">871</span>                }<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>    });<a name="line.876"></a>
-<span class="sourceLineNo">877</span>    return future;<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>  @Override<a name="line.880"></a>
-<span class="sourceLineNo">881</span>  public CompletableFuture&lt;Void&gt; flushRegion(byte[] regionName) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      if (err != null) {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        future.completeExceptionally(err);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>        return;<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      }<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      ServerName serverName = location.getServerName();<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      if (serverName == null) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>        future<a name="line.890"></a>
-<span class="sourceLineNo">891</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        return;<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      }<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      addListener(flush(serverName, location.getRegion()), (ret, err2) -&gt; {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        if (err2 != null) {<a name="line.895"></a>
-<span class="sourceLineNo">896</span>          future.completeExceptionally(err2);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>        } else {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>          future.complete(ret);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>        }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      });<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    });<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    return future;<a name="line.902"></a>
-<span class="sourceLineNo">903</span>  }<a name="line.903"></a>
-<span class="sourceLineNo">904</span><a name="line.904"></a>
-<span class="sourceLineNo">905</span>  private CompletableFuture&lt;Void&gt; flush(final ServerName serverName, final RegionInfo regionInfo) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    return this.&lt;Void&gt; newAdminCaller()<a name="line.906"></a>
-<span class="sourceLineNo">907</span>            .serverName(serverName)<a name="line.907"></a>
-<span class="sourceLineNo">908</span>            .action(<a name="line.908"></a>
-<span class="sourceLineNo">909</span>              (controller, stub) -&gt; this.&lt;FlushRegionRequest, FlushRegionResponse, Void&gt; adminCall(<a name="line.909"></a>
-<span class="sourceLineNo">910</span>                controller, stub, RequestConverter.buildFlushRegionRequest(regionInfo<a name="line.910"></a>
-<span class="sourceLineNo">911</span>                  .getRegionName()), (s, c, req, done) -&gt; s.flushRegion(c, req, done),<a name="line.911"></a>
-<span class="sourceLineNo">912</span>                resp -&gt; null))<a name="line.912"></a>
-<span class="sourceLineNo">913</span>            .call();<a name="line.913"></a>
-<span class="sourceLineNo">914</span>  }<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>  @Override<a name="line.916"></a>
-<span class="sourceLineNo">917</span>  public CompletableFuture&lt;Void&gt; flushRegionServer(ServerName sn) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    addListener(getRegions(sn), (hRegionInfos, err) -&gt; {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      if (err != null) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        future.completeExceptionally(err);<a name="line.921"></a>
-<span class="sourceLineNo">922</span>        return;<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; compactFutures = new ArrayList&lt;&gt;();<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      if (hRegionInfos != null) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>        hRegionInfos.forEach(region -&gt; compactFutures.add(flush(sn, region)));<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      }<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      addListener(CompletableFuture.allOf(<a name="line.928"></a>
-<span class="sourceLineNo">929</span>        compactFutures.toArray(new CompletableFuture&lt;?&gt;[compactFutures.size()])), (ret, err2) -&gt; {<a name="line.929"></a>
-<span class="sourceLineNo">930</span>          if (err2 != null) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>            future.completeExceptionally(err2);<a name="line.931"></a>
-<span class="sourceLineNo">932</span>          } else {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>            future.complete(ret);<a name="line.933"></a>
-<span class="sourceLineNo">934</span>          }<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>
-<span class="sourceLineNo">937</span>    return future;<a name="line.937"></a>
-<span class="sourceLineNo">938</span>  }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  @Override<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  public CompletableFuture&lt;Void&gt; compact(TableName tableName, CompactType compactType) {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    return compact(tableName, null, false, compactType);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>  }<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>  @Override<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  public CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily,<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      CompactType compactType) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null. "<a name="line.948"></a>
-<span class="sourceLineNo">949</span>        + "If you don't specify a columnFamily, use compact(TableName) instead");<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    return compact(tableName, columnFamily, false, compactType);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>  }<a name="line.951"></a>
-<span class="sourceLineNo">952</span><a name="line.952"></a>
-<span class="sourceLineNo">953</span>  @Override<a name="line.953"></a>
-<span class="sourceLineNo">954</span>  public CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName) {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    return compactRegion(regionName, null, false);<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  }<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>  @Override<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  public CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName, byte[] columnFamily) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.960"></a>
-<span class="sourceLineNo">961</span>        + " If you don't specify a columnFamily, use compactRegion(regionName) instead");<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    return compactRegion(regionName, columnFamily, false);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>  }<a name="line.963"></a>
-<span class="sourceLineNo">964</span><a name="line.964"></a>
-<span class="sourceLineNo">965</span>  @Override<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  public CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, CompactType compactType) {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return compact(tableName, null, true, compactType);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  @Override<a name="line.970"></a>
-<span class="sourceLineNo">971</span>  public CompletableFuture&lt;Void&gt; majorCompact(TableName tableName, byte[] columnFamily,<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      CompactType compactType) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.973"></a>
-<span class="sourceLineNo">974</span>        + "If you don't specify a columnFamily, use compact(TableName) instead");<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    return compact(tableName, columnFamily, true, compactType);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>  }<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>  @Override<a name="line.978"></a>
-<span class="sourceLineNo">979</span>  public CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName) {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    return compactRegion(regionName, null, true);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>  }<a name="line.981"></a>
-<span class="sourceLineNo">982</span><a name="line.982"></a>
-<span class="sourceLineNo">983</span>  @Override<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  public CompletableFuture&lt;Void&gt; majorCompactRegion(byte[] regionName, byte[] columnFamily) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    Preconditions.checkNotNull(columnFamily, "columnFamily is null."<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        + " If you don't specify a columnFamily, use majorCompactRegion(regionName) instead");<a name="line.986"></a>
-<span class="sourceLineNo">987</span>    return compactRegion(regionName, columnFamily, true);<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  }<a name="line.988"></a>
-<span class="sourceLineNo">989</span><a name="line.989"></a>
-<span class="sourceLineNo">990</span>  @Override<a name="line.990"></a>
-<span class="sourceLineNo">991</span>  public CompletableFuture&lt;Void&gt; compactRegionServer(ServerName sn) {<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    return compactRegionServer(sn, false);<a name="line.992"></a>
-<span class="sourceLineNo">993</span>  }<a name="line.993"></a>
-<span class="sourceLineNo">994</span><a name="line.994"></a>
-<span class="sourceLineNo">995</span>  @Override<a name="line.995"></a>
-<span class="sourceLineNo">996</span>  public CompletableFuture&lt;Void&gt; majorCompactRegionServer(ServerName sn) {<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    return compactRegionServer(sn, true);<a name="line.997"></a>
-<span class="sourceLineNo">998</span>  }<a name="line.998"></a>
-<span class="sourceLineNo">999</span><a name="line.999"></a>
-<span class="sourceLineNo">1000</span>  private CompletableFuture&lt;Void&gt; compactRegionServer(ServerName sn, boolean major) {<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    addListener(getRegions(sn), (hRegionInfos, err) -&gt; {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      if (err != null) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>        future.completeExceptionally(err);<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        return;<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      }<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      List&lt;CompletableFuture&lt;Void&gt;&gt; compactFutures = new ArrayList&lt;&gt;();<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      if (hRegionInfos != null) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        hRegionInfos.forEach(region -&gt; compactFutures.add(compact(sn, region, major, null)));<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      addListener(CompletableFuture.allOf(<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        compactFutures.toArray(new CompletableFuture&lt;?&gt;[compactFutures.size()])), (ret, err2) -&gt; {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>          if (err2 != null) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>            future.completeExceptionally(err2);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>          } else {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>            future.complete(ret);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>          }<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        });<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    });<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    return future;<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  }<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span><a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>  private CompletableFuture&lt;Void&gt; compactRegion(byte[] regionName, byte[] columnFamily,<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      boolean major) {<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>      if (err != null) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        future.completeExceptionally(err);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>        return;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      ServerName serverName = location.getServerName();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (serverName == null) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        future<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        return;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      }<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      addListener(compact(location.getServerName(), location.getRegion(), major, columnFamily),<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        (ret, err2) -&gt; {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>          if (err2 != null) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>            future.completeExceptionally(err2);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>          } else {<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            future.complete(ret);<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>          }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        });<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    });<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    return future;<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span><a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * List all region locations for the specific table.<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   */<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  private CompletableFuture&lt;List&lt;HRegionLocation&gt;&gt; getTableHRegionLocations(TableName tableName) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      CompletableFuture&lt;List&lt;HRegionLocation&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>      // For meta table, we use zk to fetch all locations.<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      AsyncRegistry registry = AsyncRegistryFactory.getRegistry(connection.getConfiguration());<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      addListener(registry.getMetaRegionLocation(), (metaRegions, err) -&gt; {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        if (err != null) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>          future.completeExceptionally(err);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>        } else if (metaRegions == null || metaRegions.isEmpty() ||<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>          metaRegions.getDefaultRegionLocation() == null) {<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          future.completeExceptionally(new IOException("meta region does not found"));<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        } else {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>          future.complete(Collections.singletonList(metaRegions.getDefaultRegionLocation()));<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>        // close the registry.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        IOUtils.closeQuietly(registry);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      });<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      return future;<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    } else {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>      // For non-meta table, we fetch all locations by scanning hbase:meta table<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      return AsyncMetaTableAccessor.getTableHRegionLocations(metaTable, Optional.of(tableName));<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>  }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span><a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>  /**<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>   * Compact column family of a table, Asynchronous operation even if CompletableFuture.get()<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>   */<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>  private CompletableFuture&lt;Void&gt; compact(TableName tableName, byte[] columnFamily, boolean major,<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>      CompactType compactType) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    switch (compactType) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      case MOB:<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>        addListener(connection.registry.getMasterAddress(), (serverName, err) -&gt; {<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>          if (err != null) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>            future.completeExceptionally(err);<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>            return;<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>          }<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>          RegionInfo regionInfo = RegionInfo.createMobRegionInfo(tableName);<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>          addListener(compact(serverName, regionInfo, major, columnFamily), (ret, err2) -&gt; {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>            if (err2 != null) {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>              future.completeExceptionally(err2);<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>            } else {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>              future.complete(ret);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>            }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>          });<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        });<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        break;<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      case NORMAL:<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>        addListener(getTableHRegionLocations(tableName), (locations, err) -&gt; {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>          if (err != null) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>            future.completeExceptionally(err);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>            return;<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>          }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>          if (locations == null || locations.isEmpty()) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>            future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>          }<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>          CompletableFuture&lt;?&gt;[] compactFutures =<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>            locations.stream().filter(l -&gt; l.getRegion() != null)<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>              .filter(l -&gt; !l.getRegion().isOffline()).filter(l -&gt; l.getServerName() != null)<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>              .map(l -&gt; compact(l.getServerName(), l.getRegion(), major, columnFamily))<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>              .toArray(CompletableFuture&lt;?&gt;[]::new);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>          // future complete unless all of the compact futures are completed.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>          addListener(CompletableFuture.allOf(compactFutures), (ret, err2) -&gt; {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>            if (err2 != null) {<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>              future.completeExceptionally(err2);<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>            } else {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>              future.complete(ret);<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>            }<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          });<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        });<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        break;<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      default:<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        throw new IllegalArgumentException("Unknown compactType: " + compactType);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    return future;<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>  }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>  /**<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>   * Compact the region at specific region server.<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>   */<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>  private CompletableFuture&lt;Void&gt; compact(final ServerName sn, final RegionInfo hri,<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      final boolean major, byte[] columnFamily) {<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    return this<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        .&lt;Void&gt; newAdminCaller()<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        .serverName(sn)<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        .action(<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>          (controller, stub) -&gt; this.&lt;CompactRegionRequest, CompactRegionResponse, Void&gt; adminCall(<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>            controller, stub, RequestConverter.buildCompactRegionRequest(hri.getRegionName(),<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>              major, columnFamily), (s, c, req, done) -&gt; s.compactRegion(c, req, done),<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>            resp -&gt; null)).call();<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>  }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span><a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>  private byte[] toEncodeRegionName(byte[] regionName) {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    try {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      return RegionInfo.isEncodedRegionName(regionName) ? regionName<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>          : Bytes.toBytes(RegionInfo.encodeRegionName(regionName));<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    } catch (IOException e) {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>      return regionName;<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  private void checkAndGetTableName(byte[] encodeRegionName, AtomicReference&lt;TableName&gt; tableName,<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      CompletableFuture&lt;TableName&gt; result) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    addListener(getRegionLocation(encodeRegionName), (location, err) -&gt; {<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      if (err != null) {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>        result.completeExceptionally(err);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>        return;<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      }<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>        result.completeExceptionally(<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>          new IllegalArgumentException("Can't invoke merge on non-default regions directly"));<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>        return;<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>      }<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>      if (!tableName.compareAndSet(null, regionInfo.getTable())) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        if (!tableName.get().equals(regionInfo.getTable())) {<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>          // tables of this two region should be same.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>          result.completeExceptionally(<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>            new IllegalArgumentException("Cannot merge regions from two different tables " +<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>              tableName.get() + " and " + regionInfo.getTable()));<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>        } else {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>          result.complete(tableName.get());<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>        }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    });<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>  }<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  private CompletableFuture&lt;TableName&gt; checkRegionsAndGetTableName(byte[][] encodedRegionNames) {<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    AtomicReference&lt;TableName&gt; tableNameRef = new AtomicReference&lt;&gt;();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    CompletableFuture&lt;TableName&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      checkAndGetTableName(encodedRegionName, tableNameRef, future);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    return future;<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  @Override<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>  public CompletableFuture&lt;Boolean&gt; mergeSwitch(boolean enabled, boolean drainMerges) {<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    return setSplitOrMergeOn(enabled, drainMerges, MasterSwitchType.MERGE);<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span><a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  @Override<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>  public CompletableFuture&lt;Boolean&gt; isMergeEnabled() {<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    return isSplitOrMergeOn(MasterSwitchType.MERGE);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>  }<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span><a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  @Override<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>  public CompletableFuture&lt;Boolean&gt; splitSwitch(boolean enabled, boolean drainSplits) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    return setSplitOrMergeOn(enabled, drainSplits, MasterSwitchType.SPLIT);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>  }<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>  @Override<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>  public CompletableFuture&lt;Boolean&gt; isSplitEnabled() {<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>    return isSplitOrMergeOn(MasterSwitchType.SPLIT);<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  private CompletableFuture&lt;Boolean&gt; setSplitOrMergeOn(boolean enabled, boolean synchronous,<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      MasterSwitchType switchType) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    SetSplitOrMergeEnabledRequest request =<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      RequestConverter.buildSetSplitOrMergeEnabledRequest(enabled, synchronous, switchType);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>      .action((controller, stub) -&gt; this<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>        .&lt;SetSplitOrMergeEnabledRequest, SetSplitOrMergeEnabledResponse, Boolean&gt; call(controller,<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>          stub, request, (s, c, req, done) -&gt; s.setSplitOrMergeEnabled(c, req, done),<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>          (resp) -&gt; resp.getPrevValueList().get(0)))<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      .call();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span><a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  private CompletableFuture&lt;Boolean&gt; isSplitOrMergeOn(MasterSwitchType switchType) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>    IsSplitOrMergeEnabledRequest request =<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>        RequestConverter.buildIsSplitOrMergeEnabledRequest(switchType);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    return this<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>        .action(<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>          (controller, stub) -&gt; this<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>              .&lt;IsSplitOrMergeEnabledRequest, IsSplitOrMergeEnabledResponse, Boolean&gt; call(<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>                controller, stub, request,<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>                (s, c, req, done) -&gt; s.isSplitOrMergeEnabled(c, req, done),<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>                (resp) -&gt; resp.getEnabled())).call();<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>  }<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span><a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>  @Override<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>  public CompletableFuture&lt;Void&gt; mergeRegions(List&lt;byte[]&gt; nameOfRegionsToMerge, boolean forcible) {<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>    if (nameOfRegionsToMerge.size() &lt; 2) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      return failedFuture(new IllegalArgumentException(<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>        "Can not merge only " + nameOfRegionsToMerge.size() + " region"));<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    }<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>    byte[][] encodedNameOfRegionsToMerge =<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>      nameOfRegionsToMerge.stream().map(this::toEncodeRegionName).toArray(byte[][]::new);<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span><a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    addListener(checkRegionsAndGetTableName(encodedNameOfRegionsToMerge), (tableName, err) -&gt; {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      if (err != null) {<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>        future.completeExceptionally(err);<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>        return;<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span><a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>      MergeTableRegionsRequest request = null;<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      try {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>        request = RequestConverter.buildMergeTableRegionsRequest(encodedNameOfRegionsToMerge,<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>          forcible, ng.getNonceGroup(), ng.newNonce());<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      } catch (DeserializationException e) {<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>        future.completeExceptionally(e);<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>        return;<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span><a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      addListener(<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>        this.&lt;MergeTableRegionsRequest, MergeTableRegionsResponse&gt; procedureCall(tableName, request,<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>          (s, c, req, done) -&gt; s.mergeTableRegions(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>          new MergeTableRegionProcedureBiConsumer(tableName)),<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>        (ret, err2) -&gt; {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>          if (err2 != null) {<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>            future.completeExceptionally(err2);<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>          } else {<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>            future.complete(ret);<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>          }<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        });<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    });<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    return future;<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  @Override<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  public CompletableFuture&lt;Void&gt; split(TableName tableName) {<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>    addListener(tableExists(tableName), (exist, error) -&gt; {<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>      if (error != null) {<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>        future.completeExceptionally(error);<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>        return;<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      if (!exist) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>        future.completeExceptionally(new TableNotFoundException(tableName));<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>        return;<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      }<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      addListener(<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        metaTable<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>          .scanAll(new Scan().setReadType(ReadType.PREAD).addFamily(HConstants.CATALOG_FAMILY)<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>            .withStartRow(MetaTableAccessor.getTableStartRowForMeta(tableName, QueryType.REGION))<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>            .withStopRow(MetaTableAccessor.getTableStopRowForMeta(tableName, QueryType.REGION))),<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>        (results, err2) -&gt; {<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>          if (err2 != null) {<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>            future.completeExceptionally(err2);<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>            return;<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>          }<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>          if (results != null &amp;&amp; !results.isEmpty()) {<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>            List&lt;CompletableFuture&lt;Void&gt;&gt; splitFutures = new ArrayList&lt;&gt;();<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>            for (Result r : results) {<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>              if (r.isEmpty() || MetaTableAccessor.getRegionInfo(r) == null) {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>                continue;<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>              }<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>              RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>              if (rl != null) {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>                for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>                  if (h != null &amp;&amp; h.getServerName() != null) {<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>                    RegionInfo hri = h.getRegion();<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>                    if (hri == null || hri.isSplitParent() ||<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>                      hri.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>                      continue;<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>                    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>                    splitFutures.add(split(hri, null));<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>                  }<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>                }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>              }<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>            }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>            addListener(<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>              CompletableFuture<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>                .allOf(splitFutures.toArray(new CompletableFuture&lt;?&gt;[splitFutures.size()])),<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>              (ret, exception) -&gt; {<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>                if (exception != null) {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>                  future.completeExceptionally(exception);<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>                  return;<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>                }<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>                future.complete(ret);<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>              });<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          } else {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>            future.complete(null);<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>          }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        });<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>    });<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    return future;<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  @Override<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>  public CompletableFuture&lt;Void&gt; split(TableName tableName, byte[] splitPoint) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    CompletableFuture&lt;Void&gt; result = new CompletableFuture&lt;&gt;();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    if (splitPoint == null) {<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>      return failedFuture(new IllegalArgumentException("splitPoint can not be null."));<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    addListener(connection.getRegionLocator(tableName).getRegionLocation(splitPoint),<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>      (loc, err) -&gt; {<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>        if (err != null) {<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>          result.completeExceptionally(err);<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>        } else if (loc == null || loc.getRegion() == null) {<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>          result.completeExceptionally(new IllegalArgumentException(<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>            "Region does not found: rowKey=" + Bytes.toStringBinary(splitPoint)));<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>        } else {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>          addListener(splitRegion(loc.getRegion().getRegionName(), splitPoint), (ret, err2) -&gt; {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>            if (err2 != null) {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>              result.completeExceptionally(err2);<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>            } else {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>              result.complete(ret);<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>            }<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>          });<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>        }<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>      });<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    return result;<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>  }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span><a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>  @Override<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  public CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        future<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          .completeExceptionally(new IllegalArgumentException("Can't split replicas directly. " +<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>            "Replicas are auto-split when their primary is split."));<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>        return;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>      ServerName serverName = location.getServerName();<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      if (serverName == null) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        future<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>        return;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>      addListener(split(regionInfo, null), (ret, err2) -&gt; {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>        if (err2 != null) {<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>          future.completeExceptionally(err2);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>        } else {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>          future.complete(ret);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>        }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>      });<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    });<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    return future;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>  }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>  @Override<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>  public CompletableFuture&lt;Void&gt; splitRegion(byte[] regionName, byte[] splitPoint) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    Preconditions.checkNotNull(splitPoint,<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      "splitPoint is null. If you don't specify a splitPoint, use splitRegion(byte[]) instead");<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    addListener(getRegionLocation(regionName), (location, err) -&gt; {<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>      RegionInfo regionInfo = location.getRegion();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (regionInfo.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        future<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>          .completeExceptionally(new IllegalArgumentException("Can't split replicas directly. " +<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>            "Replicas are auto-split when their primary is split."));<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        return;<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      ServerName serverName = location.getServerName();<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      if (serverName == null) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>        future<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>          .completeExceptionally(new NoServerForRegionException(Bytes.toStringBinary(regionName)));<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        return;<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>      }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      if (regionInfo.getStartKey() != null &amp;&amp;<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        Bytes.compareTo(regionInfo.getStartKey(), splitPoint) == 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        future.completeExceptionally(<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>          new IllegalArgumentException("should not give a splitkey which equals to startkey!"));<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        return;<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>      }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      addListener(split(regionInfo, splitPoint), (ret, err2) -&gt; {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>        if (err2 != null) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>          future.completeExceptionally(err2);<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>        } else {<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>          future.complete(ret);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      });<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    });<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>    return future;<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  private CompletableFuture&lt;Void&gt; split(final RegionInfo hri, byte[] splitPoint) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    TableName tableName = hri.getTable();<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    SplitTableRegionRequest request = null;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    try {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      request = RequestConverter.buildSplitTableRegionRequest(hri, splitPoint, ng.getNonceGroup(),<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>        ng.newNonce());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    } catch (DeserializationException e) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      future.completeExceptionally(e);<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      return future;<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span><a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>    addListener(<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      this.&lt;SplitTableRegionRequest, SplitTableRegionResponse&gt; procedureCall(tableName,<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        request, (s, c, req, done) -&gt; s.splitRegion(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>        new SplitTableRegionProcedureBiConsumer(tableName)),<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      (ret, err2) -&gt; {<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>        if (err2 != null) {<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>          future.completeExceptionally(err2);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>        } else {<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>          future.complete(ret);<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>      });<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>    return future;<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>  }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span><a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>  @Override<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>  public CompletableFuture&lt;Void&gt; assign(byte[] regionName) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>      if (err != null) {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        future.completeExceptionally(err);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        return;<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      addListener(this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        .action(((controller, stub) -&gt; this.&lt;AssignRegionRequest, AssignRegionResponse, Void&gt; call(<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>          controller, stub, RequestConverter.buildAssignRegionRequest(regionInfo.getRegionName()),<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>          (s, c, req, done) -&gt; s.assignRegion(c, req, done), resp -&gt; null)))<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>        .call(), (ret, err2) -&gt; {<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>          if (err2 != null) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>            future.completeExceptionally(err2);<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>          } else {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>            future.complete(ret);<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          }<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        });<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    });<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    return future;<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  }<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span><a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>  @Override<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>  public CompletableFuture&lt;Void&gt; unassign(byte[] regionName, boolean forcible) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      if (err != null) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>        future.completeExceptionally(err);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        return;<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      }<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      addListener(<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>        this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>          .action(((controller, stub) -&gt; this<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>            .&lt;UnassignRegionRequest, UnassignRegionResponse, Void&gt; call(controller, stub,<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              RequestConverter.buildUnassignRegionRequest(regionInfo.getRegionName(), forcible),<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              (s, c, req, done) -&gt; s.unassignRegion(c, req, done), resp -&gt; null)))<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          .call(),<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>        (ret, err2) -&gt; {<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (err2 != null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            future.completeExceptionally(err2);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          } else {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>            future.complete(ret);<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>          }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        });<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>    });<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    return future;<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  @Override<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  public CompletableFuture&lt;Void&gt; offline(byte[] regionName) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      if (err != null) {<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>        future.completeExceptionally(err);<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        return;<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      addListener(<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>          .action(((controller, stub) -&gt; this<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>            .&lt;OfflineRegionRequest, OfflineRegionResponse, Void&gt; call(controller, stub,<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>              RequestConverter.buildOfflineRegionRequest(regionInfo.getRegionName()),<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>              (s, c, req, done) -&gt; s.offlineRegion(c, req, done), resp -&gt; null)))<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          .call(),<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>        (ret, err2) -&gt; {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          if (err2 != null) {<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>            future.completeExceptionally(err2);<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>          } else {<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>            future.complete(ret);<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>        });<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    });<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    return future;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  }<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span><a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>  @Override<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  public CompletableFuture&lt;Void&gt; move(byte[] regionName) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      if (err != null) {<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>        future.completeExceptionally(err);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>        return;<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      addListener(<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>        moveRegion(regionInfo,<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>          RequestConverter.buildMoveRegionRequest(regionInfo.getEncodedNameAsBytes(), null)),<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>        (ret, err2) -&gt; {<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>          if (err2 != null) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>            future.completeExceptionally(err2);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          } else {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>            future.complete(ret);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>          }<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>        });<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    });<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    return future;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>  }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span><a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  @Override<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  public CompletableFuture&lt;Void&gt; move(byte[] regionName, ServerName destServerName) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>    Preconditions.checkNotNull(destServerName,<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      "destServerName is null. If you don't specify a destServerName, use move(byte[]) instead");<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    addListener(getRegionInfo(regionName), (regionInfo, err) -&gt; {<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      if (err != null) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        future.completeExceptionally(err);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>        return;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      addListener(<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        moveRegion(regionInfo, RequestConverter<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>          .buildMoveRegionRequest(regionInfo.getEncodedNameAsBytes(), destServerName)),<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        (ret, err2) -&gt; {<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>          if (err2 != null) {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>            future.completeExceptionally(err2);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>          } else {<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>            future.complete(ret);<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>          }<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        });<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    });<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    return future;<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span><a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  private CompletableFuture&lt;Void&gt; moveRegion(RegionInfo regionInfo, MoveRegionRequest request) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    return this.&lt;Void&gt; newMasterCaller().priority(regionInfo.getTable())<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      .action(<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        (controller, stub) -&gt; this.&lt;MoveRegionRequest, MoveRegionResponse, Void&gt; call(controller,<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>          stub, request, (s, c, req, done) -&gt; s.moveRegion(c, req, done), resp -&gt; null))<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      .call();<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  }<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span><a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  @Override<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  public CompletableFuture&lt;Void&gt; setQuota(QuotaSettings quota) {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    return this<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>        .&lt;Void&gt; newMasterCaller()<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>        .action(<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>          (controller, stub) -&gt; this.&lt;SetQuotaRequest, SetQuotaResponse, Void&gt; call(controller,<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>            stub, QuotaSettings.buildSetQuotaRequestProto(quota),<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>            (s, c, req, done) -&gt; s.setQuota(c, req, done), (resp) -&gt; null)).call();<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>  }<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span><a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>  @Override<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>  public CompletableFuture&lt;List&lt;QuotaSettings&gt;&gt; getQuota(QuotaFilter filter) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>    CompletableFuture&lt;List&lt;QuotaSettings&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    Scan scan = QuotaTableUtil.makeScan(filter);<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    this.connection.getTableBuilder(QuotaTableUtil.QUOTA_TABLE_NAME).build()<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        .scan(scan, new AdvancedScanResultConsumer() {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>          List&lt;QuotaSettings&gt; settings = new ArrayList&lt;&gt;();<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>          @Override<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          public void onNext(Result[] results, ScanController controller) {<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>            for (Result result : results) {<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>              try {<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>                QuotaTableUtil.parseResultToCollection(result, settings);<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>              } catch (IOException e) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>                controller.terminate();<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>                future.completeExceptionally(e);<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>              }<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>            }<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          }<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          @Override<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          public void onError(Throwable error) {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>            future.completeExceptionally(error);<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>          }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span><a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>          @Override<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          public void onComplete() {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>            future.complete(settings);<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>          }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>        });<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    return future;<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>  }<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span><a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>  @Override<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>  public CompletableFuture&lt;Void&gt; addReplicationPeer(String peerId,<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      ReplicationPeerConfig peerConfig, boolean enabled) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    return this.&lt;AddReplicationPeerRequest, AddReplicationPeerResponse&gt; procedureCall(<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      RequestConverter.buildAddReplicationPeerRequest(peerId, peerConfig, enabled),<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      (s, c, req, done) -&gt; s.addReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "ADD_REPLICATION_PEER"));<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>  }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>  @Override<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>  public CompletableFuture&lt;Void&gt; removeReplicationPeer(String peerId) {<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>    return this.&lt;RemoveReplicationPeerRequest, RemoveReplicationPeerResponse&gt; procedureCall(<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      RequestConverter.buildRemoveReplicationPeerRequest(peerId),<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      (s, c, req, done) -&gt; s.removeReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "REMOVE_REPLICATION_PEER"));<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>  }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span><a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>  @Override<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  public CompletableFuture&lt;Void&gt; enableReplicationPeer(String peerId) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    return this.&lt;EnableReplicationPeerRequest, EnableReplicationPeerResponse&gt; procedureCall(<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      RequestConverter.buildEnableReplicationPeerRequest(peerId),<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>      (s, c, req, done) -&gt; s.enableReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "ENABLE_REPLICATION_PEER"));<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>  }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span><a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>  @Override<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  public CompletableFuture&lt;Void&gt; disableReplicationPeer(String peerId) {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    return this.&lt;DisableReplicationPeerRequest, DisableReplicationPeerResponse&gt; procedureCall(<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      RequestConverter.buildDisableReplicationPeerRequest(peerId),<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      (s, c, req, done) -&gt; s.disableReplicationPeer(c, req, done), (resp) -&gt; resp.getProcId(),<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      new ReplicationProcedureBiConsumer(peerId, () -&gt; "DISABLE_REPLICATION_PEER"));<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>  }<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span><a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>  @Override<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>  public CompletableFuture&lt;ReplicationPeerConfig&gt; getReplicationPeerConfig(String peerId) {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    return this.&lt;ReplicationPeerConfig&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      .&lt;GetReplicationPeerConfigRequest, GetReplicationPeerConfigResponse, ReplicationPeerConfig&gt; call(<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>        controller, stub, RequestConverter.buildGetReplicationPeerConfigRequest(peerId),<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>        (s, c, req, done) -&gt; s.getReplicationPeerConfig(c, req, done),<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>        (resp) -&gt; ReplicationPeerConfigUtil.convert(resp.getPeerConfig())))<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      .call();<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  @Override<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>  public CompletableFuture&lt;Void&gt; updateReplicationPeerConfig(String peerId,<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      ReplicationPeerConfig peerConfig) {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>    return this<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      .&lt;UpdateReplicationPeerConfigRequest, UpdateReplicationPeerConfigResponse&gt; procedureCall(<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        RequestConverter.buildUpdateReplicationPeerConfigRequest(peerId, peerConfig),<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        (s, c, req, done) -&gt; s.updateReplicationPeerConfig(c, req, done),<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        (resp) -&gt; resp.getProcId(),<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        new ReplicationProcedureBiConsumer(peerId, () -&gt; "UPDATE_REPLICATION_PEER_CONFIG"));<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>  }<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span><a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>  @Override<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  public CompletableFuture&lt;Void&gt; transitReplicationPeerSyncReplicationState(String peerId,<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      SyncReplicationState clusterState) {<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    return this<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>      .&lt;TransitReplicationPeerSyncReplicationStateRequest, TransitReplicationPeerSyncReplicationStateResponse&gt; procedureCall(<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        RequestConverter.buildTransitReplicationPeerSyncReplicationStateRequest(peerId,<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>          clusterState),<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>        (s, c, req, done) -&gt; s.transitReplicationPeerSyncReplicationState(c, req, done),<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        (resp) -&gt; resp.getProcId(), new ReplicationProcedureBiConsumer(peerId,<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>          () -&gt; "TRANSIT_REPLICATION_PEER_SYNCHRONOUS_REPLICATION_STATE"));<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  @Override<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>  public CompletableFuture&lt;Void&gt; appendReplicationPeerTableCFs(String id,<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      Map&lt;TableName, List&lt;String&gt;&gt; tableCfs) {<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>    if (tableCfs == null) {<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      return failedFuture(new ReplicationException("tableCfs is null"));<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    }<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span><a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>    addListener(getReplicationPeerConfig(id), (peerConfig, error) -&gt; {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (!completeExceptionally(future, error)) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        ReplicationPeerConfig newPeerConfig =<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>          ReplicationPeerConfigUtil.appendTableCFsToReplicationPeerConfig(tableCfs, peerConfig);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        addListener(updateReplicationPeerConfig(id, newPeerConfig), (result, err) -&gt; {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          if (!completeExceptionally(future, error)) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>            future.complete(result);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>          }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        });<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    });<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>    return future;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>  }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span><a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>  @Override<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>  public CompletableFuture&lt;Void&gt; removeReplicationPeerTableCFs(String id,<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>      Map&lt;TableName, List&lt;String&gt;&gt; tableCfs) {<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    if (tableCfs == null) {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      return failedFuture(new ReplicationException("tableCfs is null"));<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span><a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;Void&gt;();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    addListener(getReplicationPeerConfig(id), (peerConfig, error) -&gt; {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (!completeExceptionally(future, error)) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        ReplicationPeerConfig newPeerConfig = null;<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>        try {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>          newPeerConfig = ReplicationPeerConfigUtil<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            .removeTableCFsFromReplicationPeerConfig(tableCfs, peerConfig, id);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        } catch (ReplicationException e) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          future.completeExceptionally(e);<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          return;<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>        addListener(updateReplicationPeerConfig(id, newPeerConfig), (result, err) -&gt; {<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>          if (!completeExceptionally(future, error)) {<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>            future.complete(result);<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>          }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>        });<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>      }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    });<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    return future;<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  @Override<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  public CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers() {<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>    return listReplicationPeers(RequestConverter.buildListReplicationPeersRequest(null));<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span><a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>  @Override<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>  public CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers(Pattern pattern) {<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>    Preconditions.checkNotNull(pattern,<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      "pattern is null. If you don't specify a pattern, use listReplicationPeers() instead");<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    return listReplicationPeers(RequestConverter.buildListReplicationPeersRequest(pattern));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>  }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>  private CompletableFuture&lt;List&lt;ReplicationPeerDescription&gt;&gt; listReplicationPeers(<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      ListReplicationPeersRequest request) {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    return this<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>        .&lt;List&lt;ReplicationPeerDescription&gt;&gt; newMasterCaller()<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        .action(<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>          (controller, stub) -&gt; this<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>              .&lt;ListReplicationPeersRequest, ListReplicationPeersResponse, List&lt;ReplicationPeerDescription&gt;&gt; call(<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>                controller,<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>                stub,<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>                request,<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>                (s, c, req, done) -&gt; s.listReplicationPeers(c, req, done),<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>                (resp) -&gt; resp.getPeerDescList().stream()<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>                    .map(ReplicationPeerConfigUtil::toReplicationPeerDescription)<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>                    .collect(Collectors.toList()))).call();<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  @Override<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  public CompletableFuture&lt;List&lt;TableCFs&gt;&gt; listReplicatedTableCFs() {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    CompletableFuture&lt;List&lt;TableCFs&gt;&gt; future = new CompletableFuture&lt;List&lt;TableCFs&gt;&gt;();<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    addListener(listTableDescriptors(), (tables, error) -&gt; {<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      if (!completeExceptionally(future, error)) {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>        List&lt;TableCFs&gt; replicatedTableCFs = new ArrayList&lt;&gt;();<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>        tables.forEach(table -&gt; {<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>          Map&lt;String, Integer&gt; cfs = new HashMap&lt;&gt;();<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>          Stream.of(table.getColumnFamilies())<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            .filter(column -&gt; column.getScope() != HConstants.REPLICATION_SCOPE_LOCAL)<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>            .forEach(column -&gt; {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>              cfs.put(column.getNameAsString(), column.getScope());<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>            });<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          if (!cfs.isEmpty()) {<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            replicatedTableCFs.add(new TableCFs(table.getTableName(), cfs));<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>          }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>        });<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        future.complete(replicatedTableCFs);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    });<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    return future;<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>  }<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span><a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  @Override<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  public CompletableFuture&lt;Void&gt; snapshot(SnapshotDescription snapshotDesc) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    SnapshotProtos.SnapshotDescription snapshot =<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      ProtobufUtil.createHBaseProtosSnapshotDesc(snapshotDesc);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    try {<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>      ClientSnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    } catch (IllegalArgumentException e) {<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      return failedFuture(e);<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    final SnapshotRequest request = SnapshotRequest.newBuilder().setSnapshot(snapshot).build();<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>    addListener(this.&lt;Long&gt; newMasterCaller()<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      .action((controller, stub) -&gt; this.&lt;SnapshotRequest, SnapshotResponse, Long&gt; call(controller,<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        stub, request, (s, c, req, done) -&gt; s.snapshot(c, req, done),<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        resp -&gt; resp.getExpectedTimeout()))<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      .call(), (expectedTimeout, err) -&gt; {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        if (err != null) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>          future.completeExceptionally(err);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>          return;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>        }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>        TimerTask pollingTask = new TimerTask() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>          int tries = 0;<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>          long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>          long endTime = startTime + expectedTimeout;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>          long maxPauseTime = expectedTimeout / maxAttempts;<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span><a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>          @Override<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>          public void run(Timeout timeout) throws Exception {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>            if (EnvironmentEdgeManager.currentTime() &lt; endTime) {<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              addListener(isSnapshotFinished(snapshotDesc), (done, err2) -&gt; {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>                if (err2 != null) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>                  future.completeExceptionally(err2);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                } else if (done) {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>                  future.complete(null);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>                } else {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>                  // retry again after pauseTime.<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>                  long pauseTime =<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>                    ConnectionUtils.getPauseTime(TimeUnit.NANOSECONDS.toMillis(pauseNs), ++tries);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>                  pauseTime = Math.min(pauseTime, maxPauseTime);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>                  AsyncConnectionImpl.RETRY_TIMER.newTimeout(this, pauseTime,<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>                    TimeUnit.MILLISECONDS);<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>                }<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>              });<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>            } else {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>              future.completeExceptionally(<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>                new SnapshotCreationException("Snapshot '" + snapshot.getName() +<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>                  "' wasn't completed in expectedTime:" + expectedTimeout + " ms", snapshotDesc));<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>            }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>          }<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>        };<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>        AsyncConnectionImpl.RETRY_TIMER.newTimeout(pollingTask, 1, TimeUnit.MILLISECONDS);<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>      });<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    return future;<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  }<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span><a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>  @Override<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>  public CompletableFuture&lt;Boolean&gt; isSnapshotFinished(SnapshotDescription snapshot) {<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    return this<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        .&lt;Boolean&gt; newMasterCaller()<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>        .action(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>          (controller, stub) -&gt; this.&lt;IsSnapshotDoneRequest, IsSnapshotDoneResponse, Boolean&gt; call(<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>            controller,<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            stub,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            IsSnapshotDoneRequest.newBuilder()<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>                .setSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot)).build(), (s, c,<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>                req, done) -&gt; s.isSnapshotDone(c, req, done), resp -&gt; resp.getDone())).call();<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>  public CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    boolean takeFailSafeSnapshot = this.connection.getConfiguration().getBoolean(<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT,<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      HConstants.DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT);<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    return restoreSnapshot(snapshotName, takeFailSafeSnapshot);<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>  }<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span><a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>  @Override<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>  public CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName, boolean takeFailSafeSnapshot,<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      boolean restoreAcl) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>    addListener(listSnapshots(Pattern.compile(snapshotName)), (snapshotDescriptions, err) -&gt; {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      if (err != null) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        future.completeExceptionally(err);<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>        return;<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      TableName tableName = null;<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      if (snapshotDescriptions != null &amp;&amp; !snapshotDescriptions.isEmpty()) {<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>        for (SnapshotDescription snap : snapshotDescriptions) {<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>          if (snap.getName().equals(snapshotName)) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>            tableName = snap.getTableName();<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>            break;<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>          }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>        }<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      }<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>      if (tableName == null) {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        future.completeExceptionally(new RestoreSnapshotException(<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>          "Unable to find the table name for snapshot=" + snapshotName));<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>        return;<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      }<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      final TableName finalTableName = tableName;<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>      addListener(tableExists(finalTableName), (exists, err2) -&gt; {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>        if (err2 != null) {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          future.completeExceptionally(err2);<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        } else if (!exists) {<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>          // if table does not exist, then just clone snapshot into new table.<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>          completeConditionalOnFuture(future,<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>            internalRestoreSnapshot(snapshotName, finalTableName, restoreAcl));<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>        } else {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          addListener(isTableDisabled(finalTableName), (disabled, err4) -&gt; {<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            if (err4 != null) {<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>              future.completeExceptionally(err4);<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>            } else if (!disabled) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>              future.completeExceptionally(new TableNotDisabledException(finalTableName));<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>            } else {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>              completeConditionalOnFuture(future,<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>                restoreSnapshot(snapshotName, finalTableName, takeFailSafeSnapshot, restoreAcl));<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>          });<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>        }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      });<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    });<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    return future;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>  }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span><a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>  private CompletableFuture&lt;Void&gt; restoreSnapshot(String snapshotName, TableName tableName,<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>      boolean takeFailSafeSnapshot, boolean restoreAcl) {<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    if (takeFailSafeSnapshot) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>      CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      // Step.1 Take a snapshot of the current state<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>      String failSafeSnapshotSnapshotNameFormat =<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>        this.connection.getConfiguration().get(HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME,<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>          HConstants.DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME);<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      final String failSafeSnapshotSnapshotName =<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        failSafeSnapshotSnapshotNameFormat.replace("{snapshot.name}", snapshotName)<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>          .replace("{table.name}", tableName.toString().replace(TableName.NAMESPACE_DELIM, '.'))<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>          .replace("{restore.timestamp}", String.valueOf(EnvironmentEdgeManager.currentTime()));<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      LOG.info("Taking restore-failsafe snapshot: " + failSafeSnapshotSnapshotName);<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      addListener(snapshot(failSafeSnapshotSnapshotName, tableName), (ret, err) -&gt; {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>        if (err != null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>          future.completeExceptionally(err);<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        } else {<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>          // Step.2 Restore snapshot<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          addListener(internalRestoreSnapshot(snapshotName, tableName, restoreAcl),<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>            (void2, err2) -&gt; {<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>              if (err2 != null) {<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>                // Step.3.a Something went wrong during the restore and try to rollback.<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>                addListener(<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>                  internalRestoreSnapshot(failSafeSnapshotSnapshotName, tableName, restoreAcl),<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>                  (void3, err3) -&gt; {<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>                    if (err3 != null) {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>                      future.completeExceptionally(err3);<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>                    } else {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>                      String msg =<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>                        "Restore snapshot=" + snapshotName + " failed. Rollback to snapshot=" +<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>                          failSafeSnapshotSnapshotName + " succeeded.";<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>                      future.completeExceptionally(new RestoreSnapshotException(msg, err2));<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>                    }<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>                  });<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>              } else {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>                // Step.3.b If the restore is succeeded, delete the pre-restore snapshot.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>                LOG.info("Deleting restore-failsafe snapshot: " + failSafeSnapshotSnapshotName);<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>                addListener(deleteSnapshot(failSafeSnapshotSnapshotName), (ret3, err3) -&gt; {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>                  if (err3 != null) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>                    LOG.error(<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>                      "Unable to remove the failsafe snapshot: " + failSafeSnapshotSnapshotName,<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>                      err3);<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>                    future.completeExceptionally(err3);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>                  } else {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>                    future.complete(ret3);<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>                  }<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>                });<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>              }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>            });<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>        }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      });<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>      return future;<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    } else {<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      return internalRestoreSnapshot(snapshotName, tableName, restoreAcl);<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>    }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  }<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span><a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>  private &lt;T&gt; void completeConditionalOnFuture(CompletableFuture&lt;T&gt; dependentFuture,<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      CompletableFuture&lt;T&gt; parentFuture) {<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>    addListener(parentFuture, (res, err) -&gt; {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      if (err != null) {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>        dependentFuture.completeExceptionally(err);<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      } else {<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        dependentFuture.complete(res);<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>      }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    });<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  @Override<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  public CompletableFuture&lt;Void&gt; cloneSnapshot(String snapshotName, TableName tableName,<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>      boolean restoreAcl) {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    addListener(tableExists(tableName), (exists, err) -&gt; {<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      if (err != null) {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>        future.completeExceptionally(err);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      } else if (exists) {<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>        future.completeExceptionally(new TableExistsException(tableName));<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      } else {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>        completeConditionalOnFuture(future,<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>          internalRestoreSnapshot(snapshotName, tableName, restoreAcl));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    });<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    return future;<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  private CompletableFuture&lt;Void&gt; internalRestoreSnapshot(String snapshotName, TableName tableName,<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>      boolean restoreAcl) {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    SnapshotProtos.SnapshotDescription snapshot = SnapshotProtos.SnapshotDescription.newBuilder()<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>      .setName(snapshotName).setTable(tableName.getNameAsString()).build();<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    try {<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>      ClientSnapshotDescriptionUtils.assertSnapshotRequestIsValid(snapshot);<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    } catch (IllegalArgumentException e) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      return failedFuture(e);<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    }<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    return waitProcedureResult(this.&lt;Long&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>      .&lt;RestoreSnapshotRequest, RestoreSnapshotResponse, Long&gt; call(controller, stub,<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>        RestoreSnapshotRequest.newBuilder().setSnapshot(snapshot).setNonceGroup(ng.getNonceGroup())<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>          .setNonce(ng.newNonce()).setRestoreACL(restoreAcl).build(),<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>        (s, c, req, done) -&gt; s.restoreSnapshot(c, req, done), (resp) -&gt; resp.getProcId()))<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>      .call());<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>  }<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span><a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>  @Override<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots() {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    return getCompletedSnapshots(null);<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>  }<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span><a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>  @Override<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshots(Pattern pattern) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    Preconditions.checkNotNull(pattern,<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      "pattern is null. If you don't specify a pattern, use listSnapshots() instead");<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    return getCompletedSnapshots(pattern);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>  }<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span><a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>  private CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; getCompletedSnapshots(Pattern pattern) {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    return this.&lt;List&lt;SnapshotDescription&gt;&gt; newMasterCaller().action((controller, stub) -&gt; this<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        .&lt;GetCompletedSnapshotsRequest, GetCompletedSnapshotsResponse, List&lt;SnapshotDescription&gt;&gt;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        call(controller, stub, GetCompletedSnapshotsRequest.newBuilder().build(),<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          (s, c, req, done) -&gt; s.getCompletedSnapshots(c, req, done),<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>          resp -&gt; ProtobufUtil.toSnapshotDescriptionList(resp, pattern)))<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>        .call();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>  }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>  @Override<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        + " If you don't specify a tableNamePattern, use listSnapshots() instead");<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    return getCompletedSnapshots(tableNamePattern, null);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  @Override<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>  public CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listTableSnapshots(Pattern tableNamePattern,<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      Pattern snapshotNamePattern) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>        + " If you don't specify a tableNamePattern, use listSnapshots(Pattern) instead");<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>        + " If you don't specify a snapshotNamePattern, use listTableSnapshots(Pattern) instead");<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    return getCompletedSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>  }<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span><a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>  private CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; getCompletedSnapshots(<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      Pattern tableNamePattern, Pattern snapshotNamePattern) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    addListener(listTableNames(tableNamePattern, false), (tableNames, err) -&gt; {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      if (err != null) {<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        future.completeExceptionally(err);<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        return;<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>      }<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>      if (tableNames == null || tableNames.size() &lt;= 0) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>        future.complete(Collections.emptyList());<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        return;<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>      }<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      addListener(getCompletedSnapshots(snapshotNamePattern), (snapshotDescList, err2) -&gt; {<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>        if (err2 != null) {<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>          future.completeExceptionally(err2);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>          return;<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>        }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>        if (snapshotDescList == null || snapshotDescList.isEmpty()) {<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>          future.complete(Collections.emptyList());<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>          return;<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>        }<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>        future.complete(snapshotDescList.stream()<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>          .filter(snap -&gt; (snap != null &amp;&amp; tableNames.contains(snap.getTableName())))<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>          .collect(Collectors.toList()));<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      });<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>    });<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>    return future;<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  }<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span><a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>  @Override<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>  public CompletableFuture&lt;Void&gt; deleteSnapshot(String snapshotName) {<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    return internalDeleteSnapshot(new SnapshotDescription(snapshotName));<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>  @Override<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>  public CompletableFuture&lt;Void&gt; deleteSnapshots() {<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    return internalDeleteSnapshots(null, null);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>  }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span><a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>  @Override<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>  public CompletableFuture&lt;Void&gt; deleteSnapshots(Pattern snapshotNamePattern) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>        + " If you don't specify a snapshotNamePattern, use deleteSnapshots() instead");<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    return internalDeleteSnapshots(null, snapshotNamePattern);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span><a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  @Override<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>  public CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern) {<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>        + " If you don't specify a tableNamePattern, use deleteSnapshots() instead");<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>    return internalDeleteSnapshots(tableNamePattern, null);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>  @Override<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>  public CompletableFuture&lt;Void&gt; deleteTableSnapshots(Pattern tableNamePattern,<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>      Pattern snapshotNamePattern) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>    Preconditions.checkNotNull(tableNamePattern, "tableNamePattern is null."<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        + " If you don't specify a tableNamePattern, use deleteSnapshots(Pattern) instead");<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    Preconditions.checkNotNull(snapshotNamePattern, "snapshotNamePattern is null."<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>        + " If you don't specify a snapshotNamePattern, use deleteSnapshots(Pattern) instead");<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    return internalDeleteSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>  }<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span><a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>  private CompletableFuture&lt;Void&gt; internalDeleteSnapshots(Pattern tableNamePattern,<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      Pattern snapshotNamePattern) {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>    CompletableFuture&lt;List&lt;SnapshotDescription&gt;&gt; listSnapshotsFuture;<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    if (tableNamePattern == null) {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>      listSnapshotsFuture = getCompletedSnapshots(snapshotNamePattern);<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>    } else {<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      listSnapshotsFuture = getCompletedSnapshots(tableNamePattern, snapshotNamePattern);<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    addListener(listSnapshotsFuture, ((snapshotDescriptions, err) -&gt; {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>      if (err != null) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>        future.completeExceptionally(err);<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        return;<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>      }<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      if (snapshotDescriptions == null || snapshotDescriptions.isEmpty()) {<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>        future.complete(null);<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>        return;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      }<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      addListener(CompletableFuture.allOf(snapshotDescriptions.stream()<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        .map(this::internalDeleteSnapshot).toArray(CompletableFuture[]::new)), (v, e) -&gt; {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          if (e != null) {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>            future.completeExceptionally(e);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>          } else {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>            future.complete(v);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>          }<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>        });<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    }));<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    return future;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  private CompletableFuture&lt;Void&gt; internalDeleteSnapshot(SnapshotDescription snapshot) {<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>    return this<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        .&lt;Void&gt; newMasterCaller()<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        .action(<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>          (controller, stub) -&gt; this.&lt;DeleteSnapshotRequest, DeleteSnapshotResponse, Void&gt; call(<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>            controller,<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>            stub,<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>            DeleteSnapshotRequest.newBuilder()<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>                .setSnapshot(ProtobufUtil.createHBaseProtosSnapshotDesc(snapshot)).build(), (s, c,<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>                req, done) -&gt; s.deleteSnapshot(c, req, done), resp -&gt; null)).call();<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  }<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span><a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  @Override<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>  public CompletableFuture&lt;Void&gt; execProcedure(String signature, String instance,<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>      Map&lt;String, String&gt; props) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    ProcedureDescription procDesc =<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>      ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    addListener(this.&lt;Long&gt; newMasterCaller()<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      .action((controller, stub) -&gt; this.&lt;ExecProcedureRequest, ExecProcedureResponse, Long&gt; call(<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>        controller, stub, ExecProcedureRequest.newBuilder().setProcedure(procDesc).build(),<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>        (s, c, req, done) -&gt; s.execProcedure(c, req, done), resp -&gt; resp.getExpectedTimeout()))<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>      .call(), (expectedTimeout, err) -&gt; {<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>        if (err != null) {<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          future.completeExceptionally(err);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>          return;<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>        }<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>        TimerTask pollingTask = new TimerTask() {<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          int tries = 0;<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>          long startTime = EnvironmentEdgeManager.currentTime();<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>          long endTime = startTime + expectedTimeout;<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>          long maxPauseTime = expectedTimeout / maxAttempts;<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>          @Override<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>          public void run(Timeout timeout) throws Exception {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>            if (EnvironmentEdgeManager.currentTime() &lt; endTime) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>              addListener(isProcedureFinished(signature, instance, props), (done, err2) -&gt; {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>                if (err2 != null) {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>                  future.completeExceptionally(err2);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>                  return;<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>                }<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>                if (done) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>                  future.complete(null);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>                } else {<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>                  // retry again after pauseTime.<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>                  long pauseTime =<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>                    ConnectionUtils.getPauseTime(TimeUnit.NANOSECONDS.toMillis(pauseNs), ++tries);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>                  pauseTime = Math.min(pauseTime, maxPauseTime);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>                  AsyncConnectionImpl.RETRY_TIMER.newTimeout(this, pauseTime,<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>                    TimeUnit.MICROSECONDS);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>                }<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>              });<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            } else {<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>              future.completeExceptionally(new IOException("Procedure '" + signature + " : " +<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>                instance + "' wasn't completed in expectedTime:" + expectedTimeout + " ms"));<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>            }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>          }<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>        };<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>        // Queue the polling task into RETRY_TIMER to poll procedure state asynchronously.<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>        AsyncConnectionImpl.RETRY_TIMER.newTimeout(pollingTask, 1, TimeUnit.MILLISECONDS);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      });<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    return future;<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span><a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  @Override<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  public CompletableFuture&lt;byte[]&gt; execProcedureWithReturn(String signature, String instance,<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>      Map&lt;String, String&gt; props) {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    ProcedureDescription proDesc =<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>    return this.&lt;byte[]&gt; newMasterCaller()<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        .action(<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>          (controller, stub) -&gt; this.&lt;ExecProcedureRequest, ExecProcedureResponse, byte[]&gt; call(<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>            controller, stub, ExecProcedureRequest.newBuilder().setProcedure(proDesc).build(),<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>            (s, c, req, done) -&gt; s.execProcedureWithRet(c, req, done),<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>            resp -&gt; resp.hasReturnData() ? resp.getReturnData().toByteArray() : null))<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        .call();<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  }<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span><a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>  @Override<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  public CompletableFuture&lt;Boolean&gt; isProcedureFinished(String signature, String instance,<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      Map&lt;String, String&gt; props) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    ProcedureDescription proDesc =<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>        ProtobufUtil.buildProcedureDescription(signature, instance, props);<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    return this.&lt;Boolean&gt; newMasterCaller()<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        .action((controller, stub) -&gt; this<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>            .&lt;IsProcedureDoneRequest, IsProcedureDoneResponse, Boolean&gt; call(controller, stub,<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>              IsProcedureDoneRequest.newBuilder().setProcedure(proDesc).build(),<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>              (s, c, req, done) -&gt; s.isProcedureDone(c, req, done), resp -&gt; resp.getDone()))<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        .call();<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  @Override<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  public CompletableFuture&lt;Boolean&gt; abortProcedure(long procId, boolean mayInterruptIfRunning) {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return this.&lt;Boolean&gt; newMasterCaller().action(<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      (controller, stub) -&gt; this.&lt;AbortProcedureRequest, AbortProcedureResponse, Boolean&gt; call(<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        controller, stub, AbortProcedureRequest.newBuilder().setProcId(procId).build(),<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>        (s, c, req, done) -&gt; s.abortProcedure(c, req, done), resp -&gt; resp.getIsProcedureAborted()))<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>        .call();<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span><a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>  @Override<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  public CompletableFuture&lt;String&gt; getProcedures() {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    return this<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>        .&lt;String&gt; newMasterCaller()<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        .action(<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>          (controller, stub) -&gt; this<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>              .&lt;GetProceduresRequest, GetProceduresResponse, String&gt; call(<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>                controller, stub, GetProceduresRequest.newBuilder().build(),<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>                (s, c, req, done) -&gt; s.getProcedures(c, req, done),<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>                resp -&gt; ProtobufUtil.toProcedureJson(resp.getProcedureList()))).call();<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span><a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  @Override<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  public CompletableFuture&lt;String&gt; getLocks() {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>    return this<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>        .&lt;String&gt; newMasterCaller()<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        .action(<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>          (controller, stub) -&gt; this.&lt;GetLocksRequest, GetLocksResponse, String&gt; call(<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>            controller, stub, GetLocksRequest.newBuilder().build(),<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>            (s, c, req, done) -&gt; s.getLocks(c, req, done),<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>            resp -&gt; ProtobufUtil.toLockJson(resp.getLockList()))).call();<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>  }<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span><a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  @Override<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>  public CompletableFuture&lt;Void&gt; decommissionRegionServers(List&lt;ServerName&gt; servers, boolean offload) {<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>        .action((controller, stub) -&gt; this<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>          .&lt;DecommissionRegionServersRequest, DecommissionRegionServersResponse, Void&gt; call(<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>            controller, stub, RequestConverter.buildDecommissionRegionServersRequest(servers, offload),<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>            (s, c, req, done) -&gt; s.decommissionRegionServers(c, req, done), resp -&gt; null))<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>        .call();<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>  }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span><a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>  @Override<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public CompletableFuture&lt;List&lt;ServerName&gt;&gt; listDecommissionedRegionServers() {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    return this.&lt;List&lt;ServerName&gt;&gt; newMasterCaller()<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>        .action((controller, stub) -&gt; this<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>          .&lt;ListDecommissionedRegionServersRequest, ListDecommissionedRegionServersResponse,<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>            List&lt;ServerName&gt;&gt; call(<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>              controller, stub, ListDecommissionedRegionServersRequest.newBuilder().build(),<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>              (s, c, req, done) -&gt; s.listDecommissionedRegionServers(c, req, done),<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>              resp -&gt; resp.getServerNameList().stream().map(ProtobufUtil::toServerName)<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>                  .collect(Collectors.toList())))<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        .call();<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span><a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>  @Override<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>  public CompletableFuture&lt;Void&gt; recommissionRegionServer(ServerName server,<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>      List&lt;byte[]&gt; encodedRegionNames) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    return this.&lt;Void&gt; newMasterCaller()<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>        .action((controller, stub) -&gt; this<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          .&lt;RecommissionRegionServerRequest, RecommissionRegionServerResponse, Void&gt; call(controller,<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            stub, RequestConverter.buildRecommissionRegionServerRequest(server, encodedRegionNames),<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            (s, c, req, done) -&gt; s.recommissionRegionServer(c, req, done), resp -&gt; null))<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        .call();<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>  }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span><a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>  /**<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>   * Get the region location for the passed region name. The region name may be a full region name<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>   * or encoded region name. If the region does not found, then it'll throw an<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>   * UnknownRegionException wrapped by a {@link CompletableFuture}<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>   * @param regionNameOrEncodedRegionName region name or encoded region name<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>   * @return region location, wrapped by a {@link CompletableFuture}<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>   */<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>  @VisibleForTesting<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>  CompletableFuture&lt;HRegionLocation&gt; getRegionLocation(byte[] regionNameOrEncodedRegionName) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    if (regionNameOrEncodedRegionName == null) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      return failedFuture(new IllegalArgumentException("Passed region name can't be null"));<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    try {<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      CompletableFuture&lt;Optional&lt;HRegionLocation&gt;&gt; future;<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      if (RegionInfo.isEncodedRegionName(regionNameOrEncodedRegionName)) {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>        String encodedName = Bytes.toString(regionNameOrEncodedRegionName);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>        if (encodedName.length() &lt; RegionInfo.MD5_HEX_LENGTH) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>          // old format encodedName, should be meta region<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>          future = connection.registry.getMetaRegionLocation()<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>            .thenApply(locs -&gt; Stream.of(locs.getRegionLocations())<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>              .filter(loc -&gt; loc.getRegion().getEncodedName().equals(encodedName)).findFirst());<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>        } else {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>          future = AsyncMetaTableAccessor.getRegionLocationWithEncodedName(metaTable,<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>            regionNameOrEncodedRegionName);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>        }<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      } else {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>        RegionInfo regionInfo =<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>          MetaTableAccessor.parseRegionInfoFromRegionName(regionNameOrEncodedRegionName);<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>        if (regionInfo.isMetaRegion()) {<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>          future = connection.registry.getMetaRegionLocation()<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>            .thenApply(locs -&gt; Stream.of(locs.getRegionLocations())<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>              .filter(loc -&gt; loc.getRegion().getReplicaId() == regionInfo.getReplicaId())<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>              .findFirst());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        } else {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          future =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            AsyncMetaTableAccessor.getRegionLocation(metaTable, regionNameOrEncodedRegionName);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        }<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      }<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span><a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      CompletableFuture&lt;HRegionLocation&gt; returnedFuture = new CompletableFuture&lt;&gt;();<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>      addListener(future, (location, err) -&gt; {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        if (err != null) {<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>          returnedFuture.completeExceptionally(err);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          return;<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>        }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        if (!location.isPresent() || location.get().getRegion() == null) {<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          returnedFuture.completeExceptionally(<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>            new UnknownRegionException("Invalid region name or encoded region name: " +<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>              Bytes.toStringBinary(regionNameOrEncodedRegionName)));<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>        } else {<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>          returnedFuture.complete(location.get());<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        }<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>      });<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>      return returnedFuture;<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    } catch (IOException e) {<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      return failedFuture(e);<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>  }<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span><a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  /**<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>   * Get the region info for the passed region name. The region name may be a full region name or<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>   * encoded region name. If the region does not found, then it'll throw an UnknownRegionException<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>   * wrapped by a {@link CompletableFuture}<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>   * @param regionNameOrEncodedRegionName<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>   * @return region info, wrapped by a {@link CompletableFuture}<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>   */<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>  private CompletableFuture&lt;RegionInfo&gt; getRegionInfo(byte[] regionNameOrEncodedRegionName) {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    if (regionNameOrEncodedRegionName == null) {<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>      return failedFuture(new IllegalArgumentException("Passed region name can't be null"));<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    }<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span><a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    if (Bytes.equals(regionNameOrEncodedRegionName,<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>      RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName()) ||<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      Bytes.equals(regionNameOrEncodedRegionName,<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>        RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedNameAsBytes())) {<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      return CompletableFuture.completedFuture(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    }<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span><a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    CompletableFuture&lt;RegionInfo&gt; future = new CompletableFuture&lt;&gt;();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    addListener(getRegionLocation(regionNameOrEncodedRegionName), (location, err) -&gt; {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>      if (err != null) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>        future.completeExceptionally(err);<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>        future.complete(location.getRegion());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>      }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    });<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>    return future;<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  }<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span><a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>  private byte[][] getSplitKeys(byte[] startKey, byte[] endKey, int numRegions) {<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    if (numRegions &lt; 3) {<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      throw new IllegalArgumentException("Must create at least three regions");<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    } else if (Bytes.compareTo(startKey, endKey) &gt;= 0) {<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>      throw new IllegalArgumentException("Start key must be smaller than end key");<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    }<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    if (numRegions == 3) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>      return new byte[][] { startKey, endKey };<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    }<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    if (splitKeys == null || splitKeys.length != numRegions - 1) {<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>      throw new IllegalArgumentException("Unable to split key range into enough regions");<a name="line.2404"></a>
... 131527 lines suppressed ...