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/09/15 14:42:00 UTC

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

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 05472b5  Published site at 1cb4f687c1772d6b80d383247978efd7b05520d7.
05472b5 is described below

commit 05472b5f0159c7ce9ccc948a1c029f94b60fa13c
Author: jenkins <bu...@apache.org>
AuthorDate: Sun Sep 15 14:41:45 2019 +0000

    Published site at 1cb4f687c1772d6b80d383247978efd7b05520d7.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |  162 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/constant-values.html                    |    4 +-
 devapidocs/index-all.html                          |    2 +
 .../apache/hadoop/hbase/backup/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/client/package-tree.html   |   22 +-
 .../apache/hadoop/hbase/executor/package-tree.html |    2 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |    4 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |    2 +-
 .../org/apache/hadoop/hbase/http/package-tree.html |    2 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    4 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html       |    2 +-
 .../hbase/master/assignment/package-tree.html      |    2 +-
 .../apache/hadoop/hbase/master/package-tree.html   |    4 +-
 .../hbase/master/procedure/package-tree.html       |    2 +-
 .../hadoop/hbase/monitoring/package-tree.html      |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   12 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    4 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |    6 +-
 .../regionserver/RSRpcServices.LogDelegate.html    |    4 +-
 .../RSRpcServices.RegionScannerCloseCallBack.html  |    8 +-
 .../RSRpcServices.RegionScannerHolder.html         |   24 +-
 ...RSRpcServices.RegionScannerShippedCallBack.html |   12 +-
 .../RSRpcServices.RegionScannersCloseCallBack.html |   10 +-
 .../RSRpcServices.ScannerListener.html             |    8 +-
 .../hadoop/hbase/regionserver/RSRpcServices.html   |  416 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   18 +-
 .../regionserver/querymatcher/package-tree.html    |    2 +-
 .../hbase/regionserver/wal/package-tree.html       |    2 +-
 .../hadoop/hbase/replication/package-tree.html     |    2 +-
 .../hadoop/hbase/rest/model/package-tree.html      |    2 +-
 .../hadoop/hbase/security/access/package-tree.html |    6 +-
 .../apache/hadoop/hbase/security/package-tree.html |    2 +-
 .../hbase/snapshot/RestoreSnapshotHelper.html      |   24 +-
 .../hadoop/hbase/snapshot/SnapshotManifest.html    |   40 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |   10 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../src-html/org/apache/hadoop/hbase/Version.html  |    4 +-
 .../regionserver/RSRpcServices.LogDelegate.html    | 7494 ++++++++++----------
 .../RSRpcServices.RegionScannerCloseCallBack.html  | 7494 ++++++++++----------
 .../RSRpcServices.RegionScannerHolder.html         | 7494 ++++++++++----------
 ...RSRpcServices.RegionScannerShippedCallBack.html | 7494 ++++++++++----------
 .../RSRpcServices.RegionScannersCloseCallBack.html | 7494 ++++++++++----------
 .../RSRpcServices.ScannerListener.html             | 7494 ++++++++++----------
 .../hadoop/hbase/regionserver/RSRpcServices.html   | 7494 ++++++++++----------
 .../RestoreSnapshotHelper.RestoreMetaChanges.html  |  749 +-
 .../hbase/snapshot/RestoreSnapshotHelper.html      |  749 +-
 .../snapshot/SnapshotManifest.RegionVisitor.html   |  809 +--
 .../hadoop/hbase/snapshot/SnapshotManifest.html    |  809 +--
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-tracking.html                                |    2 +-
 mail-lists.html                                    |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 project-summary.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 source-repository.html                             |    2 +-
 sponsors.html                                      |    2 +-
 supportingprojects.html                            |    2 +-
 team-list.html                                     |    2 +-
 testdevapidocs/index-all.html                      |    2 +
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    4 +-
 .../hadoop/hbase/regionserver/package-tree.html    |    4 +-
 ...estReplicationSyncUpToolWithBulkLoadedData.html |   54 +-
 .../org/apache/hadoop/hbase/test/package-tree.html |    4 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 ...estReplicationSyncUpToolWithBulkLoadedData.html |  431 +-
 88 files changed, 28580 insertions(+), 28405 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index e901842..d27a839 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -450,7 +450,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-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</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 15c3e67..b2c677c 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:20190914143840+00'00')
-/CreationDate (D:20190914143840+00'00')
+/ModDate (D:20190915143846+00'00')
+/CreationDate (D:20190915143846+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index 9c88139..fa5e36f 100644
--- a/book.html
+++ b/book.html
@@ -43161,7 +43161,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-09-14 14:29:49 UTC
+Last updated 2019-09-15 14:29:54 UTC
 </div>
 </div>
 </body>
diff --git a/bulk-loads.html b/bulk-loads.html
index f26b303..686d67c 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -155,7 +155,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-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</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 c3c7067..c1a9b69 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -61730,385 +61730,385 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>401</td></tr>
+<td>402</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'class def modifier' has incorrect indentation level 3, expected level should be 2.</td>
-<td>410</td></tr>
+<td>411</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>546</td></tr>
+<td>547</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>576</td></tr>
+<td>577</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>670</td></tr>
+<td>671</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>719</td></tr>
+<td>720</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>720</td></tr>
+<td>721</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>722</td></tr>
+<td>723</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>772</td></tr>
+<td>773</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 161 lines (max allowed is 150).</td>
-<td>777</td></tr>
+<td>778</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>791</td></tr>
+<td>792</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
-<td>807</td></tr>
+<td>808</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>989</td></tr>
+<td>990</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>990</td></tr>
+<td>991</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>991</td></tr>
+<td>992</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>1107</td></tr>
+<td>1108</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1108</td></tr>
+<td>1109</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>1109</td></tr>
+<td>1110</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1112</td></tr>
+<td>1113</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'RegionScanner' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1336</td></tr>
+<td>1337</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1535</td></tr>
+<td>1536</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ClientService' has incorrect indentation level 6, expected level should be 8.</td>
-<td>1545</td></tr>
+<td>1546</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ClientService' has incorrect indentation level 6, expected level should be 8.</td>
-<td>1546</td></tr>
+<td>1547</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'AdminService' has incorrect indentation level 6, expected level should be 8.</td>
-<td>1550</td></tr>
+<td>1551</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'AdminService' has incorrect indentation level 6, expected level should be 8.</td>
-<td>1551</td></tr>
+<td>1552</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
-<td>1583</td></tr>
+<td>1584</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1608</td></tr>
+<td>1609</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>1641</td></tr>
+<td>1642</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1708</td></tr>
+<td>1709</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>1884</td></tr>
+<td>1885</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1987</td></tr>
+<td>1988</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 121).</td>
-<td>2005</td></tr>
+<td>2006</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'regionServer' has incorrect indentation level 14, expected level should be 16.</td>
-<td>2095</td></tr>
+<td>2096</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'regionOpenInfo' has incorrect indentation level 16, expected level should be 18.</td>
-<td>2099</td></tr>
+<td>2100</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'regionServer' has incorrect indentation level 16, expected level should be 18.</td>
-<td>2103</td></tr>
+<td>2104</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'regionServer' has incorrect indentation level 16, expected level should be 18.</td>
-<td>2106</td></tr>
+<td>2107</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2134</td></tr>
+<td>2135</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>2180</td></tr>
+<td>2181</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2296</td></tr>
+<td>2297</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>2327</td></tr>
+<td>2328</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2351</td></tr>
+<td>2352</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>2521</td></tr>
+<td>2531</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2708</td></tr>
+<td>2718</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 157 lines (max allowed is 150).</td>
-<td>2877</td></tr>
+<td>2887</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>3013</td></tr>
+<td>3023</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be 12.</td>
-<td>3014</td></tr>
+<td>3024</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 14.</td>
-<td>3015</td></tr>
+<td>3025</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be 12.</td>
-<td>3016</td></tr>
+<td>3026</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child has incorrect indentation level 12, expected level should be 14.</td>
-<td>3017</td></tr>
+<td>3027</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else rcurly' has incorrect indentation level 10, expected level should be 12.</td>
-<td>3019</td></tr>
+<td>3029</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
-<td>3020</td></tr>
+<td>3030</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>3021</td></tr>
+<td>3031</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be 12.</td>
-<td>3022</td></tr>
+<td>3032</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 14.</td>
-<td>3023</td></tr>
+<td>3033</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be 12.</td>
-<td>3024</td></tr>
+<td>3034</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child has incorrect indentation level 12, expected level should be 14.</td>
-<td>3025</td></tr>
+<td>3035</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else rcurly' has incorrect indentation level 10, expected level should be 12.</td>
-<td>3027</td></tr>
+<td>3037</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
-<td>3028</td></tr>
+<td>3038</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>3029</td></tr>
+<td>3039</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
-<td>3030</td></tr>
+<td>3040</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
-<td>3040</td></tr>
+<td>3050</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 181 lines (max allowed is 150).</td>
-<td>3193</td></tr>
+<td>3203</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3383</td></tr>
+<td>3393</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 232 lines (max allowed is 150).</td>
-<td>3385</td></tr></table></div>
+<td>3395</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.java</h3>
 <table border="0" class="table table-striped">
@@ -81947,73 +81947,73 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>566</td></tr>
+<td>569</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>584</td></tr>
+<td>587</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>638</td></tr>
+<td>643</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>661</td></tr>
+<td>668</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>727</td></tr>
+<td>734</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>804</td></tr>
+<td>811</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>818</td></tr>
+<td>825</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>819</td></tr>
+<td>826</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>820</td></tr>
+<td>827</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>821</td></tr>
+<td>828</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>822</td></tr>
+<td>829</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>823</td></tr></table></div>
+<td>830</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils.java">org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.java</h3>
 <table border="0" class="table table-striped">
@@ -82178,25 +82178,25 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>338</td></tr>
+<td>341</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>422</td></tr>
+<td>425</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>460</td></tr>
+<td>463</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>563</td></tr></table></div>
+<td>566</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.SnapshotManifestV2.java">org/apache/hadoop/hbase/snapshot/SnapshotManifestV2.java</h3>
 <table border="0" class="table table-striped">
@@ -92795,7 +92795,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-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index 282a6ab..a6b1e21 100644
--- a/coc.html
+++ b/coc.html
@@ -224,7 +224,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</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 2e66f84..de229a4 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -296,7 +296,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-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</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 6f7ff85..4666a85 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -541,7 +541,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-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</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 b25a013..2dcfedb 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -177,7 +177,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-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</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 d83f3f9..5fdc299 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -899,7 +899,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-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-15</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 6b8e277..486e491 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3999,14 +3999,14 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Sat Sep 14 14:34:54 UTC 2019"</code></td>
+<td class="colLast"><code>"Sun Sep 15 14:34:53 UTC 2019"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"3583ef747684a090868daebff01eaa0aca997405"</code></td>
+<td class="colLast"><code>"1cb4f687c1772d6b80d383247978efd7b05520d7"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 7b26cd8..78dd6e1 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -40389,6 +40389,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem--">getFileSystem()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getFileSystem-java.util.List-">getFileSystem(List&lt;String&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/Store.html#getFileSystem--">getFileSystem()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html#getFileSystem--">getFileSystem()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSyncUp.DummyServer</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 54e5ea1..1df0480 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,8 +167,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 301ce13..d6e36d4 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -424,21 +424,21 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index 127caa7..531254c 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index dc9b3e3..dc20e33 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -189,12 +189,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index 9eebaf0..abc40ba 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index 30d5e24..1133c69 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -138,8 +138,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index c6d89f4..66ab650 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -299,10 +299,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 148fecd..d288952 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -353,9 +353,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 93c0a53..a5dca14 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -296,10 +296,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index b3e7c99..b988a3c 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -151,8 +151,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index b79db90..ec82fcf 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -359,12 +359,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 8d5f771..5ea7aac 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -216,8 +216,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 452eaee..7524d90 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -127,8 +127,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index e2e5976..c0b18e6 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -424,19 +424,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index c2fd944..c2c572f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 240f579..3d0f6e1 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
index 0cf6425..b7d986f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1185">RSRpcServices.LogDelegate</a></pre>
+<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1186">RSRpcServices.LogDelegate</a></pre>
 </li>
 </ul>
 </div>
@@ -151,7 +151,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logBatchWarning</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html#line.1186">logBatchWarning</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;firstRegionName,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html#line.1187">logBatchWarning</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;firstRegionName,
                      int&nbsp;sum,
                      int&nbsp;rowSizeWarnThreshold)</pre>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
index 11b3170..e092669 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.366">RSRpcServices.RegionScannerCloseCallBack</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.367">RSRpcServices.RegionScannerCloseCallBack</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">An Rpc callback for closing a RegionScanner.</div>
@@ -209,7 +209,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>scanner</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.368">scanner</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.369">scanner</a></pre>
 </li>
 </ul>
 </li>
@@ -226,7 +226,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannerCloseCallBack</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.370">RegionScannerCloseCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.371">RegionScannerCloseCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
 </li>
 </ul>
 </li>
@@ -243,7 +243,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.375">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.376">run</a>()
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run--">RpcCallback</a></code></span></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
index 256c872..2c6bd6b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.432">RSRpcServices.RegionScannerHolder</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.433">RSRpcServices.RegionScannerHolder</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.</div>
 </li>
@@ -239,7 +239,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>nextCallSeq</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.434">nextCallSeq</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.435">nextCallSeq</a></pre>
 </li>
 </ul>
 <a name="scannerName">
@@ -248,7 +248,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerName</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.435">scannerName</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.436">scannerName</a></pre>
 </li>
 </ul>
 <a name="s">
@@ -257,7 +257,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>s</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.436">s</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.437">s</a></pre>
 </li>
 </ul>
 <a name="r">
@@ -266,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>r</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.437">r</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.438">r</a></pre>
 </li>
 </ul>
 <a name="closeCallBack">
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>closeCallBack</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.438">closeCallBack</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.439">closeCallBack</a></pre>
 </li>
 </ul>
 <a name="shippedCallback">
@@ -284,7 +284,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shippedCallback</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.439">shippedCallback</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.440">shippedCallback</a></pre>
 </li>
 </ul>
 <a name="rowOfLastPartialResult">
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rowOfLastPartialResult</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.440">rowOfLastPartialResult</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.441">rowOfLastPartialResult</a></pre>
 </li>
 </ul>
 <a name="needCursor">
@@ -302,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>needCursor</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.441">needCursor</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.442">needCursor</a></pre>
 </li>
 </ul>
 </li>
@@ -319,7 +319,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannerHolder</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.443">RegionScannerHolder</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;scannerName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.444">RegionScannerHolder</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;scannerName,
                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;s,
                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                            <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a>&nbsp;closeCallBack,
@@ -341,7 +341,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextCallSeq</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.453">getNextCallSeq</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.454">getNextCallSeq</a>()</pre>
 </li>
 </ul>
 <a name="incNextCallSeq-long-">
@@ -350,7 +350,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>incNextCallSeq</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.457">incNextCallSeq</a>(long&nbsp;currentSeq)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.458">incNextCallSeq</a>(long&nbsp;currentSeq)</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
index ee4e214..13106f7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.383">RSRpcServices.RegionScannerShippedCallBack</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.384">RSRpcServices.RegionScannerShippedCallBack</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">An Rpc callback for doing shipped() call on a RegionScanner.</div>
@@ -219,7 +219,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerName</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.385">scannerName</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.386">scannerName</a></pre>
 </li>
 </ul>
 <a name="shipper">
@@ -228,7 +228,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>shipper</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html" title="interface in org.apache.hadoop.hbase.regionserver">Shipper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.386">shipper</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html" title="interface in org.apache.hadoop.hbase.regionserver">Shipper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.387">shipper</a></pre>
 </li>
 </ul>
 <a name="lease">
@@ -237,7 +237,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lease</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.387">lease</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.388">lease</a></pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannerShippedCallBack</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.389">RegionScannerShippedCallBack</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;scannerName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.390">RegionScannerShippedCallBack</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;scannerName,
                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html" title="interface in org.apache.hadoop.hbase.regionserver">Shipper</a>&nbsp;shipper,
                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a>&nbsp;lease)</pre>
 </li>
@@ -273,7 +273,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.396">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.397">run</a>()
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run--">RpcCallback</a></code></span></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
index ff0be3e..11e2a6f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.410">RSRpcServices.RegionScannersCloseCallBack</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.411">RSRpcServices.RegionScannersCloseCallBack</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">An RpcCallBack that creates a list of scanners that needs to perform callBack operation on
@@ -214,7 +214,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>scanners</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.411">scanners</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.412">scanners</a></pre>
 </li>
 </ul>
 </li>
@@ -231,7 +231,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannersCloseCallBack</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.410">RegionScannersCloseCallBack</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.411">RegionScannersCloseCallBack</a>()</pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>addScanner</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.413">addScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.414">addScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
 </li>
 </ul>
 <a name="run--">
@@ -257,7 +257,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.418">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.419">run</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run--">RpcCallback</a></code></span></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
index 1a4ace2..c263b4a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.467">RSRpcServices.ScannerListener</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.468">RSRpcServices.ScannerListener</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseListener.html" title="interface in org.apache.hadoop.hbase.regionserver">LeaseListener</a></pre>
 <div class="block">Instantiated as a scanner lease. If the lease times out, the scanner is
@@ -210,7 +210,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseLis
 <ul class="blockListLast">
 <li class="blockList">
 <h4>scannerName</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.468">scannerName</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.469">scannerName</a></pre>
 </li>
 </ul>
 </li>
@@ -227,7 +227,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseLis
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScannerListener</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.470">ScannerListener</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;n)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.471">ScannerListener</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;n)</pre>
 </li>
 </ul>
 </li>
@@ -244,7 +244,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseLis
 <ul class="blockListLast">
 <li class="blockList">
 <h4>leaseExpired</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.475">leaseExpired</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.476">leaseExpired</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseListener.html#leaseExpired--">LeaseListener</a></code></span></div>
 <div class="block">When a lease expires, this method is called.</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index 76e78ac..64f7ab4 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":9,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":9,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i5 [...]
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":9,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":9,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i5 [...]
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.261">RSRpcServices</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.262">RSRpcServices</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRPCErrorHandler</a>, org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface, org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface, <a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunct [...]
 <div class="block">Implements the regionserver RPC services.</div>
@@ -686,20 +686,24 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 </td>
 </tr>
 <tr id="i46" class="altColor">
+<td class="colFirst"><code>private org.apache.hadoop.fs.FileSystem</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getFileSystem-java.util.List-">getFileSystem</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="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;filePaths [...]
+</tr>
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getHostname-org.apache.hadoop.conf.Configuration-boolean-">getHostname</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
            boolean&nbsp;isMaster)</code>&nbsp;</td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getOnlineRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest-">getOnlineRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getPriority--">getPriority</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getPriority-org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader-org.apache.hbase.thirdparty.com.google.protobuf.Message-org.apache.hadoop.hbase.security.User-">getPriority</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
            org.apache.hbase.thirdparty.com.google.protobuf.Message&nbsp;param,
@@ -707,119 +711,119 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Returns the 'priority type' of the specified request.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier-">getRegion</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)</code>
 <div class="block">Find the HRegion based on a region specifier</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRegionInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest-">getRegionInfo</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRegionLoad-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest-">getRegionLoad</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRegions-java.util.List-org.apache.hadoop.hbase.CacheEvictionStatsBuilder-">getRegions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier&gt;&nbsp;regionSpecifiers,
           <a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStatsBuilder.html" title="class in org.apache.hadoop.hbase">CacheEvictionStatsBuilder</a>&nbsp;stats)</code>
 <div class="block">Find the List of HRegions based on a list of region specifiers</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRegionScanner-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest-">getRegionScanner</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getResultOrException-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Result-int-">getResultOrException</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Result&nbsp;r,
                     int&nbsp;index)</code>&nbsp;</td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getResultOrException-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException.Builder-int-">getResultOrException</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
                     int&nbsp;index)</code>&nbsp;</td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getResultOrException-java.lang.Exception-int-">getResultOrException</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
                     int&nbsp;index)</code>&nbsp;</td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRpcQuotaManager--">getRpcQuotaManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.html" title="class in org.apache.hadoop.hbase.ipc">RpcScheduler</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRpcScheduler--">getRpcScheduler</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRpcSchedulerFactoryClass--">getRpcSchedulerFactoryClass</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getScanDetailsWithId-long-">getScanDetailsWithId</a></span>(long&nbsp;scannerId)</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getScanner-long-">getScanner</a></span>(long&nbsp;scannerId)</code>&nbsp;</td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getScannersCount--">getScannersCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getScannerVirtualTime-long-">getScannerVirtualTime</a></span>(long&nbsp;scannerId)</code>
 <div class="block">Get the vtime associated with the scanner.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getServerInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest-">getServerInfo</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest&nbsp;request)</code>
 <div class="block">Get some information of the region server.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code>protected <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/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getServices--">getServices</a></span>()</code>
 <div class="block">By default, put up an Admin and a Client Service.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getSocketAddress--">getSocketAddress</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getSpaceQuotaManager--">getSpaceQuotaManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getSpaceQuotaSnapshots-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest-">getSpaceQuotaSnapshots</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                       org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getStoreFile-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest-">getStoreFile</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getTimeLimit-org.apache.hadoop.hbase.ipc.HBaseRpcController-boolean-">getTimeLimit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
             boolean&nbsp;allowHeartbeatMessages)</code>&nbsp;</td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getZkPermissionWatcher--">getZkPermissionWatcher</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#increment-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.quotas.OperationQuota-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto-org.apache.hadoop.hbase.CellScanner-long-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-">increment</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver [...]
          <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
@@ -830,83 +834,83 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Execute an increment mutation.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#isClientCellBlockSupport-org.apache.hadoop.hbase.ipc.RpcCallContext-">isClientCellBlockSupport</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</code>&nbsp;</td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#isReplicationRequest-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action-">isReplicationRequest</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action)</code>&nbsp;</td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#multi-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest-">multi</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
      org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)</code>
 <div class="block">Execute multiple actions on a table: get, mutate, and/or execCoprocessor</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#mutate-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest-">mutate</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
       org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest&nbsp;request)</code>
 <div class="block">Mutate data in a table.</div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#newRegionScanner-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder-">newRegionScanner</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder)</code>&nbsp;</td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></span>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</code>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#openRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest-">openRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
           org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)</code>
 <div class="block">Open asynchronously a region or a set of regions on the region server.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#prepareBulkLoad-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest-">prepareBulkLoad</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#rejectIfInStandByState-org.apache.hadoop.hbase.regionserver.HRegion-">rejectIfInStandByState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#replay-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replay</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
       org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)</code>
 <div class="block">Replay the given changes when distributedLogReplay WAL edits from a failed RS.</div>
 </td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#replicateWALEntry-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replicateWALEntry</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)</code>
 <div class="block">Replicate WAL entries on the region server.</div>
 </td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#requirePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">requirePermission</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;request,
                  <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;perm)</code>&nbsp;</td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#rollWALWriter-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest-">rollWALWriter</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest&nbsp;request)</code>
 <div class="block">Roll the WAL writer of the region server.</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#rpcPreCheck-java.lang.String-">rpcPreCheck</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;requestName)</code>
 <div class="block">Checks for the following pre-checks in order:
@@ -916,7 +920,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
  </div>
 </td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#scan-org.apache.hadoop.hbase.ipc.HBaseRpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest-org.apache.hadoop.hbase.regionserver.RSRpcServices.RegionScannerHolder-long-int-int-java.util.List-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder-org.apache.commons.lang3.mutable.MutableObject- [...]
     org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
@@ -929,83 +933,83 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
     org.apache.commons.lang3.mutable.MutableObject&lt;<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>&gt;&nbsp;lastBlock,
     <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</code>&nbsp;</td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#scan-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest-">scan</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
     org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)</code>
 <div class="block">Scan data in a table.</div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#shouldRejectRequestsFromClient-org.apache.hadoop.hbase.regionserver.HRegion-">shouldRejectRequestsFromClient</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#skipCellsForMutation-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action-org.apache.hadoop.hbase.CellScanner-">skipCellsForMutation</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action,
                     <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner)</code>&nbsp;</td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#skipCellsForMutations-java.util.List-org.apache.hadoop.hbase.CellScanner-">skipCellsForMutations</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
                      <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner)</code>&nbsp;</td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#start-org.apache.hadoop.hbase.zookeeper.ZKWatcher-">start</a></span>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkWatcher)</code>&nbsp;</td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#startNonceOperation-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto-long-">startNonceOperation</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                    long&nbsp;nonceGroup)</code>
 <div class="block">Starts the nonce operation for a mutation, if needed.</div>
 </td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#stop--">stop</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#stopServer-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest-">stopServer</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
           org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest&nbsp;request)</code>
 <div class="block">Stop the region server.</div>
 </td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#throwOnWrongStartCode-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest-">throwOnWrongStartCode</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#throwOnWrongStartCode-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest-">throwOnWrongStartCode</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)</code>&nbsp;</td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#throwOnWrongStartCode-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest-">throwOnWrongStartCode</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#throwOnWrongStartCode-long-">throwOnWrongStartCode</a></span>(long&nbsp;serverStartCode)</code>&nbsp;</td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#updateConfiguration-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest-">updateConfiguration</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#updateFavoredNodes-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest-">updateFavoredNodes</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                   org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#updateMutationMetrics-org.apache.hadoop.hbase.regionserver.HRegion-long-boolean-boolean-">updateMutationMetrics</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                      long&nbsp;starttime,
                      boolean&nbsp;batchContainsPuts,
                      boolean&nbsp;batchContainsDelete)</code>&nbsp;</td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#warmupRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest-">warmupRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest&nbsp;request)</code>
@@ -1040,7 +1044,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.264">LOG</a></pre>
+<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.265">LOG</a></pre>
 </li>
 </ul>
 <a name="REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS">
@@ -1049,7 +1053,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.267">REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.268">REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
 <div class="block">RPC scheduler to use for the region server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1063,7 +1067,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_RPC_SCHEDULER_FACTORY_CLASS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.271">MASTER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.272">MASTER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
 <div class="block">RPC scheduler to use for the master.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1077,7 +1081,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.279">REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.280">REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
 <div class="block">Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This
  configuration exists to prevent the scenario where a time limit is specified to be so
  restrictive that the time limit is reached immediately (before any cells are scanned).</div>
@@ -1093,7 +1097,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.284">DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.285">DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
 <div class="block">Default value of <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA"><code>REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</code></a></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1107,7 +1111,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_NAME</h4>
-<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.289">BATCH_ROWS_THRESHOLD_NAME</a></pre>
+<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.290">BATCH_ROWS_THRESHOLD_NAME</a></pre>
 <div class="block">Number of rows in a batch operation above which a warning will be logged.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1121,7 +1125,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_DEFAULT</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.293">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.294">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
 <div class="block">Default value of <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#BATCH_ROWS_THRESHOLD_NAME"><code>BATCH_ROWS_THRESHOLD_NAME</code></a></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1135,7 +1139,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCount</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.297">requestCount</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.298">requestCount</a></pre>
 </li>
 </ul>
 <a name="rpcGetRequestCount">
@@ -1144,7 +1148,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcGetRequestCount</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.300">rpcGetRequestCount</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.301">rpcGetRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcScanRequestCount">
@@ -1153,7 +1157,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcScanRequestCount</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.303">rpcScanRequestCount</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.304">rpcScanRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcMultiRequestCount">
@@ -1162,7 +1166,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcMultiRequestCount</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.306">rpcMultiRequestCount</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.307">rpcMultiRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcMutateRequestCount">
@@ -1171,7 +1175,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcMutateRequestCount</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.309">rpcMutateRequestCount</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.310">rpcMutateRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcServer">
@@ -1180,7 +1184,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcServer</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.312">rpcServer</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.313">rpcServer</a></pre>
 </li>
 </ul>
 <a name="isa">
@@ -1189,7 +1193,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>isa</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.313">isa</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.314">isa</a></pre>
 </li>
 </ul>
 <a name="regionServer">
@@ -1198,7 +1202,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.316">regionServer</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.317">regionServer</a></pre>
 </li>
 </ul>
 <a name="maxScannerResultSize">
@@ -1207,7 +1211,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>maxScannerResultSize</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.317">maxScannerResultSize</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.318">maxScannerResultSize</a></pre>
 </li>
 </ul>
 <a name="priority">
@@ -1216,7 +1220,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>priority</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.320">priority</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.321">priority</a></pre>
 </li>
 </ul>
 <a name="scannerIdGenerator">
@@ -1225,7 +1229,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerIdGenerator</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerIdGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.322">scannerIdGenerator</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerIdGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.323">scannerIdGenerator</a></pre>
 </li>
 </ul>
 <a name="scanners">
@@ -1234,7 +1238,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>scanners</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regi [...]
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regi [...]
 </li>
 </ul>
 <a name="closedScanners">
@@ -1243,7 +1247,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>closedScanners</h4>
-<pre>private final&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.Cache&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; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.327">closedScanners</a></pre>
+<pre>private final&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.Cache&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; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.328">closedScanners</a></pre>
 </li>
 </ul>
 <a name="scannerLeaseTimeoutPeriod">
@@ -1252,7 +1256,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerLeaseTimeoutPeriod</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.331">scannerLeaseTimeoutPeriod</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.332">scannerLeaseTimeoutPeriod</a></pre>
 <div class="block">The lease timeout period for client scanners (milliseconds).</div>
 </li>
 </ul>
@@ -1262,7 +1266,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcTimeout</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.336">rpcTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.337">rpcTimeout</a></pre>
 <div class="block">The RPC timeout period (milliseconds)</div>
 </li>
 </ul>
@@ -1272,7 +1276,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>minimumScanTimeLimitDelta</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.341">minimumScanTimeLimitDelta</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.342">minimumScanTimeLimitDelta</a></pre>
 <div class="block">The minimum allowable delta to use for the scan limit</div>
 </li>
 </ul>
@@ -1282,7 +1286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rowSizeWarnThreshold</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.346">rowSizeWarnThreshold</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.347">rowSizeWarnThreshold</a></pre>
 <div class="block">Row size threshold for multi requests above which a warning is logged</div>
 </li>
 </ul>
@@ -1292,7 +1296,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCompactionQueues</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.348">clearCompactionQueues</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.349">clearCompactionQueues</a></pre>
 </li>
 </ul>
 <a name="accessChecker">
@@ -1301,7 +1305,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>accessChecker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.350">accessChecker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.351">accessChecker</a></pre>
 </li>
 </ul>
 <a name="zkPermissionWatcher">
@@ -1310,7 +1314,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>zkPermissionWatcher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.351">zkPermissionWatcher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.352">zkPermissionWatcher</a></pre>
 </li>
 </ul>
 <a name="REGIONSERVER_ADMIN_SERVICE_CONFIG">
@@ -1319,7 +1323,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER_ADMIN_SERVICE_CONFIG</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.358">REGIONSERVER_ADMIN_SERVICE_CONFIG</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.359">REGIONSERVER_ADMIN_SERVICE_CONFIG</a></pre>
 <div class="block">Services launched in RSRpcServices. By default they are on but you can use the below
  booleans to selectively enable/disable either Admin or Client Service (Rare is the case
  where you would ever turn off one or the other).</div>
@@ -1335,7 +1339,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER_CLIENT_SERVICE_CONFIG</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.360">REGIONSERVER_CLIENT_SERVICE_CONFIG</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.361">REGIONSERVER_CLIENT_SERVICE_CONFIG</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.RSRpcServices.REGIONSERVER_CLIENT_SERVICE_CONFIG">Constant Field Values</a></dd>
@@ -1348,7 +1352,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LOG_DELEGATE</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1189">DEFAULT_LOG_DELEGATE</a></pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1190">DEFAULT_LOG_DELEGATE</a></pre>
 </li>
 </ul>
 <a name="ld">
@@ -1357,7 +1361,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>ld</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1202">ld</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1203">ld</a></pre>
 </li>
 </ul>
 <a name="SCANNER_ALREADY_CLOSED">
@@ -1367,7 +1371,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <li class="blockList">
 <h4>SCANNER_ALREADY_CLOSED</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3041">SCANNER_ALREADY_CLOSED</a></pre>
+private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3051">SCANNER_ALREADY_CLOSED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1385,7 +1389,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>RSRpcServices</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1204">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1205">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1399,7 +1403,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1209">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1210">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs,
               <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a>&nbsp;ld)
        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1422,7 +1426,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.506">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Result&nbsp;r,
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.507">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Result&nbsp;r,
                                                                                                                      int&nbsp;index)</pre>
 </li>
 </ul>
@@ -1432,7 +1436,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.511">getResultOrException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.512">getResultOrException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
                                                                                                                      int&nbsp;index)</pre>
 </li>
 </ul>
@@ -1442,7 +1446,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.515">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.516">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
                                                                                                                      int&nbsp;index)</pre>
 </li>
 </ul>
@@ -1452,7 +1456,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcPreCheck</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.529">rpcPreCheck</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;requestName)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.530">rpcPreCheck</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;requestName)
                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Checks for the following pre-checks in order:
  <ol>
@@ -1473,7 +1477,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>startNonceOperation</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.544">startNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.545">startNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                                     long&nbsp;nonceGroup)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Starts the nonce operation for a mutation, if needed.</div>
@@ -1494,7 +1498,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>endNonceOperation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.563">endNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.564">endNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                                long&nbsp;nonceGroup,
                                boolean&nbsp;success)</pre>
 <div class="block">Ends nonce operation for a mutation, if needed.</div>
@@ -1512,7 +1516,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>isClientCellBlockSupport</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.570">isClientCellBlockSupport</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.571">isClientCellBlockSupport</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</pre>
 </li>
 </ul>
 <a name="addResult-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse.Builder-org.apache.hadoop.hbase.client.Result-org.apache.hadoop.hbase.ipc.HBaseRpcController-boolean-">
@@ -1521,7 +1525,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>addResult</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.574">addResult</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.575">addResult</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse.Builder&nbsp;builder,
                        <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
                        <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;rpcc,
                        boolean&nbsp;clientCellBlockSupported)</pre>
@@ -1533,7 +1537,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>addResults</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.586">addResults</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.587">addResults</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder,
                         <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/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
                         <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                         boolean&nbsp;isDefaultRegion,
@@ -1546,7 +1550,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndRowMutate</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.610">checkAndRowMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.611">checkAndRowMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
                                   <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
                                   byte[]&nbsp;row,
@@ -1573,7 +1577,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.672">append</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.673">append</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                       <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                       org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                       <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
@@ -1596,7 +1600,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.724">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.725">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                          <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                          org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                          <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
@@ -1621,7 +1625,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>doNonAtomicRegionMutation</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.777">doNonAtomicRegionMutation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRe [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.778">doNonAtomicRegionMutation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRe [...]
                                                       <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction&nbsp;actions,
                                                       <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
@@ -1650,7 +1654,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCellSizeLimit</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.943">checkCellSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.944">checkCellSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                                 <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;m)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1665,7 +1669,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>doAtomicBatchOp</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.959">doAtomicBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.960">doAtomicBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                              <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;mutations,
@@ -1684,7 +1688,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>doNonAtomicBatchOp</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.971">doNonAtomicBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.972">doNonAtomicBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
                                 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                 <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;mutations,
@@ -1698,7 +1702,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>doBatchOp</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.993">doBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.994">doBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                        <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;mutations,
@@ -1723,7 +1727,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>updateMutationMetrics</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1089">updateMutationMetrics</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1090">updateMutationMetrics</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                    long&nbsp;starttime,
                                    boolean&nbsp;batchContainsPuts,
                                    boolean&nbsp;batchContainsDelete)</pre>
@@ -1735,7 +1739,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>doReplayBatchOp</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1114">doReplayBatchOp</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1115">doReplayBatchOp</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                           <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/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationReplay</a>&gt;&nbsp;mutations,
                                           long&nbsp;replaySeqId)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1760,7 +1764,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAllScanners</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1172">closeAllScanners</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1173">closeAllScanners</a>()</pre>
 </li>
 </ul>
 <a name="createRpcServer-org.apache.hadoop.hbase.Server-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory-java.net.InetSocketAddress-java.lang.String-">
@@ -1769,7 +1773,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>createRpcServer</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1277">createRpcServer</a>(<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1278">createRpcServer</a>(<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
                                              org.apache.hadoop.conf.Configuration&nbsp;conf,
                                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.html" title="interface in org.apache.hadoop.hbase.regionserver">RpcSchedulerFactory</a>&nbsp;rpcSchedulerFactory,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;bindAddress,
@@ -1787,7 +1791,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcSchedulerFactoryClass</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1292">getRpcSchedulerFactoryClass</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1293">getRpcSchedulerFactoryClass</a>()</pre>
 </li>
 </ul>
 <a name="onConfigurationChange-org.apache.hadoop.conf.Configuration-">
@@ -1796,7 +1800,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1298">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1299">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">ConfigurationObserver</a></code></span></div>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
@@ -1812,7 +1816,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>createPriority</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1304">createPriority</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1305">createPriority</a>()</pre>
 </li>
 </ul>
 <a name="requirePermission-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action-">
@@ -1821,7 +1825,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>requirePermission</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1308">requirePermission</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;request,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1309">requirePermission</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;request,
                                  <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access">Permission.Action</a>&nbsp;perm)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1836,7 +1840,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getHostname</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1315">getHostname</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1316">getHostname</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  boolean&nbsp;isMaster)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl>
@@ -1851,7 +1855,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1331">getScannersCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1332">getScannersCount</a>()</pre>
 </li>
 </ul>
 <a name="getScanner-long-">
@@ -1860,7 +1864,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1336">getScanner</a>(long&nbsp;scannerId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1337">getScanner</a>(long&nbsp;scannerId)</pre>
 </li>
 </ul>
 <a name="getScanDetailsWithId-long-">
@@ -1869,7 +1873,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanDetailsWithId</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1345">getScanDetailsWithId</a>(long&nbsp;scannerId)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1346">getScanDetailsWithId</a>(long&nbsp;scannerId)</pre>
 </li>
 </ul>
 <a name="getScannerVirtualTime-long-">
@@ -1878,7 +1882,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannerVirtualTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1360">getScannerVirtualTime</a>(long&nbsp;scannerId)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1361">getScannerVirtualTime</a>(long&nbsp;scannerId)</pre>
 <div class="block">Get the vtime associated with the scanner.
  Currently the vtime is the number of "next" calls.</div>
 </li>
@@ -1889,7 +1893,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>addSize</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1376">addSize</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1377">addSize</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context,
                <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;lastBlock)</pre>
 <div class="block">Method to account for the size of retained cells and retained data blocks.</div>
@@ -1909,7 +1913,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>addScanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1410">addScanner</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;scannerName,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1411">addScanner</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;scannerName,
                                                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;s,
                                                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html" title="interface in org.apache.hadoop.hbase.regionserver">Shipper</a>&nbsp;shipper,
                                                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
@@ -1927,7 +1931,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1438">getRegion</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1439">getRegion</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Find the HRegion based on a region specifier</div>
 <dl>
@@ -1947,7 +1951,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegions</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1451">getRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.ht [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1452">getRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.ht [...]
                                  <a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStatsBuilder.html" title="class in org.apache.hadoop.hbase">CacheEvictionStatsBuilder</a>&nbsp;stats)</pre>
 <div class="block">Find the List of HRegions based on a list of region specifiers</div>
 <dl>
@@ -1967,7 +1971,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1465">getPriority</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1466">getPriority</a>()</pre>
 </li>
 </ul>
 <a name="getConfiguration--">
@@ -1976,7 +1980,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1470">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1471">getConfiguration</a>()</pre>
 </li>
 </ul>
 <a name="getRpcQuotaManager--">
@@ -1985,7 +1989,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1474">getRpcQuotaManager</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1475">getRpcQuotaManager</a>()</pre>
 </li>
 </ul>
 <a name="getSpaceQuotaManager--">
@@ -1994,7 +1998,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getSpaceQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1478">getSpaceQuotaManager</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1479">getSpaceQuotaManager</a>()</pre>
 </li>
 </ul>
 <a name="start-org.apache.hadoop.hbase.zookeeper.ZKWatcher-">
@@ -2003,7 +2007,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1482">start</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkWatcher)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1483">start</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zkWatcher)</pre>
 </li>
 </ul>
 <a name="stop--">
@@ -2012,7 +2016,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1501">stop</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1502">stop</a>()</pre>
 </li>
 </ul>
 <a name="checkOpen--">
@@ -2021,7 +2025,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkOpen</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1513">checkOpen</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1514">checkOpen</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Called to verify that this server is up and running.</div>
 <dl>
@@ -2036,7 +2040,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getServices</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1537">getServices</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1538">getServices</a>()</pre>
 <div class="block">By default, put up an Admin and a Client Service.
  Set booleans <code>hbase.regionserver.admin.executorService</code> and
  <code>hbase.regionserver.client.executorService</code> if you want to enable/disable services.
@@ -2054,7 +2058,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getSocketAddress</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1557">getSocketAddress</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1558">getSocketAddress</a>()</pre>
 </li>
 </ul>
 <a name="getPriority-org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader-org.apache.hbase.thirdparty.com.google.protobuf.Message-org.apache.hadoop.hbase.security.User-">
@@ -2063,7 +2067,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1562">getPriority</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1563">getPriority</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
                        org.apache.hbase.thirdparty.com.google.protobuf.Message&nbsp;param,
                        <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html#getPriority-org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader-org.apache.hbase.thirdparty.com.google.protobuf.Message-org.apache.hadoop.hbase.security.User-">PriorityFunction</a></code></span></div>
@@ -2083,7 +2087,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeadline</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1567">getDeadline</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1568">getDeadline</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
                         org.apache.hbase.thirdparty.com.google.protobuf.Message&nbsp;param)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html#getDeadline-org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader-org.apache.hbase.thirdparty.com.google.protobuf.Message-">PriorityFunction</a></code></span></div>
 <div class="block">Returns the deadline of the specified request.
@@ -2102,7 +2106,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkOOME</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1579">checkOOME</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;e)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1580">checkOOME</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;e)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html#checkOOME-java.lang.Throwable-">HBaseRPCErrorHandler</a></code></span></div>
 <div class="block">Take actions on the event of an OutOfMemoryError.</div>
 <dl>
@@ -2121,7 +2125,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>exitIfOOME</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1583">exitIfOOME</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;e)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1584">exitIfOOME</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;e)</pre>
 </li>
 </ul>
 <a name="closeRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest-">
@@ -2130,7 +2134,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1612">closeRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1613">closeRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)
                                                                                               throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Close a region on the region server.</div>
@@ -2151,7 +2155,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1645">compactRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1646">compactRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Compact a region on the region server.</div>
@@ -2172,7 +2176,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>compactionSwitch</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1684">compactionSwitch</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1685">compactionSwitch</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchRequest&nbsp;request)
                                                                                                         throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2189,7 +2193,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>flushRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1712">flushRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1713">flushRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest&nbsp;request)
                                                                                               throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Flush a region on the region server.</div>
@@ -2210,7 +2214,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1754">getOnlineRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1755">getOnlineRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest&nbsp;request)
                                                                                                       throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2227,7 +2231,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1773">getRegionInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1774">getRegionInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2244,7 +2248,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1815">getRegionLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1816">getRegionLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2261,7 +2265,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCompactionQueues</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1843">clearCompactionQueues</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1844">clearCompactionQueues</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest&nbsp;request)
                                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2278,7 +2282,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1888">getServerInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1889">getServerInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Get some information of the region server.</div>
@@ -2299,7 +2303,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFile</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1902">getStoreFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1903">getStoreFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                        org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest&nbsp;request)
                                                                                                 throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2316,7 +2320,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>throwOnWrongStartCode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1928">throwOnWrongStartCode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1929">throwOnWrongStartCode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)
                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2330,7 +2334,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>throwOnWrongStartCode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1936">throwOnWrongStartCode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1937">throwOnWrongStartCode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)
                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2344,7 +2348,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>throwOnWrongStartCode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1944">throwOnWrongStartCode</a>(long&nbsp;serverStartCode)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1945">throwOnWrongStartCode</a>(long&nbsp;serverStartCode)
                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2358,7 +2362,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>throwOnWrongStartCode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1953">throwOnWrongStartCode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1954">throwOnWrongStartCode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)
                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2372,7 +2376,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>openRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1991">openRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1992">openRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)
                                                                                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Open asynchronously a region or a set of regions on the region server.
@@ -2410,7 +2414,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>warmupRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2137">warmupRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2138">warmupRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                        org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest&nbsp;request)
                                                                                                 throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Wamrmup a region on this server.
@@ -2435,7 +2439,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>replay</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2184">replay</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2185">replay</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
                                                                                                throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is
@@ -2458,7 +2462,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkShouldRejectReplicationRequest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2274">checkShouldRejectReplicationRequest</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;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2275">checkShouldRejectReplicationRequest</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;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2472,7 +2476,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>replicateWALEntry</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2300">replicateWALEntry</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2301">replicateWALEntry</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
                                                                                                           throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Replicate WAL entries on the region server.</div>
@@ -2493,7 +2497,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWALWriter</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2330">rollWALWriter</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2331">rollWALWriter</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Roll the WAL writer of the region server.</div>
@@ -2514,7 +2518,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2355">stopServer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2356">stopServer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest&nbsp;request)
                                                                                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Stop the region server.</div>
@@ -2535,7 +2539,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>updateFavoredNodes</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2364">updateFavoredNodes</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2365">updateFavoredNodes</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest&nbsp;request)
                                                                                                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2552,7 +2556,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFile</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2385">bulkLoadHFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2386">bulkLoadHFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                           org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest&nbsp;request)
                                                                                                    throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Atomically bulk load several HFiles into an open region</div>
@@ -2572,7 +2576,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareBulkLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2440">prepareBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2441">prepareBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                               org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest&nbsp;request)
                                                                                                        throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2589,7 +2593,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupBulkLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2458">cleanupBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2459">cleanupBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                               org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest&nbsp;request)
                                                                                                        throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2606,7 +2610,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>execService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2475">execService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2476">execService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;request)
                                                                                                       throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2617,13 +2621,27 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 </dl>
 </li>
 </ul>
+<a name="getFileSystem-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFileSystem</h4>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2496">getFileSystem</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/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;filePaths)
+                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="execServiceOnRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>execServiceOnRegion</h4>
-<pre>private&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2495">execServiceOnRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2505">execServiceOnRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;serviceCall)
                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -2638,7 +2656,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldRejectRequestsFromClient</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2502">shouldRejectRequestsFromClient</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2512">shouldRejectRequestsFromClient</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 </li>
 </ul>
 <a name="rejectIfInStandByState-org.apache.hadoop.hbase.regionserver.HRegion-">
@@ -2647,7 +2665,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>rejectIfInStandByState</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2509">rejectIfInStandByState</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2519">rejectIfInStandByState</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
                              throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2661,7 +2679,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2524">get</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2534">get</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest&nbsp;request)
                                                                                throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Get data from a table.</div>
@@ -2682,7 +2700,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2609">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2619">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannersCloseCallBack</a>&nbsp;closeCallBack,
                    <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)
@@ -2699,7 +2717,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkBatchSizeAndLogLargeSize</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2660">checkBatchSizeAndLogLargeSize</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2670">checkBatchSizeAndLogLargeSize</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)</pre>
 </li>
 </ul>
 <a name="failRegionAction-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse.Builder-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction-org.apache.hadoop.hbase.CellScanner-java.lang.Throwable-">
@@ -2708,7 +2726,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>failRegionAction</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2674">failRegionAction</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse.Builder&nbsp;responseBuilder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2684">failRegionAction</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse.Builder&nbsp;responseBuilder,
                               org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;regionActionResultBuilder,
                               org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction&nbsp;regionAction,
                               <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
@@ -2721,7 +2739,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>isReplicationRequest</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2688">isReplicationRequest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2698">isReplicationRequest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action)</pre>
 </li>
 </ul>
 <a name="multi-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest-">
@@ -2730,7 +2748,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>multi</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2711">multi</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2721">multi</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
                                                                                           org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)
                                                                                    throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Execute multiple actions on a table: get, mutate, and/or execCoprocessor</div>
@@ -2751,7 +2769,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>skipCellsForMutations</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2841">skipCellsForMutations</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;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2851">skipCellsForMutations</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;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
                                    <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner)</pre>
 </li>
 </ul>
@@ -2761,7 +2779,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>skipCellsForMutation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2850">skipCellsForMutation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2860">skipCellsForMutation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action,
                                   <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner)</pre>
 </li>
 </ul>
@@ -2771,7 +2789,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>mutate</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2878">mutate</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2888">mutate</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
                                                                                             org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest&nbsp;request)
                                                                                      throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Mutate data in a table.</div>
@@ -2792,7 +2810,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionScanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3051">getRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3061">getRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2806,7 +2824,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>newRegionScanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3093">newRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3103">newRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -2821,7 +2839,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkScanNextCallSeq</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3130">checkScanNextCallSeq</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3140">checkScanNextCallSeq</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;rsh)
                            throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/OutOfOrderScannerNextException.html" title="class in org.apache.hadoop.hbase.exceptions">OutOfOrderScannerNextException</a></pre>
 <dl>
@@ -2836,7 +2854,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>addScannerLeaseBack</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3145">addScannerLeaseBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a>&nbsp;lease)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3155">addScannerLeaseBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a>&nbsp;lease)</pre>
 </li>
 </ul>
 <a name="getTimeLimit-org.apache.hadoop.hbase.ipc.HBaseRpcController-boolean-">
@@ -2845,7 +2863,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeLimit</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3154">getTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3164">getTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                           boolean&nbsp;allowHeartbeatMessages)</pre>
 </li>
 </ul>
@@ -2855,7 +2873,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkLimitOfRows</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3181">checkLimitOfRows</a>(int&nbsp;numOfCompleteRows,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3191">checkLimitOfRows</a>(int&nbsp;numOfCompleteRows,
                               int&nbsp;limitOfRows,
                               boolean&nbsp;moreRows,
                               <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
@@ -2868,7 +2886,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3193">scan</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3203">scan</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                   org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;rsh,
                   long&nbsp;maxQuotaResultSize,
@@ -2891,7 +2909,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3386">scan</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3396">scan</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)
                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Scan data in a table.</div>
@@ -2912,7 +2930,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>closeScanner</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3620">closeScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3630">closeScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                           <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner,
                           <a href="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;scannerName,
                           <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)
@@ -2929,7 +2947,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>execRegionServerService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3643">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3653">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;request)
                                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2946,7 +2964,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3650">updateConfiguration</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3660">updateConfiguration</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest&nbsp;request)
                                                                                                               throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2963,7 +2981,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getSpaceQuotaSnapshots</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3662">getSpaceQuotaSnapshots</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3672">getSpaceQuotaSnapshots</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest&nbsp;request)
                                                                                                                     throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2980,7 +2998,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionBlockCache</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3685">clearRegionBlockCache</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3695">clearRegionBlockCache</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest&nbsp;request)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2994,7 +3012,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>executeOpenRegionProcedures</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3702">executeOpenRegionProcedures</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3712">executeOpenRegionProcedures</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request,
                                          <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/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;tdCache)</pre>
 </li>
 </ul>
@@ -3004,7 +3022,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>executeCloseRegionProcedures</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3733">executeCloseRegionProcedures</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3743">executeCloseRegionProcedures</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)</pre>
 </li>
 </ul>
 <a name="executeProcedures-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RemoteProcedureRequest-">
@@ -3013,7 +3031,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>executeProcedures</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3750">executeProcedures</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RemoteProcedureRequest&nbsp;request)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3760">executeProcedures</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RemoteProcedureRequest&nbsp;request)</pre>
 </li>
 </ul>
 <a name="executeProcedures-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest-">
@@ -3022,7 +3040,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>executeProcedures</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3768">executeProcedures</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3778">executeProcedures</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;request)
                                                                                                           throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -3039,7 +3057,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcScheduler</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.html" title="class in org.apache.hadoop.hbase.ipc">RpcScheduler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3794">getRpcScheduler</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.html" title="class in org.apache.hadoop.hbase.ipc">RpcScheduler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3804">getRpcScheduler</a>()</pre>
 </li>
 </ul>
 <a name="getAccessChecker--">
@@ -3048,7 +3066,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getAccessChecker</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3798">getAccessChecker</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3808">getAccessChecker</a>()</pre>
 </li>
 </ul>
 <a name="getZkPermissionWatcher--">
@@ -3057,7 +3075,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getZkPermissionWatcher</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3802">getZkPermissionWatcher</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3812">getZkPermissionWatcher</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index adad704..b681184 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -715,20 +715,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index b195b74..1d583d6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 2a12591..d570ad8 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,9 +248,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index 02505ac..818a04c 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -162,8 +162,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 3aa879d..7d70035 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 3370dac..8776988 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,12 +162,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 3e32f6b..3f42ad7 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,9 +192,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html b/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
index 63f5602..8aa8067 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html
@@ -782,7 +782,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionFamilyFiles</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/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/snapshot/RestoreSnapshotHelper.html#line.564">getTableRegionFamilyFiles</a>(org.apache.hadoop.fs.Path&nbsp;familyDir)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/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/snapshot/RestoreSnapshotHelper.html#line.567">getTableRegionFamilyFiles</a>(org.apache.hadoop.fs.Path&nbsp;familyDir)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -798,7 +798,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneHdfsRegions</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.581">cloneHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.584">cloneHdfsRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;exec,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;regionManifests,
                                       <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;regions)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -816,7 +816,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneHdfsMobRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.622">cloneHdfsMobRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.Snapsho [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.627">cloneHdfsMobRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.Snapsho [...]
                                 <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Clone the mob region. For the region create a new region
@@ -833,7 +833,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.640">cloneRegion</a>(org.apache.hadoop.fs.Path&nbsp;regionDir,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.645">cloneRegion</a>(org.apache.hadoop.fs.Path&nbsp;regionDir,
                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo,
                          org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -858,7 +858,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.663">cloneRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.670">cloneRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo,
                          org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -883,7 +883,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreStoreFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.682">restoreStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.689">restoreStoreFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
                               <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                               org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.StoreFile&nbsp;storeFile,
                               boolean&nbsp;createBackRef)
@@ -912,7 +912,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreReferenceFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.713">restoreReferenceFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.720">restoreReferenceFile</a>(org.apache.hadoop.fs.Path&nbsp;familyDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                   org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest.StoreFile&nbsp;storeFile)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -945,7 +945,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.784">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.791">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo)</pre>
 <div class="block">Create a new <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> from the snapshot region info.
  Keep the same startKey, endKey, regionId and split information but change
  the table name.</div>
@@ -963,7 +963,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cloneRegionInfo</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.788">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.795">cloneRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;snapshotRegionInfo)</pre>
 </li>
 </ul>
@@ -973,7 +973,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegions</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.801">getTableRegions</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.808">getTableRegions</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -989,7 +989,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copySnapshotForScanner</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.825">copySnapshotForScanner</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper.RestoreMetaChanges</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.832">copySnapshotForScanner</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                               org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
                                                                               org.apache.hadoop.fs.Path&nbsp;restoreDir,
@@ -1014,7 +1014,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>restoreSnapshotAcl</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.858">restoreSnapshotAcl</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshot,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#line.865">restoreSnapshotAcl</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshot,
                                       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;newTableName,
                                       org.apache.hadoop.conf.Configuration&nbsp;conf)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html b/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
index 54b924c..96ab114 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
@@ -681,7 +681,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.224">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.225">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a 'manifest' for the specified region, by reading directly from the HRegion object.
  This is used by the "online snapshot" when the table is enabled.</div>
@@ -697,7 +697,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.233">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.234">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                          <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -712,7 +712,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.271">addRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.274">addRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                       <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a 'manifest' for the specified region, by reading directly from the disk.
@@ -729,7 +729,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.280">addRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.283">addRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                          <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                          <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -745,7 +745,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFiles</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.336">getStoreFiles</a>(org.apache.hadoop.fs.Path&nbsp;storeDir)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.339">getStoreFiles</a>(org.apache.hadoop.fs.Path&nbsp;storeDir)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -759,7 +759,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addReferenceFiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.347">addReferenceFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.350">addReferenceFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;regionData,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;familyData,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;storeFiles,
@@ -777,7 +777,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.375">load</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.378">load</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Load the information in the SnapshotManifest. Called by SnapshotManifest.open()
 
@@ -796,7 +796,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.430">getSnapshotDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.433">getSnapshotDir</a>()</pre>
 <div class="block">Get the current snapshot working dir</div>
 </li>
 </ul>
@@ -806,7 +806,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotDescription</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.437">getSnapshotDescription</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.440">getSnapshotDescription</a>()</pre>
 <div class="block">Get the SnapshotDescription</div>
 </li>
 </ul>
@@ -816,7 +816,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.444">getTableDescriptor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.447">getTableDescriptor</a>()</pre>
 <div class="block">Get the table descriptor from the Snapshot</div>
 </li>
 </ul>
@@ -826,7 +826,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionManifests</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.451">getRegionManifests</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.454">getRegionManifests</a>()</pre>
 <div class="block">Get all the Region Manifest from the snapshot</div>
 </li>
 </ul>
@@ -836,7 +836,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionManifestsMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.459" [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.462" [...]
 <div class="block">Get all the Region Manifest from the snapshot.
  This is an helper to get a map with the region encoded name</div>
 </li>
@@ -847,7 +847,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>consolidate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.470">consolidate</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.473">consolidate</a>()
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -861,7 +861,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>convertToV2SingleManifest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.487">convertToV2SingleManifest</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.490">convertToV2SingleManifest</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -875,7 +875,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeDataManifest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.538">writeDataManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;manifest)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.541">writeDataManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;manifest)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -889,7 +889,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readDataManifest</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.551">readDataManifest</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.554">readDataManifest</a>()
                                                                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -903,7 +903,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createExecutor</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.567">createExecutor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.570">createExecutor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="createExecutor-org.apache.hadoop.conf.Configuration-java.lang.String-">
@@ -912,7 +912,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createExecutor</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.571">createExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.574">createExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 </li>
 </ul>
@@ -922,7 +922,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNameFromManifest</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.580">getRegionNameFromManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)</pre>
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.583">getRegionNameFromManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)</pre>
 <div class="block">Extract the region encoded name from the region manifest</div>
 </li>
 </ul>
@@ -932,7 +932,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSnapshotFormat</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.591">getSnapshotFormat</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)</pre>
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.594">getSnapshotFormat</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index c175257..76a6c08 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,9 +211,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 905ae2e..9bf1f3d 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -540,14 +540,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index bdae3d8..8c4c41b 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -192,8 +192,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 0741535..71712cf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,9 +16,9 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <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 = "3583ef747684a090868daebff01eaa0aca997405";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "1cb4f687c1772d6b80d383247978efd7b05520d7";<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 = "Sat Sep 14 14:34:54 UTC 2019";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sun Sep 15 14:34:53 UTC 2019";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites-he-de.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
 <span class="sourceLineNo">015</span>  public static final String srcChecksum = "(stdin)=";<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/regionserver/RSRpcServices.LogDelegate.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
index 20b1955..0e5bdbc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
@@ -53,3764 +53,3774 @@
 <span class="sourceLineNo">045</span>import java.util.concurrent.atomic.LongAdder;<a name="line.45"></a>
 <span class="sourceLineNo">046</span>import org.apache.commons.lang3.mutable.MutableObject;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import org.apache.hadoop.conf.Configuration;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ByteBufferExtendedCell;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CacheEvictionStats;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.CacheEvictionStatsBuilder;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CompareOperator;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HConstants;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.RegionTooBusyException;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.Server;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ServerName;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.TableName;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Append;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Get;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Put;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Result;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.Row;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.exceptions.UnknownProtocolException;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.io.ByteBuffAllocator;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.TimeRange;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcScheduler;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.net.Address;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.procedure2.RSProcedureCallable;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.regionserver.handler.AssignRegionHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.regionserver.handler.UnassignRegionHandler;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.replication.regionserver.RejectReplicationRequestStateChecker;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.replication.regionserver.RejectRequestsFromClientStateChecker;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.security.User;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.security.access.AccessChecker;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.security.access.NoopAccessChecker;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.security.access.ZKPermissionWatcher;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.wal.WALSplitUtil;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.wal.WALSplitUtil.MutationReplay;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.zookeeper.KeeperException;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.slf4j.Logger;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.slf4j.LoggerFactory;<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.cache.Cache;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.cache.CacheBuilder;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.protobuf.Message;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hbase.thirdparty.com.google.protobuf.TextFormat;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils;<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchRequest;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchResponse;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RemoteProcedureRequest;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>/**<a name="line.256"></a>
-<span class="sourceLineNo">257</span> * Implements the regionserver RPC services.<a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>@InterfaceAudience.Private<a name="line.259"></a>
-<span class="sourceLineNo">260</span>@SuppressWarnings("deprecation")<a name="line.260"></a>
-<span class="sourceLineNo">261</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    ConfigurationObserver {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  protected static final Logger LOG = LoggerFactory.getLogger(RSRpcServices.class);<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /** RPC scheduler to use for the region server. */<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    "hbase.region.server.rpc.scheduler.factory.class";<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  /** RPC scheduler to use for the master. */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public static final String MASTER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    "hbase.master.rpc.scheduler.factory.class";<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  /**<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  /**<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  // Count only once for requests with multiple actions like multi/caching-scan/replayBatch<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  final LongAdder requestCount = new LongAdder();<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>  // Request counter for rpc get<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  // Request counter for rpc scan<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  // Request counter for rpc multi<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // Request counter for rpc mutate<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  // Server to handle client requests.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final RpcServerInterface rpcServer;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  final InetSocketAddress isa;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>  @VisibleForTesting<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  protected final HRegionServer regionServer;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private final long maxScannerResultSize;<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  // The reference to the priority extraction function<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private final PriorityFunction priority;<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  /**<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  /**<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * The RPC timeout period (milliseconds)<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private final int rpcTimeout;<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  /**<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * The minimum allowable delta to use for the scan limit<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   */<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private final long minimumScanTimeLimitDelta;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  /**<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * Row size threshold for multi requests above which a warning is logged<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private final int rowSizeWarnThreshold;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  private AccessChecker accessChecker;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  private ZKPermissionWatcher zkPermissionWatcher;<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  /**<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * Services launched in RSRpcServices. By default they are on but you can use the below<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   * booleans to selectively enable/disable either Admin or Client Service (Rare is the case<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   * where you would ever turn off one or the other).<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   */<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  public static final String REGIONSERVER_ADMIN_SERVICE_CONFIG =<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      "hbase.regionserver.admin.executorService";<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  public static final String REGIONSERVER_CLIENT_SERVICE_CONFIG =<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      "hbase.regionserver.client.executorService";<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * An Rpc callback for closing a RegionScanner.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    private final RegionScanner scanner;<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      this.scanner = scanner;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>    @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public void run() throws IOException {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      this.scanner.close();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final String scannerName;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final Shipper shipper;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final Lease lease;<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    public RegionScannerShippedCallBack(String scannerName, Shipper shipper, Lease lease) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      this.scannerName = scannerName;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.shipper = shipper;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      this.lease = lease;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    public void run() throws IOException {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.shipper.shipped();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      if (scanners.containsKey(scannerName)) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * completion of multiGets.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public void addScanner(RegionScanner scanner) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      this.scanners.add(scanner);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    public void run() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      for (RegionScanner scanner : scanners) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        try {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          scanner.close();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        } catch (IOException e) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   */<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private static final class RegionScannerHolder {<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    private final String scannerName;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    private final RegionScanner s;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    private final HRegion r;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    private final RpcCallback closeCallBack;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    private final RpcCallback shippedCallback;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    private byte[] rowOfLastPartialResult;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    private boolean needCursor;<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    public RegionScannerHolder(String scannerName, RegionScanner s, HRegion r,<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      this.scannerName = scannerName;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      this.s = s;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      this.r = r;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.closeCallBack = closeCallBack;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      this.shippedCallback = shippedCallback;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      this.needCursor = needCursor;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>    public long getNextCallSeq() {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      return nextCallSeq.get();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  /**<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * closed<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  private class ScannerListener implements LeaseListener {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    private final String scannerName;<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    ScannerListener(final String n) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      this.scannerName = n;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    @Override<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    public void leaseExpired() {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      if (rsh != null) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        RegionScanner s = rsh.s;<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        HRegion region = null;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        try {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        } catch (IOException e) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        } finally {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          try {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>            s.close();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          } catch (IOException e) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      } else {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>                                                        final int index){<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>  private static ResultOrException getResultOrException(<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      final ResultOrException.Builder builder, final int index) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    return builder.setIndex(index).build();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  /**<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   * Checks for the following pre-checks in order:<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   * &lt;ol&gt;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   *   &lt;li&gt;RegionServer is running&lt;/li&gt;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   *   &lt;li&gt;If authorization is enabled, then RPC caller has ADMIN permissions&lt;/li&gt;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * &lt;/ol&gt;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @param requestName name of rpc request. Used in reporting failures to provide context.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * @throws ServiceException If any of the above listed pre-check fails.<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   */<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  private void rpcPreCheck(String requestName) throws ServiceException {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      checkOpen();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      requirePermission(requestName, Permission.Action.ADMIN);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    } catch (IOException ioe) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      throw new ServiceException(ioe);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>  /**<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * @param mutation Mutation.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * @param nonceGroup Nonce group from the request.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @return whether to proceed this mutation.<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   */<a name="line.543"></a>
-<span class="sourceLineNo">544</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      throws IOException {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    boolean canProceed = false;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    try {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    } catch (InterruptedException ex) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    return canProceed;<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * Ends nonce operation for a mutation, if needed.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   * @param mutation Mutation.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
-<span class="sourceLineNo">563</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      long nonceGroup, boolean success) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    if (result == null) return;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    if (clientCellBlockSupported) {<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    } else {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      builder.setResult(pbr);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    builder.setStale(!isDefaultRegion);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    if (results.isEmpty()) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      return;<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    if (clientCellBlockSupported) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      for (Result res : results) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        builder.addCellsPerResult(res.size());<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    } else {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      for (Result res : results) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>        builder.addResults(pbr);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * Mutate a list of rows atomically.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   */<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private boolean checkAndRowMutate(final HRegion region, final List&lt;ClientProtos.Action&gt; actions,<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    final CellScanner cellScanner, byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    ByteArrayComparable comparator, TimeRange timeRange, RegionActionResult.Builder builder,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    ActivePolicyEnforcement spaceQuotaEnforcement) throws IOException {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    int countOfCompleteMutation = 0;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    try {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      }<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      RowMutations rm = null;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      int i = 0;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      ClientProtos.ResultOrException.Builder resultOrExceptionOrBuilder =<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        ClientProtos.ResultOrException.newBuilder();<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      for (ClientProtos.Action action: actions) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (action.hasGet()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.625"></a>
-<span class="sourceLineNo">626</span>            action.getGet());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        MutationType type = action.getMutation().getMutateType();<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        if (rm == null) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>          rm = new RowMutations(action.getMutation().getRow().toByteArray(), actions.size());<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        }<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        switch (type) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          case PUT:<a name="line.633"></a>
-<span class="sourceLineNo">634</span>            Put put = ProtobufUtil.toPut(action.getMutation(), cellScanner);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>            ++countOfCompleteMutation;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>            checkCellSizeLimit(region, put);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>            spaceQuotaEnforcement.getPolicyEnforcement(region).check(put);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>            rm.add(put);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>            break;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          case DELETE:<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            Delete del = ProtobufUtil.toDelete(action.getMutation(), cellScanner);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            ++countOfCompleteMutation;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            spaceQuotaEnforcement.getPolicyEnforcement(region).check(del);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            rm.add(del);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            break;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          default:<a name="line.646"></a>
-<span class="sourceLineNo">647</span>            throw new DoNotRetryIOException("Atomic put and/or delete only, not " + type.name());<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        // To unify the response format with doNonAtomicRegionMutation and read through client's<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        // AsyncProcess we have to add an empty result instance per operation<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        resultOrExceptionOrBuilder.clear();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        resultOrExceptionOrBuilder.setIndex(i++);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        builder.addResultOrException(<a name="line.653"></a>
-<span class="sourceLineNo">654</span>          resultOrExceptionOrBuilder.build());<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      return region.checkAndRowMutate(row, family, qualifier, op, comparator, timeRange, rm);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    } finally {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      // Currently, the checkAndMutate isn't supported by batch so it won't mess up the cell scanner<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // even if the malformed cells are not skipped.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      for (int i = countOfCompleteMutation; i &lt; actions.size(); ++i) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        skipCellsForMutation(actions.get(i), cellScanner);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * Execute an append mutation.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   *<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * @return result to return to client if default operation should be<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * bypassed as indicated by RegionObserver, null otherwise<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   */<a name="line.671"></a>
-<span class="sourceLineNo">672</span>  private Result append(final HRegion region, final OperationQuota quota,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      final MutationProto mutation, final CellScanner cellScanner, long nonceGroup,<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ActivePolicyEnforcement spaceQuota)<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      throws IOException {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    Append append = ProtobufUtil.toAppend(mutation, cellScanner);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    checkCellSizeLimit(region, append);<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    spaceQuota.getPolicyEnforcement(region).check(append);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    quota.addMutation(append);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    Result r = null;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (region.getCoprocessorHost() != null) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      r = region.getCoprocessorHost().preAppend(append);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    if (r == null) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      boolean canProceed = startNonceOperation(mutation, nonceGroup);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      boolean success = false;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      try {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        long nonce = mutation.hasNonce() ? mutation.getNonce() : HConstants.NO_NONCE;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        if (canProceed) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          r = region.append(append, nonceGroup, nonce);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        } else {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>          // convert duplicate append to get<a name="line.693"></a>
-<span class="sourceLineNo">694</span>          List&lt;Cell&gt; results = region.get(ProtobufUtil.toGet(mutation, cellScanner), false,<a name="line.694"></a>
-<span class="sourceLineNo">695</span>              nonceGroup, nonce);<a name="line.695"></a>
-<span class="sourceLineNo">696</span>          r = Result.create(results);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        success = true;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      } finally {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        if (canProceed) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>          endNonceOperation(mutation, nonceGroup, success);<a name="line.701"></a>
-<span class="sourceLineNo">702</span>        }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      }<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      if (region.getCoprocessorHost() != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        r = region.getCoprocessorHost().postAppend(append, r);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    if (regionServer.metricsRegionServer != null) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      regionServer.metricsRegionServer.updateAppend(<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          region.getTableDescriptor().getTableName(),<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        EnvironmentEdgeManager.currentTime() - before);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    return r == null ? Result.EMPTY_RESULT : r;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>  }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>  /**<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * Execute an increment mutation.<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   *<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   * @param region<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @param mutation<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * @return the Result<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   * @throws IOException<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   */<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  private Result increment(final HRegion region, final OperationQuota quota,<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      final MutationProto mutation, final CellScanner cells, long nonceGroup,<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      ActivePolicyEnforcement spaceQuota)<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      throws IOException {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    Increment increment = ProtobufUtil.toIncrement(mutation, cells);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    checkCellSizeLimit(region, increment);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    spaceQuota.getPolicyEnforcement(region).check(increment);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    quota.addMutation(increment);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    Result r = null;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    if (region.getCoprocessorHost() != null) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      r = region.getCoprocessorHost().preIncrement(increment);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    }<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    if (r == null) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      boolean canProceed = startNonceOperation(mutation, nonceGroup);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      boolean success = false;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      try {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        long nonce = mutation.hasNonce() ? mutation.getNonce() : HConstants.NO_NONCE;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        if (canProceed) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          r = region.increment(increment, nonceGroup, nonce);<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        } else {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>          // convert duplicate increment to get<a name="line.745"></a>
-<span class="sourceLineNo">746</span>          List&lt;Cell&gt; results = region.get(ProtobufUtil.toGet(mutation, cells), false, nonceGroup,<a name="line.746"></a>
-<span class="sourceLineNo">747</span>              nonce);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          r = Result.create(results);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>        }<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        success = true;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      } finally {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>        if (canProceed) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          endNonceOperation(mutation, nonceGroup, success);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      if (region.getCoprocessorHost() != null) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>        r = region.getCoprocessorHost().postIncrement(increment, r);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      }<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    if (regionServer.metricsRegionServer != null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      regionServer.metricsRegionServer.updateIncrement(<a name="line.761"></a>
-<span class="sourceLineNo">762</span>          region.getTableDescriptor().getTableName(),<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    return r == null ? Result.EMPTY_RESULT : r;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  }<a name="line.766"></a>
-<span class="sourceLineNo">767</span><a name="line.767"></a>
-<span class="sourceLineNo">768</span>  /**<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   * Run through the regionMutation &lt;code&gt;rm&lt;/code&gt; and per Mutation, do the work, and then when<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * done, add an instance of a {@link ResultOrException} that corresponds to each Mutation.<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * @param cellsToReturn  Could be null. May be allocated in this method.  This is what this<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   * method returns as a 'result'.<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * @param closeCallBack the callback to be used with multigets<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @param context the current RpcCallContext<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * @return Return the &lt;code&gt;cellScanner&lt;/code&gt; passed<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   */<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  private List&lt;CellScannable&gt; doNonAtomicRegionMutation(final HRegion region,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      final OperationQuota quota, final RegionAction actions, final CellScanner cellScanner,<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      final RegionActionResult.Builder builder, List&lt;CellScannable&gt; cellsToReturn, long nonceGroup,<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      final RegionScannersCloseCallBack closeCallBack, RpcCallContext context,<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      ActivePolicyEnforcement spaceQuotaEnforcement) {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>    // Gather up CONTIGUOUS Puts and Deletes in this mutations List.  Idea is that rather than do<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // one at a time, we instead pass them in batch.  Be aware that the corresponding<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    // ResultOrException instance that matches each Put or Delete is then added down in the<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    // doNonAtomicBatchOp call.  We should be staying aligned though the Put and Delete are<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    // deferred/batched<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    List&lt;ClientProtos.Action&gt; mutations = null;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    IOException sizeIOE = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    Object lastBlock = null;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    ClientProtos.ResultOrException.Builder resultOrExceptionBuilder = ResultOrException.newBuilder();<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    boolean hasResultOrException = false;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    for (ClientProtos.Action action : actions.getActionList()) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      hasResultOrException = false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      resultOrExceptionBuilder.clear();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      try {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        Result r = null;<a name="line.797"></a>
-<span class="sourceLineNo">798</span><a name="line.798"></a>
-<span class="sourceLineNo">799</span>        if (context != null<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            &amp;&amp; context.isRetryImmediatelySupported()<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            &amp;&amp; (context.getResponseCellSize() &gt; maxQuotaResultSize<a name="line.801"></a>
-<span class="sourceLineNo">802</span>              || context.getResponseBlockSize() + context.getResponseExceptionSize()<a name="line.802"></a>
-<span class="sourceLineNo">803</span>              &gt; maxQuotaResultSize)) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>          // We're storing the exception since the exception and reason string won't<a name="line.805"></a>
-<span class="sourceLineNo">806</span>          // change after the response size limit is reached.<a name="line.806"></a>
-<span class="sourceLineNo">807</span>          if (sizeIOE == null ) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            // We don't need the stack un-winding do don't throw the exception.<a name="line.808"></a>
-<span class="sourceLineNo">809</span>            // Throwing will kill the JVM's JIT.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>            //<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            // Instead just create the exception and then store it.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>            sizeIOE = new MultiActionResultTooLarge("Max size exceeded"<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                + " CellSize: " + context.getResponseCellSize()<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                + " BlockSize: " + context.getResponseBlockSize());<a name="line.814"></a>
-<span class="sourceLineNo">815</span><a name="line.815"></a>
-<span class="sourceLineNo">816</span>            // Only report the exception once since there's only one request that<a name="line.816"></a>
-<span class="sourceLineNo">817</span>            // caused the exception. Otherwise this number will dominate the exceptions count.<a name="line.817"></a>
-<span class="sourceLineNo">818</span>            rpcServer.getMetrics().exception(sizeIOE);<a name="line.818"></a>
-<span class="sourceLineNo">819</span>          }<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>          // Now that there's an exception is known to be created<a name="line.821"></a>
-<span class="sourceLineNo">822</span>          // use it for the response.<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          //<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          // This will create a copy in the builder.<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          NameBytesPair pair = ResponseConverter.buildException(sizeIOE);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          resultOrExceptionBuilder.setException(pair);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          context.incrementResponseExceptionSize(pair.getSerializedSize());<a name="line.827"></a>
-<span class="sourceLineNo">828</span>          resultOrExceptionBuilder.setIndex(action.getIndex());<a name="line.828"></a>
-<span class="sourceLineNo">829</span>          builder.addResultOrException(resultOrExceptionBuilder.build());<a name="line.829"></a>
-<span class="sourceLineNo">830</span>          skipCellsForMutation(action, cellScanner);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          continue;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        }<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        if (action.hasGet()) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          long before = EnvironmentEdgeManager.currentTime();<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          ClientProtos.Get pbGet = action.getGet();<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          // An asynchbase client, https://github.com/OpenTSDB/asynchbase, starts by trying to do<a name="line.836"></a>
-<span class="sourceLineNo">837</span>          // a get closest before. Throwing the UnknownProtocolException signals it that it needs<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          // to switch and do hbase2 protocol (HBase servers do not tell clients what versions<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          // they are; its a problem for non-native clients like asynchbase. HBASE-20225.<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          if (pbGet.hasClosestRowBefore() &amp;&amp; pbGet.getClosestRowBefore()) {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>            throw new UnknownProtocolException("Is this a pre-hbase-1.0.0 or asynchbase client? " +<a name="line.841"></a>
-<span class="sourceLineNo">842</span>                "Client is invoking getClosestRowBefore removed in hbase-2.0.0 replaced by " +<a name="line.842"></a>
-<span class="sourceLineNo">843</span>                "reverse Scan.");<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          }<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          try {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            Get get = ProtobufUtil.toGet(pbGet);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>            if (context != null) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>              r = get(get, (region), closeCallBack, context);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>            } else {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>              r = region.get(get);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>            }<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          } finally {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>            if (regionServer.metricsRegionServer != null) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>              regionServer.metricsRegionServer.updateGet(<a name="line.854"></a>
-<span class="sourceLineNo">855</span>                  region.getTableDescriptor().getTableName(),<a name="line.855"></a>
-<span class="sourceLineNo">856</span>                  EnvironmentEdgeManager.currentTime() - before);<a name="line.856"></a>
-<span class="sourceLineNo">857</span>            }<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        } else if (action.hasServiceCall()) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          hasResultOrException = true;<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          com.google.protobuf.Message result =<a name="line.861"></a>
-<span class="sourceLineNo">862</span>            execServiceOnRegion(region, action.getServiceCall());<a name="line.862"></a>
-<span class="sourceLineNo">863</span>          ClientProtos.CoprocessorServiceResult.Builder serviceResultBuilder =<a name="line.863"></a>
-<span class="sourceLineNo">864</span>            ClientProtos.CoprocessorServiceResult.newBuilder();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          resultOrExceptionBuilder.setServiceResult(<a name="line.865"></a>
-<span class="sourceLineNo">866</span>            serviceResultBuilder.setValue(<a name="line.866"></a>
-<span class="sourceLineNo">867</span>              serviceResultBuilder.getValueBuilder()<a name="line.867"></a>
-<span class="sourceLineNo">868</span>                .setName(result.getClass().getName())<a name="line.868"></a>
-<span class="sourceLineNo">869</span>                // TODO: Copy!!!<a name="line.869"></a>
-<span class="sourceLineNo">870</span>                .setValue(UnsafeByteOperations.unsafeWrap(result.toByteArray()))));<a name="line.870"></a>
-<span class="sourceLineNo">871</span>        } else if (action.hasMutation()) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>          MutationType type = action.getMutation().getMutateType();<a name="line.872"></a>
-<span class="sourceLineNo">873</span>          if (type != MutationType.PUT &amp;&amp; type != MutationType.DELETE &amp;&amp; mutations != null &amp;&amp;<a name="line.873"></a>
-<span class="sourceLineNo">874</span>              !mutations.isEmpty()) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>            // Flush out any Puts or Deletes already collected.<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            doNonAtomicBatchOp(builder, region, quota, mutations, cellScanner,<a name="line.876"></a>
-<span class="sourceLineNo">877</span>              spaceQuotaEnforcement);<a name="line.877"></a>
-<span class="sourceLineNo">878</span>            mutations.clear();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>          }<a name="line.879"></a>
-<span class="sourceLineNo">880</span>          switch (type) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>            case APPEND:<a name="line.881"></a>
-<span class="sourceLineNo">882</span>              r = append(region, quota, action.getMutation(), cellScanner, nonceGroup,<a name="line.882"></a>
-<span class="sourceLineNo">883</span>                  spaceQuotaEnforcement);<a name="line.883"></a>
-<span class="sourceLineNo">884</span>              break;<a name="line.884"></a>
-<span class="sourceLineNo">885</span>            case INCREMENT:<a name="line.885"></a>
-<span class="sourceLineNo">886</span>              r = increment(region, quota, action.getMutation(), cellScanner, nonceGroup,<a name="line.886"></a>
-<span class="sourceLineNo">887</span>                  spaceQuotaEnforcement);<a name="line.887"></a>
-<span class="sourceLineNo">888</span>              break;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>            case PUT:<a name="line.889"></a>
-<span class="sourceLineNo">890</span>            case DELETE:<a name="line.890"></a>
-<span class="sourceLineNo">891</span>              // Collect the individual mutations and apply in a batch<a name="line.891"></a>
-<span class="sourceLineNo">892</span>              if (mutations == null) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>                mutations = new ArrayList&lt;&gt;(actions.getActionCount());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>              }<a name="line.894"></a>
-<span class="sourceLineNo">895</span>              mutations.add(action);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>              break;<a name="line.896"></a>
-<span class="sourceLineNo">897</span>            default:<a name="line.897"></a>
-<span class="sourceLineNo">898</span>              throw new DoNotRetryIOException("Unsupported mutate type: " + type.name());<a name="line.898"></a>
-<span class="sourceLineNo">899</span>          }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>        } else {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>          throw new HBaseIOException("Unexpected Action type");<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        }<a name="line.902"></a>
-<span class="sourceLineNo">903</span>        if (r != null) {<a name="line.903"></a>
-<span class="sourceLineNo">904</span>          ClientProtos.Result pbResult = null;<a name="line.904"></a>
-<span class="sourceLineNo">905</span>          if (isClientCellBlockSupport(context)) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>            pbResult = ProtobufUtil.toResultNoData(r);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>            //  Hard to guess the size here.  Just make a rough guess.<a name="line.907"></a>
-<span class="sourceLineNo">908</span>            if (cellsToReturn == null) {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>              cellsToReturn = new ArrayList&lt;&gt;();<a name="line.909"></a>
-<span class="sourceLineNo">910</span>            }<a name="line.910"></a>
-<span class="sourceLineNo">911</span>            cellsToReturn.add(r);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>          } else {<a name="line.912"></a>
-<span class="sourceLineNo">913</span>            pbResult = ProtobufUtil.toResult(r);<a name="line.913"></a>
-<span class="sourceLineNo">914</span>          }<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          lastBlock = addSize(context, r, lastBlock);<a name="line.915"></a>
-<span class="sourceLineNo">916</span>          hasResultOrException = true;<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          resultOrExceptionBuilder.setResult(pbResult);<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        // Could get to here and there was no result and no exception.  Presumes we added<a name="line.919"></a>
-<span class="sourceLineNo">920</span>        // a Put or Delete to the collecting Mutations List for adding later.  In this<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        // case the corresponding ResultOrException instance for the Put or Delete will be added<a name="line.921"></a>
-<span class="sourceLineNo">922</span>        // down in the doNonAtomicBatchOp method call rather than up here.<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      } catch (IOException ie) {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>        rpcServer.getMetrics().exception(ie);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>        hasResultOrException = true;<a name="line.925"></a>
-<span class="sourceLineNo">926</span>        NameBytesPair pair = ResponseConverter.buildException(ie);<a name="line.926"></a>
-<span class="sourceLineNo">927</span>        resultOrExceptionBuilder.setException(pair);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        context.incrementResponseExceptionSize(pair.getSerializedSize());<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      }<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      if (hasResultOrException) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>        // Propagate index.<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        resultOrExceptionBuilder.setIndex(action.getIndex());<a name="line.932"></a>
-<span class="sourceLineNo">933</span>        builder.addResultOrException(resultOrExceptionBuilder.build());<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>    // Finish up any outstanding mutations<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    if (!CollectionUtils.isEmpty(mutations)) {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      doNonAtomicBatchOp(builder, region, quota, mutations, cellScanner, spaceQuotaEnforcement);<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    return cellsToReturn;<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>  private void checkCellSizeLimit(final HRegion r, final Mutation m) throws IOException {<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    if (r.maxCellSize &gt; 0) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>      CellScanner cells = m.cellScanner();<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      while (cells.advance()) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>        int size = PrivateCellUtil.estimatedSerializedSizeOf(cells.current());<a name="line.947"></a>
-<span class="sourceLineNo">948</span>        if (size &gt; r.maxCellSize) {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>          String msg = "Cell with size " + size + " exceeds limit of " + r.maxCellSize + " bytes";<a name="line.949"></a>
-<span class="sourceLineNo">950</span>          if (LOG.isDebugEnabled()) {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>            LOG.debug(msg);<a name="line.951"></a>
-<span class="sourceLineNo">952</span>          }<a name="line.952"></a>
-<span class="sourceLineNo">953</span>          throw new DoNotRetryIOException(msg);<a name="line.953"></a>
-<span class="sourceLineNo">954</span>        }<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      }<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><a name="line.958"></a>
-<span class="sourceLineNo">959</span>  private void doAtomicBatchOp(final RegionActionResult.Builder builder, final HRegion region,<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    final OperationQuota quota, final List&lt;ClientProtos.Action&gt; mutations,<a name="line.960"></a>
-<span class="sourceLineNo">961</span>    final CellScanner cells, ActivePolicyEnforcement spaceQuotaEnforcement)<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    throws IOException {<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    // Just throw the exception. The exception will be caught and then added to region-level<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    // exception for RegionAction. Leaving the null to action result is ok since the null<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    // result is viewed as failure by hbase client. And the region-lever exception will be used<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    // to replaced the null result. see AsyncRequestFutureImpl#receiveMultiAction and<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    // AsyncBatchRpcRetryingCaller#onComplete for more details.<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    doBatchOp(builder, region, quota, mutations, cells, spaceQuotaEnforcement, true);<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>  private void doNonAtomicBatchOp(final RegionActionResult.Builder builder, final HRegion region,<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    final OperationQuota quota, final List&lt;ClientProtos.Action&gt; mutations,<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    final CellScanner cells, ActivePolicyEnforcement spaceQuotaEnforcement) {<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    try {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      doBatchOp(builder, region, quota, mutations, cells, spaceQuotaEnforcement, false);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    } catch (IOException e) {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      // Set the exception for each action. The mutations in same RegionAction are group to<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      // different batch and then be processed individually. Hence, we don't set the region-level<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      // exception here for whole RegionAction.<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      for (Action mutation : mutations) {<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        builder.addResultOrException(getResultOrException(e, mutation.getIndex()));<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>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span><a name="line.985"></a>
-<span class="sourceLineNo">986</span>  /**<a name="line.986"></a>
-<span class="sourceLineNo">987</span>   * Execute a list of Put/Delete mutations.<a name="line.987"></a>
-<span class="sourceLineNo">988</span>   *<a name="line.988"></a>
-<span class="sourceLineNo">989</span>   * @param builder<a name="line.989"></a>
-<span class="sourceLineNo">990</span>   * @param region<a name="line.990"></a>
-<span class="sourceLineNo">991</span>   * @param mutations<a name="line.991"></a>
-<span class="sourceLineNo">992</span>   */<a name="line.992"></a>
-<span class="sourceLineNo">993</span>  private void doBatchOp(final RegionActionResult.Builder builder, final HRegion region,<a name="line.993"></a>
-<span class="sourceLineNo">994</span>      final OperationQuota quota, final List&lt;ClientProtos.Action&gt; mutations,<a name="line.994"></a>
-<span class="sourceLineNo">995</span>      final CellScanner cells, ActivePolicyEnforcement spaceQuotaEnforcement, boolean atomic)<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      throws IOException {<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    Mutation[] mArray = new Mutation[mutations.size()];<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    boolean batchContainsPuts = false, batchContainsDelete = false;<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    try {<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>      /** HBASE-17924<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>       * mutationActionMap is a map to map the relation between mutations and actions<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>       * since mutation array may have been reoredered.In order to return the right<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>       * result or exception to the corresponding actions, We need to know which action<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>       * is the mutation belong to. We can't sort ClientProtos.Action array, since they<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>       * are bonded to cellscanners.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>       */<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>      Map&lt;Mutation, ClientProtos.Action&gt; mutationActionMap = new HashMap&lt;&gt;();<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      int i = 0;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      for (ClientProtos.Action action: mutations) {<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        if (action.hasGet()) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>          throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>            action.getGet());<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>        }<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        MutationProto m = action.getMutation();<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>        Mutation mutation;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        if (m.getMutateType() == MutationType.PUT) {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>          mutation = ProtobufUtil.toPut(m, cells);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          batchContainsPuts = true;<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>        } else {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>          mutation = ProtobufUtil.toDelete(m, cells);<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>          batchContainsDelete = true;<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>        }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>        mutationActionMap.put(mutation, action);<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        mArray[i++] = mutation;<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>        checkCellSizeLimit(region, mutation);<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>        // Check if a space quota disallows this mutation<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        spaceQuotaEnforcement.getPolicyEnforcement(region).check(mutation);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>        quota.addMutation(mutation);<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      }<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span><a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      // HBASE-17924<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      // Sort to improve lock efficiency for non-atomic batch of operations. If atomic<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>      // order is preserved as its expected from the client<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>      if (!atomic) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>        Arrays.sort(mArray, (v1, v2) -&gt; Row.COMPARATOR.compare(v1, v2));<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>      }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      OperationStatus[] codes = region.batchMutate(mArray, atomic, HConstants.NO_NONCE,<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>        HConstants.NO_NONCE);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      for (i = 0; i &lt; codes.length; i++) {<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>        Mutation currentMutation = mArray[i];<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        ClientProtos.Action currentAction = mutationActionMap.get(currentMutation);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        int index = currentAction.hasIndex() || !atomic ? currentAction.getIndex() : i;<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>        Exception e = null;<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>        switch (codes[i].getOperationStatusCode()) {<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>          case BAD_FAMILY:<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>            e = new NoSuchColumnFamilyException(codes[i].getExceptionMsg());<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>            break;<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>          case SANITY_CHECK_FAILURE:<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>            e = new FailedSanityCheckException(codes[i].getExceptionMsg());<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>            break;<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span><a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>          default:<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>            e = new DoNotRetryIOException(codes[i].getExceptionMsg());<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>            break;<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          case SUCCESS:<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>            builder.addResultOrException(getResultOrException(<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>              ClientProtos.Result.getDefaultInstance(), index));<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>            break;<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>          case STORE_TOO_BUSY:<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>            e = new RegionTooBusyException(codes[i].getExceptionMsg());<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>            break;<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>    } finally {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      int processedMutationIndex = 0;<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      for (Action mutation : mutations) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        // The non-null mArray[i] means the cell scanner has been read.<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>        if (mArray[processedMutationIndex++] == null) {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>          skipCellsForMutation(mutation, cells);<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>        }<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>      }<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      updateMutationMetrics(region, before, batchContainsPuts, batchContainsDelete);<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>  }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>  private void updateMutationMetrics(HRegion region, long starttime, boolean batchContainsPuts,<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    boolean batchContainsDelete) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (regionServer.metricsRegionServer != null) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      long after = EnvironmentEdgeManager.currentTime();<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      if (batchContainsPuts) {<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>        regionServer.metricsRegionServer<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>          .updatePutBatch(region.getTableDescriptor().getTableName(), after - starttime);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      if (batchContainsDelete) {<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        regionServer.metricsRegionServer<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>          .updateDeleteBatch(region.getTableDescriptor().getTableName(), after - starttime);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    }<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  }<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  /**<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>   * Execute a list of Put/Delete mutations. The function returns OperationStatus instead of<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>   * constructing MultiResponse to save a possible loop if caller doesn't need MultiResponse.<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>   * @param region<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>   * @param mutations<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>   * @param replaySeqId<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>   * @return an array of OperationStatus which internally contains the OperationStatusCode and the<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>   *         exceptionMessage if any<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>   * @throws IOException<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>   */<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>  private OperationStatus [] doReplayBatchOp(final HRegion region,<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      final List&lt;MutationReplay&gt; mutations, long replaySeqId) throws IOException {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    boolean batchContainsPuts = false, batchContainsDelete = false;<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>    try {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      for (Iterator&lt;MutationReplay&gt; it = mutations.iterator(); it.hasNext();) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        MutationReplay m = it.next();<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span><a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        if (m.getType() == MutationType.PUT) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>          batchContainsPuts = true;<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>        } else {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>          batchContainsDelete = true;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>        }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span><a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>        NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map = m.mutation.getFamilyCellMap();<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>        List&lt;Cell&gt; metaCells = map.get(WALEdit.METAFAMILY);<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>        if (metaCells != null &amp;&amp; !metaCells.isEmpty()) {<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          for (Cell metaCell : metaCells) {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>            CompactionDescriptor compactionDesc = WALEdit.getCompaction(metaCell);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>            boolean isDefaultReplica = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>            HRegion hRegion = region;<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>            if (compactionDesc != null) {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>              // replay the compaction. Remove the files from stores only if we are the primary<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>              // region replica (thus own the files)<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>              hRegion.replayWALCompactionMarker(compactionDesc, !isDefaultReplica, isDefaultReplica,<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>                replaySeqId);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>              continue;<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>            }<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>            FlushDescriptor flushDesc = WALEdit.getFlushDescriptor(metaCell);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>            if (flushDesc != null &amp;&amp; !isDefaultReplica) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>              hRegion.replayWALFlushMarker(flushDesc, replaySeqId);<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>              continue;<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            }<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>            RegionEventDescriptor regionEvent = WALEdit.getRegionEventDescriptor(metaCell);<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>            if (regionEvent != null &amp;&amp; !isDefaultReplica) {<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>              hRegion.replayWALRegionEventMarker(regionEvent);<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>              continue;<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>            }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>            BulkLoadDescriptor bulkLoadEvent = WALEdit.getBulkLoadDescriptor(metaCell);<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>            if (bulkLoadEvent != null) {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>              hRegion.replayWALBulkLoadEventMarker(bulkLoadEvent);<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>              continue;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>            }<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>          }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>          it.remove();<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>        }<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      }<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      requestCount.increment();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      }<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      return region.batchReplay(mutations.toArray(<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        new MutationReplay[mutations.size()]), replaySeqId);<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    } finally {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      updateMutationMetrics(region, before, batchContainsPuts, batchContainsDelete);<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>  }<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span><a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  private void closeAllScanners() {<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    // Close any outstanding scanners. Means they'll get an UnknownScanner<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    // exception next time they come in.<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    for (Map.Entry&lt;String, RegionScannerHolder&gt; e : scanners.entrySet()) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      try {<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>        e.getValue().s.close();<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      } catch (IOException ioe) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>        LOG.warn("Closing scanner " + e.getKey(), ioe);<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      }<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    }<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>  }<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span><a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>  // Exposed for testing<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>  interface LogDelegate {<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    void logBatchWarning(String firstRegionName, int sum, int rowSizeWarnThreshold);<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>  private static LogDelegate DEFAULT_LOG_DELEGATE = new LogDelegate() {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    @Override<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    public void logBatchWarning(String firstRegionName, int sum, int rowSizeWarnThreshold) {<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (LOG.isWarnEnabled()) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        LOG.warn("Large batch operation detected (greater than " + rowSizeWarnThreshold<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>            + ") (HBASE-18023)." + " Requested Number of Rows: " + sum + " Client: "<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>            + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>            + RpcServer.getRemoteAddress().orElse(null)<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>            + " first region in multi=" + firstRegionName);<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>  };<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span><a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>  private final LogDelegate ld;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>  public RSRpcServices(HRegionServer rs) throws IOException {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    this(rs, DEFAULT_LOG_DELEGATE);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>  }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span><a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  // Directly invoked only for testing<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  RSRpcServices(HRegionServer rs, LogDelegate ld) throws IOException {<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    this.ld = ld;<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    regionServer = rs;<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    rowSizeWarnThreshold = rs.conf.getInt(BATCH_ROWS_THRESHOLD_NAME, BATCH_ROWS_THRESHOLD_DEFAULT);<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    RpcSchedulerFactory rpcSchedulerFactory;<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    try {<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      rpcSchedulerFactory = getRpcSchedulerFactoryClass().asSubclass(RpcSchedulerFactory.class)<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>          .getDeclaredConstructor().newInstance();<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>    } catch (NoSuchMethodException | InvocationTargetException |<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>        InstantiationException | IllegalAccessException e) {<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      throw new IllegalArgumentException(e);<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>    // Server to handle client requests.<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>    InetSocketAddress initialIsa;<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    InetSocketAddress bindAddress;<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    if(this instanceof MasterRpcServices) {<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      String hostname = getHostname(rs.conf, true);<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      int port = rs.conf.getInt(HConstants.MASTER_PORT, HConstants.DEFAULT_MASTER_PORT);<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      // Creation of a HSA will force a resolve.<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      initialIsa = new InetSocketAddress(hostname, port);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      bindAddress = new InetSocketAddress(rs.conf.get("hbase.master.ipc.address", hostname), port);<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    } else {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      String hostname = getHostname(rs.conf, false);<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      int port = rs.conf.getInt(HConstants.REGIONSERVER_PORT,<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        HConstants.DEFAULT_REGIONSERVER_PORT);<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      // Creation of a HSA will force a resolve.<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      initialIsa = new InetSocketAddress(hostname, port);<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      bindAddress = new InetSocketAddress(<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>        rs.conf.get("hbase.regionserver.ipc.address", hostname), port);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    if (initialIsa.getAddress() == null) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      throw new IllegalArgumentException("Failed resolve of " + initialIsa);<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>    }<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    priority = createPriority();<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    // Using Address means we don't get the IP too. Shorten it more even to just the host name<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    // w/o the domain.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>    String name = rs.getProcessName() + "/" +<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>        Address.fromParts(initialIsa.getHostName(), initialIsa.getPort()).toStringWithoutDomain();<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>    // Set how many times to retry talking to another server over Connection.<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    ConnectionUtils.setServerSideHConnectionRetriesConfig(rs.conf, name, LOG);<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>    rpcServer = createRpcServer(rs, rs.conf, rpcSchedulerFactory, bindAddress, name);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>    rpcServer.setRsRpcServices(this);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    scannerLeaseTimeoutPeriod = rs.conf.getInt(<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>      HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD,<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      HConstants.DEFAULT_HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD);<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    maxScannerResultSize = rs.conf.getLong(<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>      HConstants.HBASE_SERVER_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      HConstants.DEFAULT_HBASE_SERVER_SCANNER_MAX_RESULT_SIZE);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    rpcTimeout = rs.conf.getInt(<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    minimumScanTimeLimitDelta = rs.conf.getLong(<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA,<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA);<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span><a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    InetSocketAddress address = rpcServer.getListenerAddress();<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    if (address == null) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      throw new IOException("Listener channel is closed");<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>    // Set our address, however we need the final port that was given to rpcServer<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    isa = new InetSocketAddress(initialIsa.getHostName(), address.getPort());<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    rpcServer.setErrorHandler(this);<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    rs.setName(name);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    closedScanners = CacheBuilder.newBuilder()<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        .expireAfterAccess(scannerLeaseTimeoutPeriod, TimeUnit.MILLISECONDS).build();<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>  }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span><a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>  protected RpcServerInterface createRpcServer(Server server, Configuration conf,<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>      RpcSchedulerFactory rpcSchedulerFactory, InetSocketAddress bindAddress, String name)<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>      throws IOException {<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    boolean reservoirEnabled = conf.getBoolean(ByteBuffAllocator.ALLOCATOR_POOL_ENABLED_KEY, true);<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    try {<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      return RpcServerFactory.createRpcServer(server, name, getServices(),<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>          bindAddress, // use final bindAddress for this server.<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>          conf, rpcSchedulerFactory.create(conf, this, server), reservoirEnabled);<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>    } catch (BindException be) {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      throw new IOException(be.getMessage() + ". To switch ports use the '"<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>          + HConstants.REGIONSERVER_PORT + "' configuration property.",<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>          be.getCause() != null ? be.getCause() : be);<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>    }<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>  }<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span><a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  protected Class&lt;?&gt; getRpcSchedulerFactoryClass() {<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    return this.regionServer.conf.getClass(REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS,<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>      SimpleRpcSchedulerFactory.class);<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>  }<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span><a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>  @Override<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    if (rpcServer instanceof ConfigurationObserver) {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>      ((ConfigurationObserver)rpcServer).onConfigurationChange(newConf);<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    }<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>  protected PriorityFunction createPriority() {<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>    return new AnnotationReadingPriorityFunction(this);<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>  }<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span><a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>  protected void requirePermission(String request, Permission.Action perm) throws IOException {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    if (accessChecker != null) {<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>      accessChecker.requirePermission(RpcServer.getRequestUser().orElse(null), request, null, perm);<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    }<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">048</span>import org.apache.hadoop.fs.FileSystem;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.Path;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ByteBufferExtendedCell;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.CacheEvictionStats;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.CacheEvictionStatsBuilder;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.Cell;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CompareOperator;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HConstants;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.RegionTooBusyException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.Server;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ServerName;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.TableName;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Append;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Get;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Put;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.Result;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Row;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.exceptions.UnknownProtocolException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.io.ByteBuffAllocator;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.io.TimeRange;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.io.hfile.BlockCache;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.RpcScheduler;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.net.Address;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.procedure2.RSProcedureCallable;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.regionserver.handler.AssignRegionHandler;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.regionserver.handler.UnassignRegionHandler;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.replication.regionserver.RejectReplicationRequestStateChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.replication.regionserver.RejectRequestsFromClientStateChecker;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.security.User;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.security.access.AccessChecker;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.security.access.NoopAccessChecker;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.security.access.Permission;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.security.access.ZKPermissionWatcher;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.wal.WALSplitUtil;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.wal.WALSplitUtil.MutationReplay;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.zookeeper.KeeperException;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.slf4j.Logger;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.slf4j.LoggerFactory;<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.cache.Cache;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.cache.CacheBuilder;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hbase.thirdparty.com.google.protobuf.Message;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hbase.thirdparty.com.google.protobuf.RpcController;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hbase.thirdparty.com.google.protobuf.TextFormat;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils;<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchRequest;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactionSwitchResponse;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RemoteProcedureRequest;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>/**<a name="line.257"></a>
+<span class="sourceLineNo">258</span> * Implements the regionserver RPC services.<a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>@InterfaceAudience.Private<a name="line.260"></a>
+<span class="sourceLineNo">261</span>@SuppressWarnings("deprecation")<a name="line.261"></a>
+<span class="sourceLineNo">262</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    ConfigurationObserver {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected static final Logger LOG = LoggerFactory.getLogger(RSRpcServices.class);<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  /** RPC scheduler to use for the region server. */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    "hbase.region.server.rpc.scheduler.factory.class";<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  /** RPC scheduler to use for the master. */<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  public static final String MASTER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    "hbase.master.rpc.scheduler.factory.class";<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  /**<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  // Count only once for requests with multiple actions like multi/caching-scan/replayBatch<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  final LongAdder requestCount = new LongAdder();<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  // Request counter for rpc get<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  // Request counter for rpc scan<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // Request counter for rpc multi<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  // Request counter for rpc mutate<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  // Server to handle client requests.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  final RpcServerInterface rpcServer;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  final InetSocketAddress isa;<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>  @VisibleForTesting<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected final HRegionServer regionServer;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private final long maxScannerResultSize;<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  // The reference to the priority extraction function<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  private final PriorityFunction priority;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  /**<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * The RPC timeout period (milliseconds)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private final int rpcTimeout;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * The minimum allowable delta to use for the scan limit<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private final long minimumScanTimeLimitDelta;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  /**<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * Row size threshold for multi requests above which a warning is logged<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  private final int rowSizeWarnThreshold;<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  private AccessChecker accessChecker;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private ZKPermissionWatcher zkPermissionWatcher;<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  /**<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * Services launched in RSRpcServices. By default they are on but you can use the below<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * booleans to selectively enable/disable either Admin or Client Service (Rare is the case<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * where you would ever turn off one or the other).<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   */<a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public static final String REGIONSERVER_ADMIN_SERVICE_CONFIG =<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      "hbase.regionserver.admin.executorService";<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  public static final String REGIONSERVER_CLIENT_SERVICE_CONFIG =<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      "hbase.regionserver.client.executorService";<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>  /**<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * An Rpc callback for closing a RegionScanner.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   */<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    private final RegionScanner scanner;<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      this.scanner = scanner;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>    @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public void run() throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      this.scanner.close();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    private final Shipper shipper;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    private final Lease lease;<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>    public RegionScannerShippedCallBack(String scannerName, Shipper shipper, Lease lease) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      this.scannerName = scannerName;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.shipper = shipper;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      this.lease = lease;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    @Override<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public void run() throws IOException {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.shipper.shipped();<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      if (scanners.containsKey(scannerName)) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * completion of multiGets.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    public void addScanner(RegionScanner scanner) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      this.scanners.add(scanner);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>    @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    public void run() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      for (RegionScanner scanner : scanners) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        try {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          scanner.close();<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        } catch (IOException e) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      }<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  /**<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  private static final class RegionScannerHolder {<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final String scannerName;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final RegionScanner s;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final HRegion r;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    private final RpcCallback closeCallBack;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final RpcCallback shippedCallback;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private byte[] rowOfLastPartialResult;<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private boolean needCursor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    public RegionScannerHolder(String scannerName, RegionScanner s, HRegion r,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      this.scannerName = scannerName;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      this.s = s;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      this.r = r;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.closeCallBack = closeCallBack;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.shippedCallback = shippedCallback;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.needCursor = needCursor;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>    public long getNextCallSeq() {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      return nextCallSeq.get();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  /**<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * closed<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   */<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private class ScannerListener implements LeaseListener {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    private final String scannerName;<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>    ScannerListener(final String n) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      this.scannerName = n;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span>    @Override<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    public void leaseExpired() {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      if (rsh != null) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        RegionScanner s = rsh.s;<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.480"></a>
+<span class="sourceLineNo">481</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        HRegion region = null;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        try {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        } catch (IOException e) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        } finally {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          try {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>            s.close();<a name="line.492"></a>
+<span class="sourceLineNo">493</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>            }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>          } catch (IOException e) {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>          }<a name="line.498"></a>
+<span class="sourceLineNo">499</span>        }<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      } else {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.501"></a>
+<span class="sourceLineNo">502</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  }<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>                                                        final int index){<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>  }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span>  private static ResultOrException getResultOrException(<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      final ResultOrException.Builder builder, final int index) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    return builder.setIndex(index).build();<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>  /**<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * Checks for the following pre-checks in order:<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   * &lt;ol&gt;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   *   &lt;li&gt;RegionServer is running&lt;/li&gt;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   *   &lt;li&gt;If authorization is enabled, then RPC caller has ADMIN permissions&lt;/li&gt;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   * &lt;/ol&gt;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>   * @param requestName name of rpc request. Used in reporting failures to provide context.<a name="line.527"></a>
+<span class="sourceLineNo">528</span>   * @throws ServiceException If any of the above listed pre-check fails.<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   */<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  private void rpcPreCheck(String requestName) throws ServiceException {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    try {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      checkOpen();<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      requirePermission(requestName, Permission.Action.ADMIN);<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    } catch (IOException ioe) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      throw new ServiceException(ioe);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   * @param mutation Mutation.<a name="line.541"></a>
+<span class="sourceLineNo">542</span>   * @param nonceGroup Nonce group from the request.<a name="line.542"></a>
+<span class="sourceLineNo">543</span>   * @return whether to proceed this mutation.<a name="line.543"></a>
+<span class="sourceLineNo">544</span>   */<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      throws IOException {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    boolean canProceed = false;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    try {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } catch (InterruptedException ex) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return canProceed;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  /**<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * Ends nonce operation for a mutation, if needed.<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   * @param mutation Mutation.<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      long nonceGroup, boolean success) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    if (result == null) return;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    if (clientCellBlockSupported) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    } else {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      builder.setResult(pbr);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    }<a name="line.584"></a>
+<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    builder.setStale(!isDefaultRegion);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    if (results.isEmpty()) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      return;<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    if (clientCellBlockSupported) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      for (Result res : results) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        builder.addCellsPerResult(res.size());<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    } else {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      for (Result res : results) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        builder.addResults(pbr);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Mutate a list of rows atomically.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   */<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  private boolean checkAndRowMutate(final HRegion region, final List&lt;ClientProtos.Action&gt; actions,<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    final CellScanner cellScanner, byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    ByteArrayComparable comparator, TimeRange timeRange, RegionActionResult.Builder builder,<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    ActivePolicyEnforcement spaceQuotaEnforcement) throws IOException {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    int countOfCompleteMutation = 0;<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    try {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      RowMutations rm = null;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      int i = 0;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      ClientProtos.ResultOrException.Builder resultOrExceptionOrBuilder =<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        ClientProtos.ResultOrException.newBuilder();<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      for (ClientProtos.Action action: actions) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        if (action.hasGet()) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>          throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.626"></a>
+<span class="sourceLineNo">627</span>            action.getGet());<a name="line.627"></a>
+<span class="sourceLineNo">628</span>        }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        MutationType type = action.getMutation().getMutateType();<a name="line.629"></a>
+<span class="sourceLineNo">630</span>        if (rm == null) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>          rm = new RowMutations(action.getMutation().getRow().toByteArray(), actions.size());<a name="line.631"></a>
+<span class="sourceLineNo">632</span>        }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>        switch (type) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span>          case PUT:<a name="line.634"></a>
+<span class="sourceLineNo">635</span>            Put put = ProtobufUtil.toPut(action.getMutation(), cellScanner);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>            ++countOfCompleteMutation;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>            checkCellSizeLimit(region, put);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>            spaceQuotaEnforcement.getPolicyEnforcement(region).check(put);<a name="line.638"></a>
+<span class="sourceLineNo">639</span>            rm.add(put);<a name="line.639"></a>
+<span class="sourceLineNo">640</span>            break;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          case DELETE:<a name="line.641"></a>
+<span class="sourceLineNo">642</span>            Delete del = ProtobufUtil.toDelete(action.getMutation(), cellScanner);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>            ++countOfCompleteMutation;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>            spaceQuotaEnforcement.getPolicyEnforcement(region).check(del);<a name="line.644"></a>
+<span class="sourceLineNo">645</span>            rm.add(del);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>            break;<a name="line.646"></a>
+<span class="sourceLineNo">647</span>          default:<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            throw new DoNotRetryIOException("Atomic put and/or delete only, not " + type.name());<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        // To unify the response format with doNonAtomicRegionMutation and read through client's<a name="line.650"></a>
+<span class="sourceLineNo">651</span>        // AsyncProcess we have to add an empty result instance per operation<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        resultOrExceptionOrBuilder.clear();<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        resultOrExceptionOrBuilder.setIndex(i++);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        builder.addResultOrException(<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          resultOrExceptionOrBuilder.build());<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      return region.checkAndRowMutate(row, family, qualifier, op, comparator, timeRange, rm);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    } finally {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      // Currently, the checkAndMutate isn't supported by batch so it won't mess up the cell scanner<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      // even if the malformed cells are not skipped.<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      for (int i = countOfCompleteMutation; i &lt; actions.size(); ++i) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        skipCellsForMutation(actions.get(i), cellScanner);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
+<span class="sourceLineNo">665</span>  }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>  /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * Execute an append mutation.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   *<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @return result to return to client if default operation should be<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * bypassed as indicated by RegionObserver, null otherwise<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   */<a name="line.672"></a>
+<span class="sourceLineNo">673</span>  private Result append(final HRegion region, final OperationQuota quota,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      final MutationProto mutation, final CellScanner cellScanner, long nonceGroup,<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      ActivePolicyEnforcement spaceQuota)<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      throws IOException {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    Append append = ProtobufUtil.toAppend(mutation, cellScanner);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    checkCellSizeLimit(region, append);<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    spaceQuota.getPolicyEnforcement(region).check(append);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    quota.addMutation(append);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    Result r = null;<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    if (region.getCoprocessorHost() != null) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      r = region.getCoprocessorHost().preAppend(append);<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    if (r == null) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      boolean canProceed = startNonceOperation(mutation, nonceGroup);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      boolean success = false;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      try {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>        long nonce = mutation.hasNonce() ? mutation.getNonce() : HConstants.NO_NONCE;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>        if (canProceed) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>          r = region.append(append, nonceGroup, nonce);<a name="line.692"></a>
+<span class="sourceLineNo">693</span>        } else {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>          // convert duplicate append to get<a name="line.694"></a>
+<span class="sourceLineNo">695</span>          List&lt;Cell&gt; results = region.get(ProtobufUtil.toGet(mutation, cellScanner), false,<a name="line.695"></a>
+<span class="sourceLineNo">696</span>              nonceGroup, nonce);<a name="line.696"></a>
+<span class="sourceLineNo">697</span>          r = Result.create(results);<a name="line.697"></a>
+<span class="sourceLineNo">698</span>        }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        success = true;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      } finally {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>        if (canProceed) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          endNonceOperation(mutation, nonceGroup, success);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>        }<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      if (region.getCoprocessorHost() != null) {<a name="line.705"></a>
+<span class="sourceLineNo">706</span>        r = region.getCoprocessorHost().postAppend(append, r);<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    if (regionServer.metricsRegionServer != null) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      regionServer.metricsRegionServer.updateAppend(<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          region.getTableDescriptor().getTableName(),<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        EnvironmentEdgeManager.currentTime() - before);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    return r == null ? Result.EMPTY_RESULT : r;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>  /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * Execute an increment mutation.<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   *<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   * @param region<a name="line.720"></a>
+<span class="sourceLineNo">721</span>   * @param mutation<a name="line.721"></a>
+<span class="sourceLineNo">722</span>   * @return the Result<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * @throws IOException<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   */<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  private Result increment(final HRegion region, final OperationQuota quota,<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      final MutationProto mutation, final CellScanner cells, long nonceGroup,<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      ActivePolicyEnforcement spaceQuota)<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      throws IOException {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    Increment increment = ProtobufUtil.toIncrement(mutation, cells);<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    checkCellSizeLimit(region, increment);<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    spaceQuota.getPolicyEnforcement(region).check(increment);<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    quota.addMutation(increment);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    Result r = null;<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    if (region.getCoprocessorHost() != null) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      r = region.getCoprocessorHost().preIncrement(increment);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    if (r == null) {<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      boolean canProceed = startNonceOperation(mutation, nonceGroup);<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      boolean success = false;<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      try {<a name="line.741"></a>
+<span class="sourceLineNo">742</span>        long nonce = mutation.hasNonce() ? mutation.getNonce() : HConstants.NO_NONCE;<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        if (canProceed) {<a name="line.743"></a>
+<span class="sourceLineNo">744</span>          r = region.increment(increment, nonceGroup, nonce);<a name="line.744"></a>
+<span class="sourceLineNo">745</span>        } else {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>          // convert duplicate increment to get<a name="line.746"></a>
+<span class="sourceLineNo">747</span>          List&lt;Cell&gt; results = region.get(ProtobufUtil.toGet(mutation, cells), false, nonceGroup,<a name="line.747"></a>
+<span class="sourceLineNo">748</span>              nonce);<a name="line.748"></a>
+<span class="sourceLineNo">749</span>          r = Result.create(results);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>        }<a name="line.750"></a>
+<span class="sourceLineNo">751</span>        success = true;<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      } finally {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>        if (canProceed) {<a name="line.753"></a>
+<span class="sourceLineNo">754</span>          endNonceOperation(mutation, nonceGroup, success);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        }<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      if (region.getCoprocessorHost() != null) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>        r = region.getCoprocessorHost().postIncrement(increment, r);<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      }<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    if (regionServer.metricsRegionServer != null) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      regionServer.metricsRegionServer.updateIncrement(<a name="line.762"></a>
+<span class="sourceLineNo">763</span>          region.getTableDescriptor().getTableName(),<a name="line.763"></a>
+<span class="sourceLineNo">764</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    return r == null ? Result.EMPTY_RESULT : r;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>  }<a name="line.767"></a>
+<span class="sourceLineNo">768</span><a name="line.768"></a>
+<span class="sourceLineNo">769</span>  /**<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   * Run through the regionMutation &lt;code&gt;rm&lt;/code&gt; and per Mutation, do the work, and then when<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   * done, add an instance of a {@link ResultOrException} that corresponds to each Mutation.<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @param cellsToReturn  Could be null. May be allocated in this method.  This is what this<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   * method returns as a 'result'.<a name="line.773"></a>
+<span class="sourceLineNo">774</span>   * @param closeCallBack the callback to be used with multigets<a name="line.774"></a>
+<span class="sourceLineNo">775</span>   * @param context the current RpcCallContext<a name="line.775"></a>
+<span class="sourceLineNo">776</span>   * @return Return the &lt;code&gt;cellScanner&lt;/code&gt; passed<a name="line.776"></a>
+<span class="sourceLineNo">777</span>   */<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  private List&lt;CellScannable&gt; doNonAtomicRegionMutation(final HRegion region,<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      final OperationQuota quota, final RegionAction actions, final CellScanner cellScanner,<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      final RegionActionResult.Builder builder, List&lt;CellScannable&gt; cellsToReturn, long nonceGroup,<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      final RegionScannersCloseCallBack closeCallBack, RpcCallContext context,<a name="line.781"></a>
+<span class="sourceLineNo">782</span>      ActivePolicyEnforcement spaceQuotaEnforcement) {<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    // Gather up CONTIGUOUS Puts and Deletes in this mutations List.  Idea is that rather than do<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    // one at a time, we instead pass them in batch.  Be aware that the corresponding<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // ResultOrException instance that matches each Put or Delete is then added down in the<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    // doNonAtomicBatchOp call.  We should be staying aligned though the Put and Delete are<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    // deferred/batched<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    List&lt;ClientProtos.Action&gt; mutations = null;<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    IOException sizeIOE = null;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    Object lastBlock = null;<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    ClientProtos.ResultOrException.Builder resultOrExceptionBuilder = ResultOrException.newBuilder();<a name="line.792"></a>
+<span class="sourceLineNo">793</span>    boolean hasResultOrException = false;<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    for (ClientProtos.Action action : actions.getActionList()) {<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      hasResultOrException = false;<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      resultOrExceptionBuilder.clear();<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      try {<a name="line.797"></a>
+<span class="sourceLineNo">798</span>        Result r = null;<a name="line.798"></a>
+<span class="sourceLineNo">799</span><a name="line.799"></a>
+<span class="sourceLineNo">800</span>        if (context != null<a name="line.800"></a>
+<span class="sourceLineNo">801</span>            &amp;&amp; context.isRetryImmediatelySupported()<a name="line.801"></a>
+<span class="sourceLineNo">802</span>            &amp;&amp; (context.getResponseCellSize() &gt; maxQuotaResultSize<a name="line.802"></a>
+<span class="sourceLineNo">803</span>              || context.getResponseBlockSize() + context.getResponseExceptionSize()<a name="line.803"></a>
+<span class="sourceLineNo">804</span>              &gt; maxQuotaResultSize)) {<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>          // We're storing the exception since the exception and reason string won't<a name="line.806"></a>
+<span class="sourceLineNo">807</span>          // change after the response size limit is reached.<a name="line.807"></a>
+<span class="sourceLineNo">808</span>          if (sizeIOE == null ) {<a name="line.808"></a>
+<span class="sourceLineNo">809</span>            // We don't need the stack un-winding do don't throw the exception.<a name="line.809"></a>
+<span class="sourceLineNo">810</span>            // Throwing will kill the JVM's JIT.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>            //<a name="line.811"></a>
+<span class="sourceLineNo">812</span>            // Instead just create the exception and then store it.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>            sizeIOE = new MultiActionResultTooLarge("Max size exceeded"<a name="line.813"></a>
+<span class="sourceLineNo">814</span>                + " CellSize: " + context.getResponseCellSize()<a name="line.814"></a>
+<span class="sourceLineNo">815</span>                + " BlockSize: " + context.getResponseBlockSize());<a name="line.815"></a>
+<span class="sourceLineNo">816</span><a name="line.816"></a>
+<span class="sourceLineNo">817</span>            // Only report the exception once since there's only one request that<a name="line.817"></a>
+<span class="sourceLineNo">818</span>            // caused the exception. Otherwise this number will dominate the exceptions count.<a name="line.818"></a>
+<span class="sourceLineNo">819</span>            rpcServer.getMetrics().exception(sizeIOE);<a name="line.819"></a>
+<span class="sourceLineNo">820</span>          }<a name="line.820"></a>
+<span class="sourceLineNo">821</span><a name="line.821"></a>
+<span class="sourceLineNo">822</span>          // Now that there's an exception is known to be created<a name="line.822"></a>
+<span class="sourceLineNo">823</span>          // use it for the response.<a name="line.823"></a>
+<span class="sourceLineNo">824</span>          //<a name="line.824"></a>
+<span class="sourceLineNo">825</span>          // This will create a copy in the builder.<a name="line.825"></a>
+<span class="sourceLineNo">826</span>          NameBytesPair pair = ResponseConverter.buildException(sizeIOE);<a name="line.826"></a>
+<span class="sourceLineNo">827</span>          resultOrExceptionBuilder.setException(pair);<a name="line.827"></a>
+<span class="sourceLineNo">828</span>          context.incrementResponseExceptionSize(pair.getSerializedSize());<a name="line.828"></a>
+<span class="sourceLineNo">829</span>          resultOrExceptionBuilder.setIndex(action.getIndex());<a name="line.829"></a>
+<span class="sourceLineNo">830</span>          builder.addResultOrException(resultOrExceptionBuilder.build());<a name="line.830"></a>
+<span class="sourceLineNo">831</span>          skipCellsForMutation(action, cellScanner);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>          continue;<a name="line.832"></a>
+<span class="sourceLineNo">833</span>        }<a name="line.833"></a>
+<span class="sourceLineNo">834</span>        if (action.hasGet()) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>          long before = EnvironmentEdgeManager.currentTime();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          ClientProtos.Get pbGet = action.getGet();<a name="line.836"></a>
+<span class="sourceLineNo">837</span>          // An asynchbase client, https://github.com/OpenTSDB/asynchbase, starts by trying to do<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          // a get closest before. Throwing the UnknownProtocolException signals it that it needs<a name="line.838"></a>
+<span class="sourceLineNo">839</span>          // to switch and do hbase2 protocol (HBase servers do not tell clients what versions<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          // they are; its a problem for non-native clients like asynchbase. HBASE-20225.<a name="line.840"></a>
+<span class="sourceLineNo">841</span>          if (pbGet.hasClosestRowBefore() &amp;&amp; pbGet.getClosestRowBefore()) {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>            throw new UnknownProtocolException("Is this a pre-hbase-1.0.0 or asynchbase client? " +<a name="line.842"></a>
+<span class="sourceLineNo">843</span>                "Client is invoking getClosestRowBefore removed in hbase-2.0.0 replaced by " +<a name="line.843"></a>
+<span class="sourceLineNo">844</span>                "reverse Scan.");<a name="line.844"></a>
+<span class="sourceLineNo">845</span>          }<a name="line.845"></a>
+<span class="sourceLineNo">846</span>          try {<a name="line.846"></a>
+<span class="sourceLineNo">847</span>            Get get = ProtobufUtil.toGet(pbGet);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>            if (context != null) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>              r = get(get, (region), closeCallBack, context);<a name="line.849"></a>
+<span class="sourceLineNo">850</span>            } else {<a name="line.850"></a>
+<span class="sourceLineNo">851</span>              r = region.get(get);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>            }<a name="line.852"></a>
+<span class="sourceLineNo">853</span>          } finally {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>            if (regionServer.metricsRegionServer != null) {<a name="line.854"></a>
+<span class="sourceLineNo">855</span>              regionServer.metricsRegionServer.updateGet(<a name="line.855"></a>
+<span class="sourceLineNo">856</span>                  region.getTableDescriptor().getTableName(),<a name="line.856"></a>
+<span class="sourceLineNo">857</span>                  EnvironmentEdgeManager.currentTime() - before);<a name="line.857"></a>
+<span class="sourceLineNo">858</span>            }<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          }<a name="line.859"></a>
+<span class="sourceLineNo">860</span>        } else if (action.hasServiceCall()) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          hasResultOrException = true;<a name="line.861"></a>
+<span class="sourceLineNo">862</span>          com.google.protobuf.Message result =<a name="line.862"></a>
+<span class="sourceLineNo">863</span>            execServiceOnRegion(region, action.getServiceCall());<a name="line.863"></a>
+<span class="sourceLineNo">864</span>          ClientProtos.CoprocessorServiceResult.Builder serviceResultBuilder =<a name="line.864"></a>
+<span class="sourceLineNo">865</span>            ClientProtos.CoprocessorServiceResult.newBuilder();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>          resultOrExceptionBuilder.setServiceResult(<a name="line.866"></a>
+<span class="sourceLineNo">867</span>            serviceResultBuilder.setValue(<a name="line.867"></a>
+<span class="sourceLineNo">868</span>              serviceResultBuilder.getValueBuilder()<a name="line.868"></a>
+<span class="sourceLineNo">869</span>                .setName(result.getClass().getName())<a name="line.869"></a>
+<span class="sourceLineNo">870</span>                // TODO: Copy!!!<a name="line.870"></a>
+<span class="sourceLineNo">871</span>                .setValue(UnsafeByteOperations.unsafeWrap(result.toByteArray()))));<a name="line.871"></a>
+<span class="sourceLineNo">872</span>        } else if (action.hasMutation()) {<a name="line.872"></a>
+<span class="sourceLineNo">873</span>          MutationType type = action.getMutation().getMutateType();<a name="line.873"></a>
+<span class="sourceLineNo">874</span>          if (type != MutationType.PUT &amp;&amp; type != MutationType.DELETE &amp;&amp; mutations != null &amp;&amp;<a name="line.874"></a>
+<span class="sourceLineNo">875</span>              !mutations.isEmpty()) {<a name="line.875"></a>
+<span class="sourceLineNo">876</span>            // Flush out any Puts or Deletes already collected.<a name="line.876"></a>
+<span class="sourceLineNo">877</span>            doNonAtomicBatchOp(builder, region, quota, mutations, cellScanner,<a name="line.877"></a>
+<span class="sourceLineNo">878</span>              spaceQuotaEnforcement);<a name="line.878"></a>
+<span class="sourceLineNo">879</span>            mutations.clear();<a name="line.879"></a>
+<span class="sourceLineNo">880</span>          }<a name="line.880"></a>
+<span class="sourceLineNo">881</span>          switch (type) {<a name="line.881"></a>
+<span class="sourceLineNo">882</span>            case APPEND:<a name="line.882"></a>
+<span class="sourceLineNo">883</span>              r = append(region, quota, action.getMutation(), cellScanner, nonceGroup,<a name="line.883"></a>
+<span class="sourceLineNo">884</span>                  spaceQuotaEnforcement);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>              break;<a name="line.885"></a>
+<span class="sourceLineNo">886</span>            case INCREMENT:<a name="line.886"></a>
+<span class="sourceLineNo">887</span>              r = increment(region, quota, action.getMutation(), cellScanner, nonceGroup,<a name="line.887"></a>
+<span class="sourceLineNo">888</span>                  spaceQuotaEnforcement);<a name="line.888"></a>
+<span class="sourceLineNo">889</span>              break;<a name="line.889"></a>
+<span class="sourceLineNo">890</span>            case PUT:<a name="line.890"></a>
+<span class="sourceLineNo">891</span>            case DELETE:<a name="line.891"></a>
+<span class="sourceLineNo">892</span>              // Collect the individual mutations and apply in a batch<a name="line.892"></a>
+<span class="sourceLineNo">893</span>              if (mutations == null) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span>                mutations = new ArrayList&lt;&gt;(actions.getActionCount());<a name="line.894"></a>
+<span class="sourceLineNo">895</span>              }<a name="line.895"></a>
+<span class="sourceLineNo">896</span>              mutations.add(action);<a name="line.896"></a>
+<span class="sourceLineNo">897</span>              break;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>            default:<a name="line.898"></a>
+<span class="sourceLineNo">899</span>              throw new DoNotRetryIOException("Unsupported mutate type: " + type.name());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>          }<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        } else {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>          throw new HBaseIOException("Unexpected Action type");<a name="line.902"></a>
+<span class="sourceLineNo">903</span>        }<a name="line.903"></a>
+<span class="sourceLineNo">904</span>        if (r != null) {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>          ClientProtos.Result pbResult = null;<a name="line.905"></a>
+<span class="sourceLineNo">906</span>          if (isClientCellBlockSupport(context)) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>            pbResult = ProtobufUtil.toResultNoData(r);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>            //  Hard to guess the size here.  Just make a rough guess.<a name="line.908"></a>
+<span class="sourceLineNo">909</span>            if (cellsToReturn == null) {<a name="line.909"></a>
+<span class="sourceLineNo">910</span>              cellsToReturn = new ArrayList&lt;&gt;();<a name="line.910"></a>
+<span class="sourceLineNo">911</span>            }<a name="line.911"></a>
+<span class="sourceLineNo">912</span>            cellsToReturn.add(r);<a name="line.912"></a>
+<span class="sourceLineNo">913</span>          } else {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>            pbResult = ProtobufUtil.toResult(r);<a name="line.914"></a>
+<span class="sourceLineNo">915</span>          }<a name="line.915"></a>
+<span class="sourceLineNo">916</span>          lastBlock = addSize(context, r, lastBlock);<a name="line.916"></a>
+<span class="sourceLineNo">917</span>          hasResultOrException = true;<a name="line.917"></a>
+<span class="sourceLineNo">918</span>          resultOrExceptionBuilder.setResult(pbResult);<a name="line.918"></a>
+<span class="sourceLineNo">919</span>        }<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        // Could get to here and there was no result and no exception.  Presumes we added<a name="line.920"></a>
+<span class="sourceLineNo">921</span>        // a Put or Delete to the collecting Mutations List for adding later.  In this<a name="line.921"></a>
+<span class="sourceLineNo">922</span>        // case the corresponding ResultOrException instance for the Put or Delete will be added<a name="line.922"></a>
+<span class="sourceLineNo">923</span>        // down in the doNonAtomicBatchOp method call rather than up here.<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      } catch (IOException ie) {<a name="line.924"></a>
+<span class="sourceLineNo">925</span>        rpcServer.getMetrics().exception(ie);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>        hasResultOrException = true;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>        NameBytesPair pair = ResponseConverter.buildException(ie);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>        resultOrExceptionBuilder.setException(pair);<a name="line.928"></a>
+<span class="sourceLineNo">929</span>        context.incrementResponseExceptionSize(pair.getSerializedSize());<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      }<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      if (hasResultOrException) {<a name="line.931"></a>
+<span class="sourceLineNo">932</span>        // Propagate index.<a name="line.932"></a>
+<span class="sourceLineNo">933</span>        resultOrExceptionBuilder.setIndex(action.getIndex());<a name="line.933"></a>
+<span class="sourceLineNo">934</span>        builder.addResultOrException(resultOrExceptionBuilder.build());<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>    // Finish up any outstanding mutations<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    if (!CollectionUtils.isEmpty(mutations)) {<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      doNonAtomicBatchOp(builder, region, quota, mutations, cellScanner, spaceQuotaEnforcement);<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    }<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    return cellsToReturn;<a name="line.941"></a>
+<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
+<span class="sourceLineNo">943</span><a name="line.943"></a>
+<span class="sourceLineNo">944</span>  private void checkCellSizeLimit(final HRegion r, final Mutation m) throws IOException {<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    if (r.maxCellSize &gt; 0) {<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      CellScanner cells = m.cellScanner();<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      while (cells.advance()) {<a name="line.947"></a>
+<span class="sourceLineNo">948</span>        int size = PrivateCellUtil.estimatedSerializedSizeOf(cells.current());<a name="line.948"></a>
+<span class="sourceLineNo">949</span>        if (size &gt; r.maxCellSize) {<a name="line.949"></a>
+<span class="sourceLineNo">950</span>          String msg = "Cell with size " + size + " exceeds limit of " + r.maxCellSize + " bytes";<a name="line.950"></a>
+<span class="sourceLineNo">951</span>          if (LOG.isDebugEnabled()) {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>            LOG.debug(msg);<a name="line.952"></a>
+<span class="sourceLineNo">953</span>          }<a name="line.953"></a>
+<span class="sourceLineNo">954</span>          throw new DoNotRetryIOException(msg);<a name="line.954"></a>
+<span class="sourceLineNo">955</span>        }<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>  }<a name="line.958"></a>
+<span class="sourceLineNo">959</span><a name="line.959"></a>
+<span class="sourceLineNo">960</span>  private void doAtomicBatchOp(final RegionActionResult.Builder builder, final HRegion region,<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    final OperationQuota quota, final List&lt;ClientProtos.Action&gt; mutations,<a name="line.961"></a>
+<span class="sourceLineNo">962</span>    final CellScanner cells, ActivePolicyEnforcement spaceQuotaEnforcement)<a name="line.962"></a>
+<span class="sourceLineNo">963</span>    throws IOException {<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    // Just throw the exception. The exception will be caught and then added to region-level<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    // exception for RegionAction. Leaving the null to action result is ok since the null<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // result is viewed as failure by hbase client. And the region-lever exception will be used<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    // to replaced the null result. see AsyncRequestFutureImpl#receiveMultiAction and<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    // AsyncBatchRpcRetryingCaller#onComplete for more details.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    doBatchOp(builder, region, quota, mutations, cells, spaceQuotaEnforcement, true);<a name="line.969"></a>
+<span class="sourceLineNo">970</span>  }<a name="line.970"></a>
+<span class="sourceLineNo">971</span><a name="line.971"></a>
+<span class="sourceLineNo">972</span>  private void doNonAtomicBatchOp(final RegionActionResult.Builder builder, final HRegion region,<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    final OperationQuota quota, final List&lt;ClientProtos.Action&gt; mutations,<a name="line.973"></a>
+<span class="sourceLineNo">974</span>    final CellScanner cells, ActivePolicyEnforcement spaceQuotaEnforcement) {<a name="line.974"></a>
+<span class="sourceLineNo">975</span>    try {<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      doBatchOp(builder, region, quota, mutations, cells, spaceQuotaEnforcement, false);<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    } catch (IOException e) {<a name="line.977"></a>
+<span class="sourceLineNo">978</span>      // Set the exception for each action. The mutations in same RegionAction are group to<a name="line.978"></a>
+<span class="sourceLineNo">979</span>      // different batch and then be processed individually. Hence, we don't set the region-level<a name="line.979"></a>
+<span class="sourceLineNo">980</span>      // exception here for whole RegionAction.<a name="line.980"></a>
+<span class="sourceLineNo">981</span>      for (Action mutation : mutations) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>        builder.addResultOrException(getResultOrException(e, mutation.getIndex()));<a name="line.982"></a>
+<span class="sourceLineNo">983</span>      }<a name="line.983"></a>
+<span class="sourceLineNo">984</span>    }<a name="line.984"></a>
+<span class="sourceLineNo">985</span>  }<a name="line.985"></a>
+<span class="sourceLineNo">986</span><a name="line.986"></a>
+<span class="sourceLineNo">987</span>  /**<a name="line.987"></a>
+<span class="sourceLineNo">988</span>   * Execute a list of Put/Delete mutations.<a name="line.988"></a>
+<span class="sourceLineNo">989</span>   *<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   * @param builder<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   * @param region<a name="line.991"></a>
+<span class="sourceLineNo">992</span>   * @param mutations<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   */<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  private void doBatchOp(final RegionActionResult.Builder builder, final HRegion region,<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      final OperationQuota quota, final List&lt;ClientProtos.Action&gt; mutations,<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      final CellScanner cells, ActivePolicyEnforcement spaceQuotaEnforcement, boolean atomic)<a name="line.996"></a>
+<span class="sourceLineNo">997</span>      throws IOException {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>    Mutation[] mArray = new Mutation[mutations.size()];<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    boolean batchContainsPuts = false, batchContainsDelete = false;<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    try {<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>      /** HBASE-17924<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>       * mutationActionMap is a map to map the relation between mutations and actions<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>       * since mutation array may have been reoredered.In order to return the right<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>       * result or exception to the corresponding actions, We need to know which action<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>       * is the mutation belong to. We can't sort ClientProtos.Action array, since they<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>       * are bonded to cellscanners.<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>       */<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      Map&lt;Mutation, ClientProtos.Action&gt; mutationActionMap = new HashMap&lt;&gt;();<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      int i = 0;<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      for (ClientProtos.Action action: mutations) {<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>        if (action.hasGet()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>          throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>            action.getGet());<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>        }<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>        MutationProto m = action.getMutation();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        Mutation mutation;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>        if (m.getMutateType() == MutationType.PUT) {<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>          mutation = ProtobufUtil.toPut(m, cells);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          batchContainsPuts = true;<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        } else {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>          mutation = ProtobufUtil.toDelete(m, cells);<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          batchContainsDelete = true;<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>        }<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>        mutationActionMap.put(mutation, action);<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>        mArray[i++] = mutation;<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>        checkCellSizeLimit(region, mutation);<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>        // Check if a space quota disallows this mutation<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        spaceQuotaEnforcement.getPolicyEnforcement(region).check(mutation);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>        quota.addMutation(mutation);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>      }<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span><a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>      }<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span><a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>      // HBASE-17924<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>      // Sort to improve lock efficiency for non-atomic batch of operations. If atomic<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      // order is preserved as its expected from the client<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      if (!atomic) {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>        Arrays.sort(mArray, (v1, v2) -&gt; Row.COMPARATOR.compare(v1, v2));<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      }<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span><a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      OperationStatus[] codes = region.batchMutate(mArray, atomic, HConstants.NO_NONCE,<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>        HConstants.NO_NONCE);<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>      for (i = 0; i &lt; codes.length; i++) {<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>        Mutation currentMutation = mArray[i];<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        ClientProtos.Action currentAction = mutationActionMap.get(currentMutation);<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>        int index = currentAction.hasIndex() || !atomic ? currentAction.getIndex() : i;<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>        Exception e = null;<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>        switch (codes[i].getOperationStatusCode()) {<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>          case BAD_FAMILY:<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>            e = new NoSuchColumnFamilyException(codes[i].getExceptionMsg());<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>            break;<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span><a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>          case SANITY_CHECK_FAILURE:<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>            e = new FailedSanityCheckException(codes[i].getExceptionMsg());<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>            break;<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span><a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>          default:<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>            e = new DoNotRetryIOException(codes[i].getExceptionMsg());<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>            break;<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span><a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>          case SUCCESS:<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>            builder.addResultOrException(getResultOrException(<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>              ClientProtos.Result.getDefaultInstance(), index));<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>            break;<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span><a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>          case STORE_TOO_BUSY:<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>            e = new RegionTooBusyException(codes[i].getExceptionMsg());<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>            builder.addResultOrException(getResultOrException(e, index));<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>            break;<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>    } finally {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      int processedMutationIndex = 0;<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>      for (Action mutation : mutations) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>        // The non-null mArray[i] means the cell scanner has been read.<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>        if (mArray[processedMutationIndex++] == null) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>          skipCellsForMutation(mutation, cells);<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>        }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>      }<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>      updateMutationMetrics(region, before, batchContainsPuts, batchContainsDelete);<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>  }<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span><a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>  private void updateMutationMetrics(HRegion region, long starttime, boolean batchContainsPuts,<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    boolean batchContainsDelete) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    if (regionServer.metricsRegionServer != null) {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      long after = EnvironmentEdgeManager.currentTime();<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      if (batchContainsPuts) {<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        regionServer.metricsRegionServer<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>          .updatePutBatch(region.getTableDescriptor().getTableName(), after - starttime);<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>      if (batchContainsDelete) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>        regionServer.metricsRegionServer<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>          .updateDeleteBatch(region.getTableDescriptor().getTableName(), after - starttime);<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>  }<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span><a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>  /**<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>   * Execute a list of Put/Delete mutations. The function returns OperationStatus instead of<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>   * constructing MultiResponse to save a possible loop if caller doesn't need MultiResponse.<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>   * @param region<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>   * @param mutations<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>   * @param replaySeqId<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>   * @return an array of OperationStatus which internally contains the OperationStatusCode and the<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>   *         exceptionMessage if any<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>   * @throws IOException<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>   */<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>  private OperationStatus [] doReplayBatchOp(final HRegion region,<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>      final List&lt;MutationReplay&gt; mutations, long replaySeqId) throws IOException {<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    boolean batchContainsPuts = false, batchContainsDelete = false;<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    try {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      for (Iterator&lt;MutationReplay&gt; it = mutations.iterator(); it.hasNext();) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>        MutationReplay m = it.next();<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span><a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>        if (m.getType() == MutationType.PUT) {<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>          batchContainsPuts = true;<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>        } else {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>          batchContainsDelete = true;<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>        }<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span><a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map = m.mutation.getFamilyCellMap();<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>        List&lt;Cell&gt; metaCells = map.get(WALEdit.METAFAMILY);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>        if (metaCells != null &amp;&amp; !metaCells.isEmpty()) {<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>          for (Cell metaCell : metaCells) {<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>            CompactionDescriptor compactionDesc = WALEdit.getCompaction(metaCell);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>            boolean isDefaultReplica = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>            HRegion hRegion = region;<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>            if (compactionDesc != null) {<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>              // replay the compaction. Remove the files from stores only if we are the primary<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>              // region replica (thus own the files)<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>              hRegion.replayWALCompactionMarker(compactionDesc, !isDefaultReplica, isDefaultReplica,<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>                replaySeqId);<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>              continue;<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>            }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>            FlushDescriptor flushDesc = WALEdit.getFlushDescriptor(metaCell);<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>            if (flushDesc != null &amp;&amp; !isDefaultReplica) {<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>              hRegion.replayWALFlushMarker(flushDesc, replaySeqId);<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>              continue;<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>            }<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>            RegionEventDescriptor regionEvent = WALEdit.getRegionEventDescriptor(metaCell);<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>            if (regionEvent != null &amp;&amp; !isDefaultReplica) {<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>              hRegion.replayWALRegionEventMarker(regionEvent);<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>              continue;<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>            }<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>            BulkLoadDescriptor bulkLoadEvent = WALEdit.getBulkLoadDescriptor(metaCell);<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>            if (bulkLoadEvent != null) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>              hRegion.replayWALBulkLoadEventMarker(bulkLoadEvent);<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>              continue;<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>            }<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>          }<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>          it.remove();<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>        }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      }<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>      requestCount.increment();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      }<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>      return region.batchReplay(mutations.toArray(<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        new MutationReplay[mutations.size()]), replaySeqId);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    } finally {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>      updateMutationMetrics(region, before, batchContainsPuts, batchContainsDelete);<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    }<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>  }<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span><a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  private void closeAllScanners() {<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    // Close any outstanding scanners. Means they'll get an UnknownScanner<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>    // exception next time they come in.<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    for (Map.Entry&lt;String, RegionScannerHolder&gt; e : scanners.entrySet()) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      try {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>        e.getValue().s.close();<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>      } catch (IOException ioe) {<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>        LOG.warn("Closing scanner " + e.getKey(), ioe);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>      }<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>    }<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>  }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span><a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>  // Exposed for testing<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>  interface LogDelegate {<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    void logBatchWarning(String firstRegionName, int sum, int rowSizeWarnThreshold);<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>  private static LogDelegate DEFAULT_LOG_DELEGATE = new LogDelegate() {<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    @Override<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>    public void logBatchWarning(String firstRegionName, int sum, int rowSizeWarnThreshold) {<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>      if (LOG.isWarnEnabled()) {<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>        LOG.warn("Large batch operation detected (greater than " + rowSizeWarnThreshold<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>            + ") (HBASE-18023)." + " Requested Number of Rows: " + sum + " Client: "<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>            + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>            + RpcServer.getRemoteAddress().orElse(null)<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>            + " first region in multi=" + firstRegionName);<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>      }<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>    }<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  };<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span><a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  private final LogDelegate ld;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span><a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>  public RSRpcServices(HRegionServer rs) throws IOException {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    this(rs, DEFAULT_LOG_DELEGATE);<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>  // Directly invoked only for testing<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>  RSRpcServices(HRegionServer rs, LogDelegate ld) throws IOException {<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    this.ld = ld;<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>    regionServer = rs;<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    rowSizeWarnThreshold = rs.conf.getInt(BATCH_ROWS_THRESHOLD_NAME, BATCH_ROWS_THRESHOLD_DEFAULT);<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    RpcSchedulerFactory rpcSchedulerFactory;<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    try {<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>      rpcSchedulerFactory = getRpcSchedulerFactoryClass().asSubclass(RpcSchedulerFactory.class)<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>          .getDeclaredConstructor().newInstance();<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    } catch (NoSuchMethodException | InvocationTargetException |<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>        InstantiationException | IllegalAccessException e) {<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>      throw new IllegalArgumentException(e);<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>    }<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>    // Server to handle client requests.<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>    InetSocketAddress initialIsa;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    InetSocketAddress bindAddress;<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    if(this instanceof MasterRpcServices) {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      String hostname = getHostname(rs.conf, true);<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      int port = rs.conf.getInt(HConstants.MASTER_PORT, HConstants.DEFAULT_MASTER_PORT);<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      // Creation of a HSA will force a resolve.<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      initialIsa = new InetSocketAddress(hostname, port);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      bindAddress = new InetSocketAddress(rs.conf.get("hbase.master.ipc.address", hostname), port);<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    } else {<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      String hostname = getHostname(rs.conf, false);<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      int port = rs.conf.getInt(HConstants.REGIONSERVER_PORT,<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>        HConstants.DEFAULT_REGIONSERVER_PORT);<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      // Creation of a HSA will force a resolve.<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      initialIsa = new InetSocketAddress(hostname, port);<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      bindAddress = new InetSocketAddress(<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>        rs.conf.get("hbase.regionserver.ipc.address", hostname), port);<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>    }<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    if (initialIsa.getAddress() == null) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      throw new IllegalArgumentException("Failed resolve of " + initialIsa);<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>    }<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    priority = createPriority();<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>    // Using Address means we don't get the IP too. Shorten it more even to just the host name<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    // w/o the domain.<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    String name = rs.getProcessName() + "/" +<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        Address.fromParts(initialIsa.getHostName(), initialIsa.getPort()).toStringWithoutDomain();<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    // Set how many times to retry talking to another server over Connection.<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>    ConnectionUtils.setServerSideHConnectionRetriesConfig(rs.conf, name, LOG);<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>    rpcServer = createRpcServer(rs, rs.conf, rpcSchedulerFactory, bindAddress, name);<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    rpcServer.setRsRpcServices(this);<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>    scannerLeaseTimeoutPeriod = rs.conf.getInt(<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>      HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD,<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>      HConstants.DEFAULT_HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD);<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>    maxScannerResultSize = rs.conf.getLong(<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>      HConstants.HBASE_SERVER_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      HConstants.DEFAULT_HBASE_SERVER_SCANNER_MAX_RESULT_SIZE);<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    rpcTimeout = rs.conf.getInt(<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>      HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>    minimumScanTimeLimitDelta = rs.conf.getLong(<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA,<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>      DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA);<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span><a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>    InetSocketAddress address = rpcServer.getListenerAddress();<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    if (address == null) {<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      throw new IOException("Listener channel is closed");<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>    // Set our address, however we need the final port that was given to rpcServer<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    isa = new InetSocketAddress(initialIsa.getHostName(), address.getPort());<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    rpcServer.setErrorHandler(this);<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    rs.setName(name);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span><a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    closedScanners = CacheBuilder.newBuilder()<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>        .expireAfterAccess(scannerLeaseTimeoutPeriod, TimeUnit.MILLISECONDS).build();<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>  }<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span><a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  protected RpcServerInterface createRpcServer(Server server, Configuration conf,<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>      RpcSchedulerFactory rpcSchedulerFactory, InetSocketAddress bindAddress, String name)<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>      throws IOException {<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    boolean reservoirEnabled = conf.getBoolean(ByteBuffAllocator.ALLOCATOR_POOL_ENABLED_KEY, true);<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    try {<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      return RpcServerFactory.createRpcServer(server, name, getServices(),<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>          bindAddress, // use final bindAddress for this server.<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>          conf, rpcSchedulerFactory.create(conf, this, server), reservoirEnabled);<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>    } catch (BindException be) {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      throw new IOException(be.getMessage() + ". To switch ports use the '"<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>          + HConstants.REGIONSERVER_PORT + "' configuration property.",<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>          be.getCause() != null ? be.getCause() : be);<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>    }<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  }<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span><a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>  protected Class&lt;?&gt; getRpcSchedulerFactoryClass() {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>    return this.regionServer.conf.getClass(REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS,<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      SimpleRpcSchedulerFactory.class);<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span><a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>  @Override<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    if (rpcServer instanceof ConfigurationObserver) {<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>      ((ConfigurationObserver)rpcServer).onConfigurationChange(newConf);<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span><a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>  protected PriorityFunction createPriority() {<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    return new AnnotationReadingPriorityFunction(this);<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>  }<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span><a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>  protected void requirePermission(String request, Permission.Action perm) throws IOException {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>    if (accessChecker != null) {<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>      accessChecker.requirePermission(RpcServer.getRequestUser().orElse(null), request, null, perm);<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>  public static String getHostname(Configuration conf, boolean isMaster)<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>      throws UnknownHostException {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>    String hostname = conf.get(isMaster? HRegionServer.MASTER_HOSTNAME_KEY :<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>      HRegionServer.RS_HOSTNAME_KEY);<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>    if (hostname == null || hostname.isEmpty()) {<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>      String masterOrRS = isMaster ? "master" : "regionserver";<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>      return Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>        conf.get("hbase." + masterOrRS + ".dns.interface", "default"),<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>        conf.get("hbase." + masterOrRS + ".dns.nameserver", "default")));<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>    } else {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>      LOG.info("hostname is configured to be " + hostname);<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>      return hostname;<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    }<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>  @VisibleForTesting<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>  public int getScannersCount() {<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    return scanners.size();<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>  public<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>  RegionScanner getScanner(long scannerId) {<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    String scannerIdString = Long.toString(scannerId);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    RegionScannerHolder scannerHolder = scanners.get(scannerIdString);<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    if (scannerHolder != null) {<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>      return scannerHolder.s;<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    }<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    return null;<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>  }<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span><a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>  public String getScanDetailsWithId(long scannerId) {<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    RegionScanner scanner = getScanner(scannerId);<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    if (scanner == null) {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>      return null;<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    StringBuilder builder = new StringBuilder();<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    builder.append("table: ").append(scanner.getRegionInfo().getTable().getNameAsString());<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    builder.append(" region: ").append(scanner.getRegionInfo().getRegionNameAsString());<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    return builder.toString();<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>   * Get the vtime associated with the scanner.<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>   * Currently the vtime is the number of "next" calls.<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   */<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>  long getScannerVirtualTime(long scannerId) {<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>    String scannerIdString = Long.toString(scannerId);<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    RegionScannerHolder scannerHolder = scanners.get(scannerIdString);<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    if (scannerHolder != null) {<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>      return scannerHolder.getNextCallSeq();<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    }<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>    return 0L;<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>  }<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span><a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>  /**<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   * Method to account for the size of retained cells and retained data blocks.<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>   * @param context rpc call context<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>   * @param r result to add size.<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>   * @param lastBlock last block to check whether we need to add the block size in context.<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>   * @return an object that represents the last referenced block from this response.<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>   */<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>  Object addSize(RpcCallContext context, Result r, Object lastBlock) {<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    if (context != null &amp;&amp; r != null &amp;&amp; !r.isEmpty()) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>      for (Cell c : r.rawCells()) {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>        context.incrementResponseCellSize(PrivateCellUtil.estimatedSerializedSizeOf(c));<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>        // Since byte buffers can point all kinds of crazy places it's harder to keep track<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        // of which blocks are kept alive by what byte buffer.<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>        // So we make a guess.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        if (c instanceof ByteBufferExtendedCell) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>          ByteBufferExtendedCell bbCell = (ByteBufferExtendedCell) c;<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>          ByteBuffer bb = bbCell.getValueByteBuffer();<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>          if (bb != lastBlock) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>            context.incrementResponseBlockSize(bb.capacity());<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>            lastBlock = bb;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>          }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>        } else {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>          // We're using the last block being the same as the current block as<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>          // a proxy for pointing to a new block. This won't be exact.<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>          // If there are multiple gets that bounce back and forth<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>          // Then it's possible that this will over count the size of<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          // referenced blocks. However it's better to over count and<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>          // use two rpcs than to OOME the regionserver.<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>          byte[] valueArray = c.getValueArray();<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>          if (valueArray != lastBlock) {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>            context.incrementResponseBlockSize(valueArray.length);<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>            lastBlock = valueArray;<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>          }<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      }<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    return lastBlock;<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>  }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span><a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>  private RegionScannerHolder addScanner(String scannerName, RegionScanner s, Shipper shipper,<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      HRegion r, boolean needCursor) throws LeaseStillHeldException {<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>    Lease lease = regionServer.leases.createLease(scannerName, this.scannerLeaseTimeoutPeriod,<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>      new ScannerListener(scannerName));<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>    RpcCallback shippedCallback = new RegionScannerShippedCallBack(scannerName, shipper, lease);<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    RpcCallback closeCallback;<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>    if (s instanceof RpcCallback) {<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      closeCallback = (RpcCallback) s;<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    } else {<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      closeCallback = new RegionScannerCloseCallBack(s);<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    }<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    RegionScannerHolder rsh =<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>        new RegionScannerHolder(scannerName, s, r, closeCallback, shippedCallback, needCursor);<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    RegionScannerHolder existing = scanners.putIfAbsent(scannerName, rsh);<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>    assert existing == null : "scannerId must be unique within regionserver's whole lifecycle! " +<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      scannerName;<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    return rsh;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>  }<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span><a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>  /**<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>   * Find the HRegion based on a region specifier<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>   *<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>   * @param regionSpecifier the region specifier<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>   * @return the corresponding region<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>   * @throws IOException if the specifier is not null,<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>   *    but failed to find the region<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>   */<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  @VisibleForTesting<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>  public HRegion getRegion(<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>      final RegionSpecifier regionSpecifier) throws IOException {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    return regionServer.getRegion(regionSpecifier.getValue().toByteArray());<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>  }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span><a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>  /**<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>   * Find the List of HRegions based on a list of region specifiers<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>   *<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>   * @param regionSpecifiers the list of region specifiers<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   * @return the corresponding list of regions<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   * @throws IOException if any of the specifiers is not null,<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>   *    but failed to find the region<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>  private List&lt;HRegion&gt; getRegions(final List&lt;RegionSpecifier&gt; regionSpecifiers,<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      final CacheEvictionStatsBuilder stats) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    List&lt;HRegion&gt; regions = Lists.newArrayListWithCapacity(regionSpecifiers.size());<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>    for (RegionSpecifier regionSpecifier: regionSpecifiers) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>      try {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        regions.add(regionServer.getRegion(regionSpecifier.getValue().toByteArray()));<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      } catch (NotServingRegionException e) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        stats.addException(regionSpecifier.getValue().toByteArray(), e);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    return regions;<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>  }<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span><a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  @VisibleForTesting<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>  public PriorityFunction getPriority() {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    return priority;<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>  }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>  @VisibleForTesting<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  public Configuration getConfiguration() {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    return regionServer.getConfiguration();<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>  private RegionServerRpcQuotaManager getRpcQuotaManager() {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    return regionServer.getRegionServerRpcQuotaManager();<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>  }<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span><a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  private RegionServerSpaceQuotaManager getSpaceQuotaManager() {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    return regionServer.getRegionServerSpaceQuotaManager();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  void start(ZKWatcher zkWatcher) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>    if (AccessChecker.isAuthorizationSupported(getConfiguration())) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      accessChecker = new AccessChecker(getConfiguration());<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>    } else {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      accessChecker = new NoopAccessChecker(getConfiguration());<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>    }<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>    if (!getConfiguration().getBoolean("hbase.testing.nocluster", false) &amp;&amp; zkWatcher != null) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>      zkPermissionWatcher =<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          new ZKPermissionWatcher(zkWatcher, accessChecker.getAuthManager(), getConfiguration());<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>      try {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>        zkPermissionWatcher.start();<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>      } catch (KeeperException e) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>        LOG.error("ZooKeeper permission watcher initialization failed", e);<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>    this.scannerIdGenerator = new ScannerIdGenerator(this.regionServer.serverName);<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    rpcServer.start();<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>  void stop() {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    if (zkPermissionWatcher != null) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      zkPermissionWatcher.close();<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>    }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    closeAllScanners();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    rpcServer.stop();<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span><a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>   * Called to verify that this server is up and running.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>   */<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  // TODO : Rename this and HMaster#checkInitialized to isRunning() (or a better name).<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>  protected void checkOpen() throws IOException {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (regionServer.isAborted()) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      throw new RegionServerAbortedException("Server " + regionServer.serverName + " aborting");<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    if (regionServer.isStopped()) {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      throw new RegionServerStoppedException("Server " + regionServer.serverName + " stopping");<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    if (!regionServer.fsOk) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      throw new RegionServerStoppedException("File system not available");<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    if (!regionServer.isOnline()) {<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>      throw new ServerNotRunningYetException("Server " + regionServer.serverName<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>          + " is not running yet");<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    }<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  }<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  /**<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>   * By default, put up an Admin and a Client Service.<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>   * Set booleans &lt;code&gt;hbase.regionserver.admin.executorService&lt;/code&gt; and<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>   * &lt;code&gt;hbase.regionserver.client.executorService&lt;/code&gt; if you want to enable/disable services.<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>   * Default is that both are enabled.<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>   * @return immutable list of blocking services and the security info classes that this server<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>   * supports<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>   */<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  protected List&lt;BlockingServiceAndInterface&gt; getServices() {<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    boolean admin =<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      getConfiguration().getBoolean(REGIONSERVER_ADMIN_SERVICE_CONFIG, true);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    boolean client =<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      getConfiguration().getBoolean(REGIONSERVER_CLIENT_SERVICE_CONFIG, true);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    List&lt;BlockingServiceAndInterface&gt; bssi = new ArrayList&lt;&gt;();<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>    if (client) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      bssi.add(new BlockingServiceAndInterface(<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>      ClientService.newReflectiveBlockingService(this),<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      ClientService.BlockingInterface.class));<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    if (admin) {<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      bssi.add(new BlockingServiceAndInterface(<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      AdminService.newReflectiveBlockingService(this),<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>      AdminService.BlockingInterface.class));<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>    }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    return new org.apache.hbase.thirdparty.com.google.common.collect.<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>        ImmutableList.Builder&lt;BlockingServiceAndInterface&gt;().addAll(bssi).build();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>  }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>  public InetSocketAddress getSocketAddress() {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    return isa;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>  @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>  public int getPriority(RequestHeader header, Message param, User user) {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>    return priority.getPriority(header, param, user);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>  }<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span><a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>  @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>  public long getDeadline(RequestHeader header, Message param) {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    return priority.getDeadline(header, param);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>  }<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>   * Check if an OOME and, if so, abort immediately to avoid creating more objects.<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>   *<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>   * @param e<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>   *<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>   * @return True if we OOME'd and are aborting.<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   */<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  @Override<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>  public boolean checkOOME(final Throwable e) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>    return exitIfOOME(e);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>  public static boolean exitIfOOME(final Throwable e ){<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    boolean stop = false;<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    try {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      if (e instanceof OutOfMemoryError<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>          || (e.getCause() != null &amp;&amp; e.getCause() instanceof OutOfMemoryError)<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          || (e.getMessage() != null &amp;&amp; e.getMessage().contains(<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>              "java.lang.OutOfMemoryError"))) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        stop = true;<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        LOG.error(HBaseMarkers.FATAL, "Run out of memory; "<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>          + RSRpcServices.class.getSimpleName() + " will abort itself immediately",<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>          e);<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    } finally {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      if (stop) {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        Runtime.getRuntime().halt(1);<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      }<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    return stop;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span><a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>  /**<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   * Close a region on the region server.<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>   *<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>   * @param controller the RPC controller<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>   * @param request the request<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>   * @throws ServiceException<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>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>  public CloseRegionResponse closeRegion(final RpcController controller,<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      final CloseRegionRequest request) throws ServiceException {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    final ServerName sn = (request.hasDestinationServer() ?<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      ProtobufUtil.toServerName(request.getDestinationServer()) : null);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span><a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>    try {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      checkOpen();<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>      throwOnWrongStartCode(request);<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>      final String encodedRegionName = ProtobufUtil.getRegionEncodedName(request.getRegion());<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span><a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      requestCount.increment();<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      if (sn == null) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        LOG.info("Close " + encodedRegionName + " without moving");<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      } else {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        LOG.info("Close " + encodedRegionName + ", moving to " + sn);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      }<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      boolean closed = regionServer.closeRegion(encodedRegionName, false, sn);<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      CloseRegionResponse.Builder builder = CloseRegionResponse.newBuilder().setClosed(closed);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      return builder.build();<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    } catch (IOException ie) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      throw new ServiceException(ie);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>    }<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>  }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span><a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>  /**<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>   * Compact a region on the region server.<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>   *<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>   * @param controller the RPC controller<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>   * @param request the request<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>   * @throws ServiceException<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>   */<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>  @Override<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>  @QosPriority(priority = HConstants.ADMIN_QOS)<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>  public CompactRegionResponse compactRegion(final RpcController controller,<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      final CompactRegionRequest request) throws ServiceException {<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    try {<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>      checkOpen();<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>      requestCount.increment();<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      HRegion region = getRegion(request.getRegion());<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      // Quota support is enabled, the requesting user is not system/super user<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      // and a quota policy is enforced that disables compactions.<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      if (QuotaUtil.isQuotaEnabled(getConfiguration()) &amp;&amp;<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>          !Superusers.isSuperUser(RpcServer.getRequestUser().orElse(null)) &amp;&amp;<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>          this.regionServer.getRegionServerSpaceQuotaManager()<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>              .areCompactionsDisabled(region.getTableDescriptor().getTableName())) {<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>        throw new DoNotRetryIOException(<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>            "Compactions on this region are " + "disabled due to a space quota violation.");<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>      }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      region.startRegionOperation(Operation.COMPACT_REGION);<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      LOG.info("Compacting " + region.getRegionInfo().getRegionNameAsString());<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      boolean major = request.hasMajor() &amp;&amp; request.getMajor();<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      if (request.hasFamily()) {<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>        byte[] family = request.getFamily().toByteArray();<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>        String log = "User-triggered " + (major ? "major " : "") + "compaction for region " +<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>            region.getRegionInfo().getRegionNameAsString() + " and family " +<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>            Bytes.toString(family);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>        LOG.trace(log);<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>        region.requestCompaction(family, log, Store.PRIORITY_USER, major,<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>          CompactionLifeCycleTracker.DUMMY);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>      } else {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        String log = "User-triggered " + (major ? "major " : "") + "compaction for region " +<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>            region.getRegionInfo().getRegionNameAsString();<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        LOG.trace(log);<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        region.requestCompaction(log, Store.PRIORITY_USER, major, CompactionLifeCycleTracker.DUMMY);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      return CompactRegionResponse.newBuilder().build();<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    } catch (IOException ie) {<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      throw new ServiceException(ie);<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>  }<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span><a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @Override<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  public CompactionSwitchResponse compactionSwitch(RpcController controller,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      CompactionSwitchRequest request) throws ServiceException {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    try {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      checkOpen();<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      requestCount.increment();<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>      boolean prevState = regionServer.compactSplitThread.isCompactionsEnabled();<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      CompactionSwitchResponse response =<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>          CompactionSwitchResponse.newBuilder().setPrevState(prevState).build();<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      if (prevState == request.getEnabled()) {<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>        // passed in requested state is same as current state. No action required<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        return response;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      regionServer.compactSplitThread.switchCompaction(request.getEnabled());<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      return response;<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>    } catch (IOException ie) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      throw new ServiceException(ie);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /**<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>   * Flush a region on the region server.<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>   *<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>   * @param controller the RPC controller<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>   * @param request the request<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>   * @throws ServiceException<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>   */<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>  @Override<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>  public FlushRegionResponse flushRegion(final RpcController controller,<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>      final FlushRegionRequest request) throws ServiceException {<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    try {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      checkOpen();<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      requestCount.increment();<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      HRegion region = getRegion(request.getRegion());<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>      LOG.info("Flushing " + region.getRegionInfo().getRegionNameAsString());<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>      boolean shouldFlush = true;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>      if (request.hasIfOlderThanTs()) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>        shouldFlush = region.getEarliestFlushTimeForAllStores() &lt; request.getIfOlderThanTs();<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      FlushRegionResponse.Builder builder = FlushRegionResponse.newBuilder();<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>      if (shouldFlush) {<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        boolean writeFlushWalMarker =  request.hasWriteFlushWalMarker() ?<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>            request.getWriteFlushWalMarker() : false;<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>        // Go behind the curtain so we can manage writing of the flush WAL marker<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>        HRegion.FlushResultImpl flushResult =<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            region.flushcache(true, writeFlushWalMarker, FlushLifeCycleTracker.DUMMY);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>        boolean compactionNeeded = flushResult.isCompactionNeeded();<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>        if (compactionNeeded) {<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>          regionServer.compactSplitThread.requestSystemCompaction(region,<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>            "Compaction through user triggered flush");<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        builder.setFlushed(flushResult.isFlushSucceeded());<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>        builder.setWroteFlushWalMarker(flushResult.wroteFlushWalMarker);<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      builder.setLastFlushTime(region.getEarliestFlushTimeForAllStores());<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      return builder.build();<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    } catch (DroppedSnapshotException ex) {<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      // Cache flush can fail in a few places. If it fails in a critical<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      // section, we get a DroppedSnapshotException and a replay of wal<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      // is required. Currently the only way to do this is a restart of<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      // the server.<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>      regionServer.abort("Replay of WAL required. Forcing server shutdown", ex);<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      throw new ServiceException(ex);<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    } catch (IOException ie) {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      throw new ServiceException(ie);<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><a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>  @Override<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  public GetOnlineRegionResponse getOnlineRegion(final RpcController controller,<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      final GetOnlineRegionRequest request) throws ServiceException {<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    try {<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      checkOpen();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      requestCount.increment();<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      Map&lt;String, HRegion&gt; onlineRegions = regionServer.onlineRegions;<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>      List&lt;RegionInfo&gt; list = new ArrayList&lt;&gt;(onlineRegions.size());<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      for (HRegion region: onlineRegions.values()) {<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>        list.add(region.getRegionInfo());<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>      }<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      Collections.sort(list, RegionInfo.COMPARATOR);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>      return ResponseConverter.buildGetOnlineRegionResponse(list);<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span><a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>  public GetRegionInfoResponse getRegionInfo(final RpcController controller,<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>      final GetRegionInfoRequest request) throws ServiceException {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>    try {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      checkOpen();<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      requestCount.increment();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      HRegion region = getRegion(request.getRegion());<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      RegionInfo info = region.getRegionInfo();<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      byte[] bestSplitRow = null;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>      boolean shouldSplit = true;<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>        HRegion r = region;<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>        r.forceSplit(null);<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>        bestSplitRow = r.checkSplit();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>        // try to flush region first<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>        if(bestSplitRow == null) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>          r.flush(true);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>          bestSplitRow = r.checkSplit();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>        }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>        r.clearSplit();<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      }<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>      }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>      builder.setMergeable(region.isMergeable());<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>      }<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      return builder.build();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    } catch (IOException ie) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>      throw new ServiceException(ie);<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>    }<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>  }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span><a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>  @Override<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span><a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>    List&lt;HRegion&gt; regions;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>    if (request.hasTableName()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>      regions = regionServer.getRegions(tableName);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>    } else {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      regions = regionServer.getRegions();<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>    }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span><a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    try {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      for (HRegion region : regions) {<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    } catch (IOException e) {<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      throw new ServiceException(e);<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>    }<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    builder.addAllRegionLoads(rLoads);<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>    return builder.build();<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>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    requestCount.increment();<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>      try {<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        checkOpen();<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>          switch (queueName) {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>            case "long":<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>              break;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>            case "short":<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>              break;<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>            default:<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>              throw new IOException("Unknown queue name " + queueName);<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>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      } catch (IOException ie) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>        throw new ServiceException(ie);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      } finally {<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>        clearCompactionQueues.set(false);<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    } else {<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    return respBuilder.build();<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Get some information of the region server.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   *<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>   * @param controller the RPC controller<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   * @param request the request<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * @throws ServiceException<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   */<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  @Override<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    try {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      checkOpen();<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>    } catch (IOException ie) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>      throw new ServiceException(ie);<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>    requestCount.increment();<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>  }<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span><a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>  @Override<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>    try {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      checkOpen();<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>      HRegion region = getRegion(request.getRegion());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      requestCount.increment();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      if (request.getFamilyCount() == 0) {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      } else {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>          columnFamilies.add(cf.toByteArray());<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      }<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>      int nCF = columnFamilies.size();<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      builder.addAllStoreFile(fileList);<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      return builder.build();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    } catch (IOException ie) {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>      throw new ServiceException(ie);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>  }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span><a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>  private void throwOnWrongStartCode(OpenRegionRequest request) throws ServiceException {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    if (!request.hasServerStartCode()) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      LOG.warn("OpenRegionRequest for {} does not have a start code", request.getOpenInfoList());<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      return;<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>    throwOnWrongStartCode(request.getServerStartCode());<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span><a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  private void throwOnWrongStartCode(CloseRegionRequest request) throws ServiceException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    if (!request.hasServerStartCode()) {<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      LOG.warn("CloseRegionRequest for {} does not have a start code", request.getRegion());<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      return;<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>    }<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    throwOnWrongStartCode(request.getServerStartCode());<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>  }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span><a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>  private void throwOnWrongStartCode(long serverStartCode) throws ServiceException {<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>    // check that we are the same server that this RPC is intended for.<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    if (regionServer.serverName.getStartcode() != serverStartCode) {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>      throw new ServiceException(new DoNotRetryIOException(<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>        "This RPC was intended for a " + "different server with startCode: " + serverStartCode +<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>          ", this server is: " + regionServer.serverName));<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>    }<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>  }<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span><a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>  private void throwOnWrongStartCode(ExecuteProceduresRequest req) throws ServiceException {<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    if (req.getOpenRegionCount() &gt; 0) {<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      for (OpenRegionRequest openReq : req.getOpenRegionList()) {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>        throwOnWrongStartCode(openReq);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>      }<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    }<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    if (req.getCloseRegionCount() &gt; 0) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      for (CloseRegionRequest closeReq : req.getCloseRegionList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>        throwOnWrongStartCode(closeReq);<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>  /**<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>   *<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * &lt;p&gt;<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   * Different manages states for the region are:<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>   *  &lt;/ul&gt;<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>   * &lt;p&gt;<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>   * &lt;/p&gt;<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>   * @param controller the RPC controller<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>   * @param request the request<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>   * @throws ServiceException<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>   */<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>  @Override<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    requestCount.increment();<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    throwOnWrongStartCode(request);<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span><a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    try {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>      checkOpen();<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    } catch (IOException ie) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      TableName tableName = null;<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>      if (regionCount == 1) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>        if (ri != null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>        }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>      }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>        throw new ServiceException(ie);<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>      }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>      synchronized (regionServer.online) {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>        try {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>          }<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>          checkOpen();<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>        } catch (InterruptedException t) {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>          Thread.currentThread().interrupt();<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>          throw new ServiceException(t);<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        } catch (IOException e) {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>          throw new ServiceException(e);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>        }<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>      }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span><a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>      TableDescriptor htd;<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      try {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        String encodedName = region.getEncodedName();<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        if (onlineRegion != null) {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          // The region is already online. This should not happen any more.<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>          String error = "Received OPEN for the region:"<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>          LOG.warn(error);<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>          //regionServer.abort(error);<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>          //throw new IOException(error);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>          continue;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>        }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span><a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>          encodedNameBytes, Boolean.TRUE);<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span><a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>            // There is a close in progress. This should not happen any more.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>            String error = "Received OPEN for the region:"<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>            regionServer.abort(error);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>            throw new IOException(error);<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>          }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        }<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span><a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>          // An open is in progress. This is supported, but let's log this.<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>              + " - ignoring this new request for this region.");<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>        }<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span><a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>          htd = htds.get(region.getTable());<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>          if (htd == null) {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>            htds.put(region.getTable(), htd);<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>          }<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>          if (htd == null) {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>          }<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>          // Need to pass the expected version in the constructor.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>          if (regionServer.executorService == null) {<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          } else {<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>            if (region.isMetaRegion()) {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>            } else {<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>              }<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              } else {<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>              }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>            }<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>          }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span><a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      } catch (IOException ie) {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>        if (isBulkAssign) {<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>        } else {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          throw new ServiceException(ie);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>        }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>      }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>    }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>    return builder.build();<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>  }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span><a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>  /**<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>   *  Wamrmup a region on this server.<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>   *<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>   * closes the region bringing the most important pages in cache.<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>   * &lt;p&gt;<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>   *<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>   * @param controller the RPC controller<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>   * @param request the request<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>   * @throws ServiceException<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>   */<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>  @Override<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span><a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    TableDescriptor htd;<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span><a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    try {<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      checkOpen();<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>      String encodedName = region.getEncodedName();<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span><a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>      if (onlineRegion != null) {<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>        return response;<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>      }<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span><a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>        return response;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>      }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span><a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      LOG.info("Warming up region " + region.getRegionNameAsString());<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span><a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    } catch (IOException ie) {<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>      throw new ServiceException(ie);<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span><a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    return response;<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>  }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span><a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>  /**<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>   * exception.<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>   * @param controller the RPC controller<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>   * @param request the request<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>   * @throws ServiceException<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>   */<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>  @Override<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    try {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>      checkOpen();<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      if (entries == null || entries.isEmpty()) {<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>        // empty input<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>      }<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>            ? region.getCoprocessorHost()<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span><a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span><a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      for (WALEntry entry : entries) {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>              + entry.getKey().getEncodedRegionName());<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>              nonceGroup,<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>              nonce,<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>              entry.getKey().getWriteTime());<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>        }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        List&lt;MutationReplay&gt; edits = WALSplitUtil.getMutationsFromWALEntry(entry,<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>          cells, walEntry, durability);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        if (coprocessorHost != null) {<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>          // KeyValue.<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>            walEntry.getSecond())) {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>            // if bypass this log entry, ignore it ...<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>            continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>          }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          walEntries.add(walEntry);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>        }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>          // HBASE-17924<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>          // sort to improve lock efficiency<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>          // check if it's a partial success<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>              throw new IOException(result[i].getExceptionMsg());<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>        }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      }<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span><a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      WAL wal = region.getWAL();<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      if (wal != null) {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>        wal.sync();<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>      if (coprocessorHost != null) {<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>            entry.getSecond());<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>        }<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      }<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>    } catch (IOException ie) {<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>      throw new ServiceException(ie);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    } finally {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>    }<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span><a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>  private void checkShouldRejectReplicationRequest(List&lt;WALEntry&gt; entries) throws IOException {<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    ReplicationSourceService replicationSource = regionServer.getReplicationSourceService();<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    if (replicationSource == null || entries.isEmpty()) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      return;<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    // We can ensure that all entries are for one peer, so only need to check one entry's<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // table name. if the table hit sync replication at peer side and the peer cluster<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    // is (or is transiting to) state ACTIVE or DOWNGRADE_ACTIVE, we should reject to apply<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    // those entries according to the design doc.<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    TableName table = TableName.valueOf(entries.get(0).getKey().getTableName().toByteArray());<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    if (replicationSource.getSyncReplicationPeerInfoProvider().checkState(table,<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      RejectReplicationRequestStateChecker.get())) {<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      throw new DoNotRetryIOException(<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>          "Reject to apply to sink cluster because sync replication state of sink cluster "<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>              + "is ACTIVE or DOWNGRADE_ACTIVE, table: " + table);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>  }<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>   * Replicate WAL entries on the region server.<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * @param controller the RPC controller<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @param request the request<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   * @throws ServiceException<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>   */<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>  @Override<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    try {<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      checkOpen();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        requestCount.increment();<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>        checkShouldRejectReplicationRequest(entries);<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>        CellScanner cellScanner = ((HBaseRpcController) controller).cellScanner();<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>        regionServer.getRegionServerCoprocessorHost().preReplicateLogEntries();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        regionServer.replicationSinkHandler.replicateLogEntries(entries, cellScanner,<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>          request.getReplicationClusterId(), request.getSourceBaseNamespaceDirPath(),<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>          request.getSourceHFileArchiveDirPath());<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>        regionServer.getRegionServerCoprocessorHost().postReplicateLogEntries();<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>      } else {<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        throw new ServiceException("Replication services are not initialized yet");<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    } catch (IOException ie) {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      throw new ServiceException(ie);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  /**<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>   * Roll the WAL writer of the region server.<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>   * @param controller the RPC controller<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>   * @param request the request<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>   * @throws ServiceException<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>   */<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>  @Override<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>  public RollWALWriterResponse rollWALWriter(final RpcController controller,<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      final RollWALWriterRequest request) throws ServiceException {<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    try {<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      checkOpen();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      requestCount.increment();<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>      regionServer.getRegionServerCoprocessorHost().preRollWALWriterRequest();<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      regionServer.walRoller.requestRollAll();<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>      regionServer.getRegionServerCoprocessorHost().postRollWALWriterRequest();<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      RollWALWriterResponse.Builder builder = RollWALWriterResponse.newBuilder();<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      return builder.build();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>    } catch (IOException ie) {<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      throw new ServiceException(ie);<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><a name="line.2344"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>  public static String getHostname(Configuration conf, boolean isMaster)<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>      throws UnknownHostException {<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    String hostname = conf.get(isMaster? HRegionServer.MASTER_HOSTNAME_KEY :<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>      HRegionServer.RS_HOSTNAME_KEY);<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>    if (hostname == null || hostname.isEmpty()) {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      String masterOrRS = isMaster ? "master" : "regionserver";<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>      return Strings.domainNamePointerToHostName(DNS.getDefaultHost(<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>        conf.get("hbase." + masterOrRS + ".dns.interface", "default"),<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>        conf.get("hbase." + masterOrRS + ".dns.nameserver", "default")));<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    } else {<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>      LOG.info("hostname is configured to be " + hostname);<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>      return hostname;<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>  @VisibleForTesting<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>  public int getScannersCount() {<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>    return scanners.size();<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>  }<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span><a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  public<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>  RegionScanner getScanner(long scannerId) {<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    String scannerIdString = Long.toString(scannerId);<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    RegionScannerHolder scannerHolder = scanners.get(scannerIdString);<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    if (scannerHolder != null) {<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      return scannerHolder.s;<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    }<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    return null;<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>  }<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span><a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>  public String getScanDetailsWithId(long scannerId) {<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    RegionScanner scanner = getScanner(scannerId);<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    if (scanner == null) {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>      return null;<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>    }<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    StringBuilder builder = new StringBuilder();<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>    builder.append("table: ").append(scanner.getRegionInfo().getTable().getNameAsString());<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    builder.append(" region: ").append(scanner.getRegionInfo().getRegionNameAsString());<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>    return builder.toString();<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>   * Get the vtime associated with the scanner.<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * Currently the vtime is the number of "next" calls.<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   */<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>  long getScannerVirtualTime(long scannerId) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>    String scannerIdString = Long.toString(scannerId);<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    RegionScannerHolder scannerHolder = scanners.get(scannerIdString);<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    if (scannerHolder != null) {<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>      return scannerHolder.getNextCallSeq();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    return 0L;<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>  }<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span><a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>  /**<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>   * Method to account for the size of retained cells and retained data blocks.<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>   * @param context rpc call context<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>   * @param r result to add size.<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>   * @param lastBlock last block to check whether we need to add the block size in context.<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>   * @return an object that represents the last referenced block from this response.<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>   */<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>  Object addSize(RpcCallContext context, Result r, Object lastBlock) {<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    if (context != null &amp;&amp; r != null &amp;&amp; !r.isEmpty()) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      for (Cell c : r.rawCells()) {<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>        context.incrementResponseCellSize(PrivateCellUtil.estimatedSerializedSizeOf(c));<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span><a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>        // Since byte buffers can point all kinds of crazy places it's harder to keep track<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>        // of which blocks are kept alive by what byte buffer.<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>        // So we make a guess.<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        if (c instanceof ByteBufferExtendedCell) {<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>          ByteBufferExtendedCell bbCell = (ByteBufferExtendedCell) c;<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>          ByteBuffer bb = bbCell.getValueByteBuffer();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>          if (bb != lastBlock) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>            context.incrementResponseBlockSize(bb.capacity());<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>            lastBlock = bb;<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>          }<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>        } else {<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>          // We're using the last block being the same as the current block as<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>          // a proxy for pointing to a new block. This won't be exact.<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>          // If there are multiple gets that bounce back and forth<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>          // Then it's possible that this will over count the size of<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>          // referenced blocks. However it's better to over count and<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>          // use two rpcs than to OOME the regionserver.<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>          byte[] valueArray = c.getValueArray();<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>          if (valueArray != lastBlock) {<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>            context.incrementResponseBlockSize(valueArray.length);<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>            lastBlock = valueArray;<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>          }<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span><a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>    }<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>    return lastBlock;<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>  }<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span><a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>  private RegionScannerHolder addScanner(String scannerName, RegionScanner s, Shipper shipper,<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      HRegion r, boolean needCursor) throws LeaseStillHeldException {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>    Lease lease = regionServer.leases.createLease(scannerName, this.scannerLeaseTimeoutPeriod,<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      new ScannerListener(scannerName));<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>    RpcCallback shippedCallback = new RegionScannerShippedCallBack(scannerName, shipper, lease);<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>    RpcCallback closeCallback;<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    if (s instanceof RpcCallback) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>      closeCallback = (RpcCallback) s;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>    } else {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      closeCallback = new RegionScannerCloseCallBack(s);<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>    RegionScannerHolder rsh =<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>        new RegionScannerHolder(scannerName, s, r, closeCallback, shippedCallback, needCursor);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>    RegionScannerHolder existing = scanners.putIfAbsent(scannerName, rsh);<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    assert existing == null : "scannerId must be unique within regionserver's whole lifecycle! " +<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>      scannerName;<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    return rsh;<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>  }<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span><a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>  /**<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>   * Find the HRegion based on a region specifier<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>   *<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>   * @param regionSpecifier the region specifier<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>   * @return the corresponding region<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>   * @throws IOException if the specifier is not null,<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>   *    but failed to find the region<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   */<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  @VisibleForTesting<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>  public HRegion getRegion(<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      final RegionSpecifier regionSpecifier) throws IOException {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return regionServer.getRegion(regionSpecifier.getValue().toByteArray());<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  /**<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   * Find the List of HRegions based on a list of region specifiers<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>   *<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>   * @param regionSpecifiers the list of region specifiers<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   * @return the corresponding list of regions<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>   * @throws IOException if any of the specifiers is not null,<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>   *    but failed to find the region<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>   */<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  private List&lt;HRegion&gt; getRegions(final List&lt;RegionSpecifier&gt; regionSpecifiers,<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      final CacheEvictionStatsBuilder stats) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    List&lt;HRegion&gt; regions = Lists.newArrayListWithCapacity(regionSpecifiers.size());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    for (RegionSpecifier regionSpecifier: regionSpecifiers) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      try {<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        regions.add(regionServer.getRegion(regionSpecifier.getValue().toByteArray()));<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      } catch (NotServingRegionException e) {<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        stats.addException(regionSpecifier.getValue().toByteArray(), e);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>      }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    }<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    return regions;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>  }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span><a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  @VisibleForTesting<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>  public PriorityFunction getPriority() {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    return priority;<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>  @VisibleForTesting<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>  public Configuration getConfiguration() {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    return regionServer.getConfiguration();<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>  private RegionServerRpcQuotaManager getRpcQuotaManager() {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    return regionServer.getRegionServerRpcQuotaManager();<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  }<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span><a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>  private RegionServerSpaceQuotaManager getSpaceQuotaManager() {<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>    return regionServer.getRegionServerSpaceQuotaManager();<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>  }<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span><a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>  void start(ZKWatcher zkWatcher) {<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    if (AccessChecker.isAuthorizationSupported(getConfiguration())) {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      accessChecker = new AccessChecker(getConfiguration());<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>    } else {<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      accessChecker = new NoopAccessChecker(getConfiguration());<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    }<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    if (!getConfiguration().getBoolean("hbase.testing.nocluster", false) &amp;&amp; zkWatcher != null) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      zkPermissionWatcher =<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>          new ZKPermissionWatcher(zkWatcher, accessChecker.getAuthManager(), getConfiguration());<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      try {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        zkPermissionWatcher.start();<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>      } catch (KeeperException e) {<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>        LOG.error("ZooKeeper permission watcher initialization failed", e);<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>    this.scannerIdGenerator = new ScannerIdGenerator(this.regionServer.serverName);<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    rpcServer.start();<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>  }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>  void stop() {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (zkPermissionWatcher != null) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      zkPermissionWatcher.close();<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>    }<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    closeAllScanners();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    rpcServer.stop();<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>  }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>  /**<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>   * Called to verify that this server is up and running.<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>   */<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>  // TODO : Rename this and HMaster#checkInitialized to isRunning() (or a better name).<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>  protected void checkOpen() throws IOException {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    if (regionServer.isAborted()) {<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>      throw new RegionServerAbortedException("Server " + regionServer.serverName + " aborting");<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    }<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    if (regionServer.isStopped()) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      throw new RegionServerStoppedException("Server " + regionServer.serverName + " stopping");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    if (!regionServer.fsOk) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>      throw new RegionServerStoppedException("File system not available");<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    if (!regionServer.isOnline()) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      throw new ServerNotRunningYetException("Server " + regionServer.serverName<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>          + " is not running yet");<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  /**<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>   * By default, put up an Admin and a Client Service.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Set booleans &lt;code&gt;hbase.regionserver.admin.executorService&lt;/code&gt; and<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   * &lt;code&gt;hbase.regionserver.client.executorService&lt;/code&gt; if you want to enable/disable services.<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   * Default is that both are enabled.<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>   * @return immutable list of blocking services and the security info classes that this server<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>   * supports<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>   */<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  protected List&lt;BlockingServiceAndInterface&gt; getServices() {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    boolean admin =<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      getConfiguration().getBoolean(REGIONSERVER_ADMIN_SERVICE_CONFIG, true);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    boolean client =<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      getConfiguration().getBoolean(REGIONSERVER_CLIENT_SERVICE_CONFIG, true);<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>    List&lt;BlockingServiceAndInterface&gt; bssi = new ArrayList&lt;&gt;();<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    if (client) {<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>      bssi.add(new BlockingServiceAndInterface(<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      ClientService.newReflectiveBlockingService(this),<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      ClientService.BlockingInterface.class));<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    }<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>    if (admin) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>      bssi.add(new BlockingServiceAndInterface(<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>      AdminService.newReflectiveBlockingService(this),<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      AdminService.BlockingInterface.class));<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>    return new org.apache.hbase.thirdparty.com.google.common.collect.<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>        ImmutableList.Builder&lt;BlockingServiceAndInterface&gt;().addAll(bssi).build();<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  }<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span><a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  public InetSocketAddress getSocketAddress() {<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>    return isa;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>  }<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>  @Override<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>  public int getPriority(RequestHeader header, Message param, User user) {<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    return priority.getPriority(header, param, user);<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>  }<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span><a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>  @Override<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  public long getDeadline(RequestHeader header, Message param) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    return priority.getDeadline(header, param);<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>  /*<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>   * Check if an OOME and, if so, abort immediately to avoid creating more objects.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>   *<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>   * @param e<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>   *<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>   * @return True if we OOME'd and are aborting.<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   */<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>  @Override<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>  public boolean checkOOME(final Throwable e) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    return exitIfOOME(e);<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  }<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span><a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  public static boolean exitIfOOME(final Throwable e ){<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>    boolean stop = false;<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    try {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      if (e instanceof OutOfMemoryError<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          || (e.getCause() != null &amp;&amp; e.getCause() instanceof OutOfMemoryError)<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          || (e.getMessage() != null &amp;&amp; e.getMessage().contains(<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>              "java.lang.OutOfMemoryError"))) {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>        stop = true;<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>        LOG.error(HBaseMarkers.FATAL, "Run out of memory; "<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>          + RSRpcServices.class.getSimpleName() + " will abort itself immediately",<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>          e);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    } finally {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      if (stop) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>        Runtime.getRuntime().halt(1);<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>      }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    }<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    return stop;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>  /**<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>   * Close a region on the region server.<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>   *<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>   * @param controller the RPC controller<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>   * @param request the request<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>   * @throws ServiceException<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>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>  public CloseRegionResponse closeRegion(final RpcController controller,<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>      final CloseRegionRequest request) throws ServiceException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    final ServerName sn = (request.hasDestinationServer() ?<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      ProtobufUtil.toServerName(request.getDestinationServer()) : null);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span><a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    try {<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      checkOpen();<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      throwOnWrongStartCode(request);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      final String encodedRegionName = ProtobufUtil.getRegionEncodedName(request.getRegion());<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span><a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>      requestCount.increment();<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      if (sn == null) {<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>        LOG.info("Close " + encodedRegionName + " without moving");<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      } else {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>        LOG.info("Close " + encodedRegionName + ", moving to " + sn);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      }<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean closed = regionServer.closeRegion(encodedRegionName, false, sn);<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      CloseRegionResponse.Builder builder = CloseRegionResponse.newBuilder().setClosed(closed);<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      return builder.build();<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>    } catch (IOException ie) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>      throw new ServiceException(ie);<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>    }<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>  }<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span><a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>  /**<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>   * Compact a region on the region server.<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>   *<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>   * @param controller the RPC controller<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>   * @param request the request<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>   * @throws ServiceException<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>   */<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>  @Override<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>  @QosPriority(priority = HConstants.ADMIN_QOS)<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>  public CompactRegionResponse compactRegion(final RpcController controller,<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      final CompactRegionRequest request) throws ServiceException {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    try {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      checkOpen();<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      requestCount.increment();<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      HRegion region = getRegion(request.getRegion());<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      // Quota support is enabled, the requesting user is not system/super user<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      // and a quota policy is enforced that disables compactions.<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>      if (QuotaUtil.isQuotaEnabled(getConfiguration()) &amp;&amp;<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>          !Superusers.isSuperUser(RpcServer.getRequestUser().orElse(null)) &amp;&amp;<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>          this.regionServer.getRegionServerSpaceQuotaManager()<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>              .areCompactionsDisabled(region.getTableDescriptor().getTableName())) {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>        throw new DoNotRetryIOException(<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>            "Compactions on this region are " + "disabled due to a space quota violation.");<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>      }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      region.startRegionOperation(Operation.COMPACT_REGION);<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      LOG.info("Compacting " + region.getRegionInfo().getRegionNameAsString());<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      boolean major = request.hasMajor() &amp;&amp; request.getMajor();<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>      if (request.hasFamily()) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>        byte[] family = request.getFamily().toByteArray();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>        String log = "User-triggered " + (major ? "major " : "") + "compaction for region " +<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>            region.getRegionInfo().getRegionNameAsString() + " and family " +<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>            Bytes.toString(family);<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>        LOG.trace(log);<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>        region.requestCompaction(family, log, Store.PRIORITY_USER, major,<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>          CompactionLifeCycleTracker.DUMMY);<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      } else {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>        String log = "User-triggered " + (major ? "major " : "") + "compaction for region " +<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>            region.getRegionInfo().getRegionNameAsString();<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        LOG.trace(log);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        region.requestCompaction(log, Store.PRIORITY_USER, major, CompactionLifeCycleTracker.DUMMY);<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      return CompactRegionResponse.newBuilder().build();<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>    } catch (IOException ie) {<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>      throw new ServiceException(ie);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>    }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>  }<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span><a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>  @Override<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  public CompactionSwitchResponse compactionSwitch(RpcController controller,<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      CompactionSwitchRequest request) throws ServiceException {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    try {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      checkOpen();<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>      requestCount.increment();<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      boolean prevState = regionServer.compactSplitThread.isCompactionsEnabled();<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      CompactionSwitchResponse response =<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>          CompactionSwitchResponse.newBuilder().setPrevState(prevState).build();<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      if (prevState == request.getEnabled()) {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        // passed in requested state is same as current state. No action required<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        return response;<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      }<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      regionServer.compactSplitThread.switchCompaction(request.getEnabled());<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      return response;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    } catch (IOException ie) {<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      throw new ServiceException(ie);<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    }<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  /**<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>   * Flush a region on the region server.<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>   *<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>   * @param controller the RPC controller<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>   * @param request the request<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>   * @throws ServiceException<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>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  public FlushRegionResponse flushRegion(final RpcController controller,<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      final FlushRegionRequest request) throws ServiceException {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    try {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      checkOpen();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>      requestCount.increment();<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      HRegion region = getRegion(request.getRegion());<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>      LOG.info("Flushing " + region.getRegionInfo().getRegionNameAsString());<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      boolean shouldFlush = true;<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      if (request.hasIfOlderThanTs()) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>        shouldFlush = region.getEarliestFlushTimeForAllStores() &lt; request.getIfOlderThanTs();<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      FlushRegionResponse.Builder builder = FlushRegionResponse.newBuilder();<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>      if (shouldFlush) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>        boolean writeFlushWalMarker =  request.hasWriteFlushWalMarker() ?<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>            request.getWriteFlushWalMarker() : false;<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        // Go behind the curtain so we can manage writing of the flush WAL marker<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        HRegion.FlushResultImpl flushResult =<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>            region.flushcache(true, writeFlushWalMarker, FlushLifeCycleTracker.DUMMY);<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>        boolean compactionNeeded = flushResult.isCompactionNeeded();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>        if (compactionNeeded) {<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          regionServer.compactSplitThread.requestSystemCompaction(region,<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            "Compaction through user triggered flush");<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>        }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>        builder.setFlushed(flushResult.isFlushSucceeded());<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        builder.setWroteFlushWalMarker(flushResult.wroteFlushWalMarker);<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      }<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>      builder.setLastFlushTime(region.getEarliestFlushTimeForAllStores());<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      return builder.build();<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    } catch (DroppedSnapshotException ex) {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      // Cache flush can fail in a few places. If it fails in a critical<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      // section, we get a DroppedSnapshotException and a replay of wal<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      // is required. Currently the only way to do this is a restart of<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      // the server.<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>      regionServer.abort("Replay of WAL required. Forcing server shutdown", ex);<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      throw new ServiceException(ex);<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    } catch (IOException ie) {<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      throw new ServiceException(ie);<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><a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>  @Override<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>  public GetOnlineRegionResponse getOnlineRegion(final RpcController controller,<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      final GetOnlineRegionRequest request) throws ServiceException {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    try {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      checkOpen();<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      requestCount.increment();<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      Map&lt;String, HRegion&gt; onlineRegions = regionServer.onlineRegions;<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      List&lt;RegionInfo&gt; list = new ArrayList&lt;&gt;(onlineRegions.size());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      for (HRegion region: onlineRegions.values()) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        list.add(region.getRegionInfo());<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      Collections.sort(list, RegionInfo.COMPARATOR);<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>      return ResponseConverter.buildGetOnlineRegionResponse(list);<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>    } catch (IOException ie) {<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      throw new ServiceException(ie);<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>  }<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span><a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @Override<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>  public GetRegionInfoResponse getRegionInfo(final RpcController controller,<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      final GetRegionInfoRequest request) throws ServiceException {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    try {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      checkOpen();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      requestCount.increment();<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      HRegion region = getRegion(request.getRegion());<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>      RegionInfo info = region.getRegionInfo();<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      byte[] bestSplitRow = null;<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      boolean shouldSplit = true;<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        HRegion r = region;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        r.forceSplit(null);<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        bestSplitRow = r.checkSplit();<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>        // try to flush region first<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>        if(bestSplitRow == null) {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          r.flush(true);<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>          bestSplitRow = r.checkSplit();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>        }<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>        r.clearSplit();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      }<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      builder.setMergeable(region.isMergeable());<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      return builder.build();<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    } catch (IOException ie) {<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>      throw new ServiceException(ie);<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    }<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>  }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span><a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>  @Override<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span><a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>    List&lt;HRegion&gt; regions;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    if (request.hasTableName()) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>      regions = regionServer.getRegions(tableName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>    } else {<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>      regions = regionServer.getRegions();<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span><a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    try {<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>      for (HRegion region : regions) {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>      }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    } catch (IOException e) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>      throw new ServiceException(e);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    builder.addAllRegionLoads(rLoads);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    return builder.build();<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>  }<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span><a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>  @Override<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    requestCount.increment();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      try {<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>        checkOpen();<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>          switch (queueName) {<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            case "long":<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>              break;<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>            case "short":<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>              break;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>            default:<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>          }<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        }<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } catch (IOException ie) {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        throw new ServiceException(ie);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      } finally {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        clearCompactionQueues.set(false);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>    } else {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>    }<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>    return respBuilder.build();<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>  }<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span><a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>  /**<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>   * Get some information of the region server.<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>   *<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>   * @param controller the RPC controller<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>   * @param request the request<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * @throws ServiceException<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  @Override<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>    try {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      checkOpen();<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>    } catch (IOException ie) {<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      throw new ServiceException(ie);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    }<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>    requestCount.increment();<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span><a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>  @Override<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>    try {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>      checkOpen();<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>      HRegion region = getRegion(request.getRegion());<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>      requestCount.increment();<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      if (request.getFamilyCount() == 0) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>          columnFamilies.add(cf.toByteArray());<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        }<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      }<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>      int nCF = columnFamilies.size();<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      builder.addAllStoreFile(fileList);<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      return builder.build();<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    } catch (IOException ie) {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>      throw new ServiceException(ie);<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>  }<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span><a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>  private void throwOnWrongStartCode(OpenRegionRequest request) throws ServiceException {<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    if (!request.hasServerStartCode()) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      LOG.warn("OpenRegionRequest for {} does not have a start code", request.getOpenInfoList());<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      return;<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>    }<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>    throwOnWrongStartCode(request.getServerStartCode());<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>  private void throwOnWrongStartCode(CloseRegionRequest request) throws ServiceException {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    if (!request.hasServerStartCode()) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      LOG.warn("CloseRegionRequest for {} does not have a start code", request.getRegion());<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      return;<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>    }<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    throwOnWrongStartCode(request.getServerStartCode());<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  private void throwOnWrongStartCode(long serverStartCode) throws ServiceException {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    // check that we are the same server that this RPC is intended for.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    if (regionServer.serverName.getStartcode() != serverStartCode) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>      throw new ServiceException(new DoNotRetryIOException(<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>        "This RPC was intended for a " + "different server with startCode: " + serverStartCode +<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          ", this server is: " + regionServer.serverName));<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  }<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span><a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>  private void throwOnWrongStartCode(ExecuteProceduresRequest req) throws ServiceException {<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    if (req.getOpenRegionCount() &gt; 0) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>      for (OpenRegionRequest openReq : req.getOpenRegionList()) {<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        throwOnWrongStartCode(openReq);<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>    if (req.getCloseRegionCount() &gt; 0) {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>      for (CloseRegionRequest closeReq : req.getCloseRegionList()) {<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>        throwOnWrongStartCode(closeReq);<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><a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  /**<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>   *<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>   * &lt;p&gt;<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>   * Different manages states for the region are:<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>   *  &lt;/ul&gt;<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>   * &lt;p&gt;<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>   * &lt;/p&gt;<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>   * @param controller the RPC controller<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>   * @param request the request<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>   * @throws ServiceException<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>   */<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>  @Override<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    requestCount.increment();<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    throwOnWrongStartCode(request);<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span><a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    try {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      checkOpen();<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    } catch (IOException ie) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      TableName tableName = null;<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>      if (regionCount == 1) {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (ri != null) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>        }<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>      }<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        throw new ServiceException(ie);<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      }<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      synchronized (regionServer.online) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>        try {<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>          }<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>          checkOpen();<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        } catch (InterruptedException t) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>          Thread.currentThread().interrupt();<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>          throw new ServiceException(t);<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>        } catch (IOException e) {<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>          throw new ServiceException(e);<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>        }<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>      }<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>    }<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span><a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span><a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>      TableDescriptor htd;<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>      try {<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        String encodedName = region.getEncodedName();<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (onlineRegion != null) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          // The region is already online. This should not happen any more.<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>          String error = "Received OPEN for the region:"<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>          LOG.warn(error);<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>          //regionServer.abort(error);<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>          //throw new IOException(error);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>          continue;<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>        }<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>          encodedNameBytes, Boolean.TRUE);<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>            // There is a close in progress. This should not happen any more.<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>            String error = "Received OPEN for the region:"<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>            regionServer.abort(error);<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>            throw new IOException(error);<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>          }<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span><a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>          // An open is in progress. This is supported, but let's log this.<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>              + " - ignoring this new request for this region.");<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span><a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>          htd = htds.get(region.getTable());<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>          if (htd == null) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>            htds.put(region.getTable(), htd);<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>          }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>          if (htd == null) {<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>          }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>          // Need to pass the expected version in the constructor.<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>          if (regionServer.executorService == null) {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>          } else {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>            if (region.isMetaRegion()) {<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>            } else {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>              }<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>              } else {<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>              }<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>            }<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>        }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span><a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      } catch (IOException ie) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (isBulkAssign) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          throw new ServiceException(ie);<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>        }<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>      }<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>    }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>    return builder.build();<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>  /**<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>   *  Wamrmup a region on this server.<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>   *<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>   * closes the region bringing the most important pages in cache.<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>   * &lt;p&gt;<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>   *<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>   * @param controller the RPC controller<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>   * @param request the request<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>   * @throws ServiceException<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>   */<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>  @Override<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span><a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    TableDescriptor htd;<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span><a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    try {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>      checkOpen();<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>      String encodedName = region.getEncodedName();<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span><a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>      if (onlineRegion != null) {<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>        return response;<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>      }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span><a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span><a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>        return response;<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>      }<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span><a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>      LOG.info("Warming up region " + region.getRegionNameAsString());<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span><a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    } catch (IOException ie) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>      throw new ServiceException(ie);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span><a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    return response;<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>  }<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span><a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>  /**<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>   * exception.<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>   * @param controller the RPC controller<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>   * @param request the request<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>   * @throws ServiceException<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>   */<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>  @Override<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>    try {<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>      checkOpen();<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>      if (entries == null || entries.isEmpty()) {<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>        // empty input<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>      }<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>            ? region.getCoprocessorHost()<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span><a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span><a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      for (WALEntry entry : entries) {<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>              + entry.getKey().getEncodedRegionName());<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>        }<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>              nonceGroup,<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>              nonce,<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>              entry.getKey().getWriteTime());<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>        }<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        List&lt;MutationReplay&gt; edits = WALSplitUtil.getMutationsFromWALEntry(entry,<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>          cells, walEntry, durability);<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>        if (coprocessorHost != null) {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>          // KeyValue.<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>            walEntry.getSecond())) {<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>            // if bypass this log entry, ignore it ...<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>            continue;<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          }<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          walEntries.add(walEntry);<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>          // HBASE-17924<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>          // sort to improve lock efficiency<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>          // check if it's a partial success<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>            }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>          }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>        }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>      }<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span><a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>      WAL wal = region.getWAL();<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>      if (wal != null) {<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        wal.sync();<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      }<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span><a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      if (coprocessorHost != null) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>            entry.getSecond());<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>        }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>      }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>    } catch (IOException ie) {<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>      throw new ServiceException(ie);<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>    } finally {<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>      }<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    }<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span><a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>  private void checkShouldRejectReplicationRequest(List&lt;WALEntry&gt; entries) throws IOException {<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    ReplicationSourceService replicationSource = regionServer.getReplicationSourceService();<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>    if (replicationSource == null || entries.isEmpty()) {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      return;<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>    }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>    // We can ensure that all entries are for one peer, so only need to check one entry's<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    // table name. if the table hit sync replication at peer side and the peer cluster<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>    // is (or is transiting to) state ACTIVE or DOWNGRADE_ACTIVE, we should reject to apply<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    // those entries according to the design doc.<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>    TableName table = TableName.valueOf(entries.get(0).getKey().getTableName().toByteArray());<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>    if (replicationSource.getSyncReplicationPeerInfoProvider().checkState(table,<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      RejectReplicationRequestStateChecker.get())) {<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      throw new DoNotRetryIOException(<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>          "Reject to apply to sink cluster because sync replication state of sink cluster "<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>              + "is ACTIVE or DOWNGRADE_ACTIVE, table: " + table);<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>    }<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>  /**<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>   * Replicate WAL entries on the region server.<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>   * @param controller the RPC controller<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * @param request the request<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * @throws ServiceException<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   */<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>  @Override<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    try {<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>      checkOpen();<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>        requestCount.increment();<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>        checkShouldRejectReplicationRequest(entries);<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>        CellScanner cellScanner = ((HBaseRpcController) controller).cellScanner();<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>        regionServer.getRegionServerCoprocessorHost().preReplicateLogEntries();<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>        regionServer.replicationSinkHandler.replicateLogEntries(entries, cellScanner,<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>          request.getReplicationClusterId(), request.getSourceBaseNamespaceDirPath(),<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>          request.getSourceHFileArchiveDirPath());<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>        regionServer.getRegionServerCoprocessorHost().postReplicateLogEntries();<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>      } else {<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>        throw new ServiceException("Replication services are not initialized yet");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      }<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    } catch (IOException ie) {<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      throw new ServiceException(ie);<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>    }<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>  }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span><a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>  /**<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>   * Roll the WAL writer of the region server.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>   * @param controller the RPC controller<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>   * @param request the request<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>   * @throws ServiceException<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>   */<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>  @Override<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  public RollWALWriterResponse rollWALWriter(final RpcController controller,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      final RollWALWriterRequest request) throws ServiceException {<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>    try {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>      checkOpen();<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>      requestCount.increment();<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>      regionServer.getRegionServerCoprocessorHost().preRollWALWriterRequest();<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>      regionServer.walRoller.requestRollAll();<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>      regionServer.getRegionServerCoprocessorHost().postRollWALWriterRequest();<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>      RollWALWriterResponse.Builder builder = RollWALWriterResponse.newBuilder();<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      return builder.build();<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>    } catch (IOException ie) {<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      throw new ServiceException(ie);<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>    }<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>  }<a name="line.2344"></a>
 <span class="sourceLineNo">2345</span><a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>  /**<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>   * Stop the region server.<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>   *<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>   * @param controller the RPC controller<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>   * @param request the request<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * @throws ServiceException<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  @Override<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>  public StopServerResponse stopServer(final RpcController controller,<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>      final StopServerRequest request) throws ServiceException {<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    requestCount.increment();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    String reason = request.getReason();<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    regionServer.stop(reason);<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    return StopServerResponse.newBuilder().build();<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>  @Override<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>      UpdateFavoredNodesRequest request) throws ServiceException {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    List&lt;UpdateFavoredNodesRequest.RegionUpdateInfo&gt; openInfoList = request.getUpdateInfoList();<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    UpdateFavoredNodesResponse.Builder respBuilder = UpdateFavoredNodesResponse.newBuilder();<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    for (UpdateFavoredNodesRequest.RegionUpdateInfo regionUpdateInfo : openInfoList) {<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(regionUpdateInfo.getRegion());<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      if (regionUpdateInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>        regionServer.updateRegionFavoredNodesMapping(hri.getEncodedName(),<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>          regionUpdateInfo.getFavoredNodesList());<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>    respBuilder.setResponse(openInfoList.size());<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    return respBuilder.build();<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>  }<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>  /**<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>   * Atomically bulk load several HFiles into an open region<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>   * @return true if successful, false is failed but recoverably (no action)<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>   * @throws ServiceException if failed unrecoverably<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>   */<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>  @Override<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>  public BulkLoadHFileResponse bulkLoadHFile(final RpcController controller,<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      final BulkLoadHFileRequest request) throws ServiceException {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    try {<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>      checkOpen();<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      requestCount.increment();<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>      HRegion region = getRegion(request.getRegion());<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>      final boolean spaceQuotaEnabled = QuotaUtil.isQuotaEnabled(getConfiguration());<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>      long sizeToBeLoaded = -1;<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>      // Check to see if this bulk load would exceed the space quota for this table<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>      if (spaceQuotaEnabled) {<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>        ActivePolicyEnforcement activeSpaceQuotas = getSpaceQuotaManager().getActiveEnforcements();<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>        SpaceViolationPolicyEnforcement enforcement = activeSpaceQuotas.getPolicyEnforcement(<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>            region);<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>        if (enforcement != null) {<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>          // Bulk loads must still be atomic. We must enact all or none.<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>          List&lt;String&gt; filePaths = new ArrayList&lt;&gt;(request.getFamilyPathCount());<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>          for (FamilyPath familyPath : request.getFamilyPathList()) {<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>            filePaths.add(familyPath.getPath());<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>          }<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>          // Check if the batch of files exceeds the current quota<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>          sizeToBeLoaded = enforcement.computeBulkLoadSize(regionServer.getFileSystem(), filePaths);<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>      // secure bulk load<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>      Map&lt;byte[], List&lt;Path&gt;&gt; map =<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>        regionServer.secureBulkLoadManager.secureBulkLoadHFiles(region, request);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      BulkLoadHFileResponse.Builder builder = BulkLoadHFileResponse.newBuilder();<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>      builder.setLoaded(map != null);<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>      if (map != null) {<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        // Treat any negative size as a flag to "ignore" updating the region size as that is<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        // not possible to occur in real life (cannot bulk load a file with negative size)<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        if (spaceQuotaEnabled &amp;&amp; sizeToBeLoaded &gt; 0) {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>          if (LOG.isTraceEnabled()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>            LOG.trace("Incrementing space use of " + region.getRegionInfo() + " by "<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>                + sizeToBeLoaded + " bytes");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>          }<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          // Inform space quotas of the new files for this region<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>          getSpaceQuotaManager().getRegionSizeStore().incrementRegionSize(<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>              region.getRegionInfo(), sizeToBeLoaded);<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        }<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>      }<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>      return builder.build();<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>    } catch (IOException ie) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>      throw new ServiceException(ie);<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>    } finally {<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        regionServer.metricsRegionServer.updateBulkLoad(<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>            EnvironmentEdgeManager.currentTime() - start);<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>      }<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    }<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>  }<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span><a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>  @Override<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>  public PrepareBulkLoadResponse prepareBulkLoad(RpcController controller,<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>      PrepareBulkLoadRequest request) throws ServiceException {<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>    try {<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>      checkOpen();<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>      requestCount.increment();<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span><a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      HRegion region = getRegion(request.getRegion());<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span><a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>      String bulkToken = regionServer.secureBulkLoadManager.prepareBulkLoad(region, request);<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>      PrepareBulkLoadResponse.Builder builder = PrepareBulkLoadResponse.newBuilder();<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>      builder.setBulkToken(bulkToken);<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      return builder.build();<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    } catch (IOException ie) {<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>      throw new ServiceException(ie);<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><a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>  @Override<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>  public CleanupBulkLoadResponse cleanupBulkLoad(RpcController controller,<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>      CleanupBulkLoadRequest request) throws ServiceException {<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>    try {<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>      checkOpen();<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      requestCount.increment();<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span><a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>      HRegion region = getRegion(request.getRegion());<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span><a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>      regionServer.secureBulkLoadManager.cleanupBulkLoad(region, request);<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>      CleanupBulkLoadResponse response = CleanupBulkLoadResponse.newBuilder().build();<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      return response;<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    } catch (IOException ie) {<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>      throw new ServiceException(ie);<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><a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>  @Override<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>  public CoprocessorServiceResponse execService(final RpcController controller,<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      final CoprocessorServiceRequest request) throws ServiceException {<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>    try {<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>      checkOpen();<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>      requestCount.increment();<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>      HRegion region = getRegion(request.getRegion());<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>      com.google.protobuf.Message result = execServiceOnRegion(region, request.getCall());<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>      CoprocessorServiceResponse.Builder builder = CoprocessorServiceResponse.newBuilder();<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>      builder.setRegion(RequestConverter.buildRegionSpecifier(<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>        RegionSpecifierType.REGION_NAME, region.getRegionInfo().getRegionName()));<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>      // TODO: COPIES!!!!!!<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>      builder.setValue(builder.getValueBuilder().setName(result.getClass().getName()).<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>        setValue(org.apache.hbase.thirdparty.com.google.protobuf.ByteString.<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>            copyFrom(result.toByteArray())));<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>      return builder.build();<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    } catch (IOException ie) {<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>      throw new ServiceException(ie);<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    }<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>  }<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span><a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>  private com.google.protobuf.Message execServiceOnRegion(HRegion region,<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>      final ClientProtos.CoprocessorServiceCall serviceCall) throws IOException {<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    // ignore the passed in controller (from the serialized call)<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    ServerRpcController execController = new ServerRpcController();<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>    return region.execService(execController, serviceCall);<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 boolean shouldRejectRequestsFromClient(HRegion region) {<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    TableName table = region.getRegionInfo().getTable();<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>    ReplicationSourceService service = regionServer.getReplicationSourceService();<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    return service != null &amp;&amp; service.getSyncReplicationPeerInfoProvider()<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>            .checkState(table, RejectRequestsFromClientStateChecker.get());<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>  private void rejectIfInStandByState(HRegion region) throws DoNotRetryIOException {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>    if (shouldRejectRequestsFromClient(region)) {<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>      throw new DoNotRetryIOException(<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        region.getRegionInfo().getRegionNameAsString() + " is in STANDBY state.");<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><a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>  /**<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   * Get data from a table.<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>   *<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>   * @param controller the RPC controller<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>   * @param request the get request<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>   * @throws ServiceException<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>   */<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>  @Override<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>  public GetResponse get(final RpcController controller, final GetRequest request)<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>      throws ServiceException {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>    OperationQuota quota = null;<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>    HRegion region = null;<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>    try {<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      checkOpen();<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      requestCount.increment();<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>      rpcGetRequestCount.increment();<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      region = getRegion(request.getRegion());<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>      rejectIfInStandByState(region);<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span><a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      GetResponse.Builder builder = GetResponse.newBuilder();<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      ClientProtos.Get get = request.getGet();<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>      // An asynchbase client, https://github.com/OpenTSDB/asynchbase, starts by trying to do<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      // a get closest before. Throwing the UnknownProtocolException signals it that it needs<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>      // to switch and do hbase2 protocol (HBase servers do not tell clients what versions<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      // they are; its a problem for non-native clients like asynchbase. HBASE-20225.<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (get.hasClosestRowBefore() &amp;&amp; get.getClosestRowBefore()) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        throw new UnknownProtocolException("Is this a pre-hbase-1.0.0 or asynchbase client? " +<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>            "Client is invoking getClosestRowBefore removed in hbase-2.0.0 replaced by " +<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>            "reverse Scan.");<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      }<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      Boolean existence = null;<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      Result r = null;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>      RpcCallContext context = RpcServer.getCurrentCall().orElse(null);<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>      quota = getRpcQuotaManager().checkQuota(region, OperationQuota.OperationType.GET);<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span><a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>      Get clientGet = ProtobufUtil.toGet(get);<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      if (get.getExistenceOnly() &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        existence = region.getCoprocessorHost().preExists(clientGet);<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>      }<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>      if (existence == null) {<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>        if (context != null) {<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>          r = get(clientGet, (region), null, context);<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>        } else {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          // for test purpose<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>          r = region.get(clientGet);<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        }<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>        if (get.getExistenceOnly()) {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>          boolean exists = r.getExists();<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>          if (region.getCoprocessorHost() != null) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>            exists = region.getCoprocessorHost().postExists(clientGet, exists);<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>          }<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>          existence = exists;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>        }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      }<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      if (existence != null) {<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>        ClientProtos.Result pbr =<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>            ProtobufUtil.toResult(existence, region.getRegionInfo().getReplicaId() != 0);<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        builder.setResult(pbr);<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      } else if (r != null) {<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>        ClientProtos.Result pbr;<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        if (isClientCellBlockSupport(context) &amp;&amp; controller instanceof HBaseRpcController<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>            &amp;&amp; VersionInfoUtil.hasMinimumVersion(context.getClientVersionInfo(), 1, 3)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>          pbr = ProtobufUtil.toResultNoData(r);<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>          ((HBaseRpcController) controller).setCellScanner(CellUtil.createCellScanner(r<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>              .rawCells()));<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>          addSize(context, r, null);<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>        } else {<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>          pbr = ProtobufUtil.toResult(r);<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        }<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        builder.setResult(pbr);<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>      //r.cells is null when an table.exists(get) call<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      if (r != null &amp;&amp; r.rawCells() != null) {<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>        quota.addGetResult(r);<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>      }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>      return builder.build();<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>    } catch (IOException ie) {<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>      throw new ServiceException(ie);<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>    } finally {<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      MetricsRegionServer mrs = regionServer.metricsRegionServer;<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>      if (mrs != null) {<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        TableDescriptor td = region != null? region.getTableDescriptor(): null;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>        if (td != null) {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>          mrs.updateGet(td.getTableName(), EnvironmentEdgeManager.currentTime() - before);<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>      if (quota != null) {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        quota.close();<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>    }<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>  }<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span><a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>  private Result get(Get get, HRegion region, RegionScannersCloseCallBack closeCallBack,<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>      RpcCallContext context) throws IOException {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>    region.prepareGet(get);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>    boolean stale = region.getRegionInfo().getReplicaId() != 0;<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span><a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>    // This method is almost the same as HRegion#get.<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>    // pre-get CP hook<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    if (region.getCoprocessorHost() != null) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>      if (region.getCoprocessorHost().preGet(get, results)) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>        region.metricsUpdateForGet(results, before);<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>        return Result<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>            .create(results, get.isCheckExistenceOnly() ? !results.isEmpty() : null, stale);<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>      }<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>    }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    Scan scan = new Scan(get);<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>    if (scan.getLoadColumnFamiliesOnDemandValue() == null) {<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      scan.setLoadColumnFamiliesOnDemand(region.isLoadingCfsOnDemandDefault());<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    }<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>    RegionScannerImpl scanner = null;<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    try {<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      scanner = region.getScanner(scan);<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      scanner.next(results);<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>    } finally {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      if (scanner != null) {<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>        if (closeCallBack == null) {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>          // If there is a context then the scanner can be added to the current<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>          // RpcCallContext. The rpc callback will take care of closing the<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>          // scanner, for eg in case<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>          // of get()<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>          context.setCallBack(scanner);<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        } else {<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>          // The call is from multi() where the results from the get() are<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>          // aggregated and then send out to the<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>          // rpc. The rpccall back will close all such scanners created as part<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>          // of multi().<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>          closeCallBack.addScanner(scanner);<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>        }<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      }<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>    // post-get CP hook<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>    if (region.getCoprocessorHost() != null) {<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>      region.getCoprocessorHost().postGet(get, results);<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>    }<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>    region.metricsUpdateForGet(results, before);<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>    return Result.create(results, get.isCheckExistenceOnly() ? !results.isEmpty() : null, stale);<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>  }<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span><a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>  private void checkBatchSizeAndLogLargeSize(MultiRequest request) {<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>    int sum = 0;<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>    String firstRegionName = null;<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>    for (RegionAction regionAction : request.getRegionActionList()) {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (sum == 0) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        firstRegionName = Bytes.toStringBinary(regionAction.getRegion().getValue().toByteArray());<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>      }<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      sum += regionAction.getActionCount();<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>    }<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>    if (sum &gt; rowSizeWarnThreshold) {<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      ld.logBatchWarning(firstRegionName, sum, rowSizeWarnThreshold);<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><a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>  private void failRegionAction(MultiResponse.Builder responseBuilder,<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      RegionActionResult.Builder regionActionResultBuilder, RegionAction regionAction,<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      CellScanner cellScanner, Throwable error) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>    rpcServer.getMetrics().exception(error);<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>    regionActionResultBuilder.setException(ResponseConverter.buildException(error));<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>    responseBuilder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>    // All Mutations in this RegionAction not executed as we can not see the Region online here<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>    // in this RS. Will be retried from Client. Skipping all the Cells in CellScanner<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>    // corresponding to these Mutations.<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (cellScanner != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      skipCellsForMutations(regionAction.getActionList(), cellScanner);<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 boolean isReplicationRequest(Action action) {<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>    // replication request can only be put or delete.<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>    if (!action.hasMutation()) {<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>      return false;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>    }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>    MutationProto mutation = action.getMutation();<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>    MutationType type = mutation.getMutateType();<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>    if (type != MutationType.PUT &amp;&amp; type != MutationType.DELETE) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      return false;<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>    }<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>    // replication will set a special attribute so we can make use of it to decide whether a request<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>    // is for replication.<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>    return mutation.getAttributeList().stream().map(p -&gt; p.getName())<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      .filter(n -&gt; n.equals(ReplicationUtils.REPLICATION_ATTR_NAME)).findAny().isPresent();<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>  }<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span><a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>  /**<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>   * Execute multiple actions on a table: get, mutate, and/or execCoprocessor<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>   * @param rpcc the RPC controller<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>   * @param request the multi request<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>   * @throws ServiceException<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>   */<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>  @Override<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>  public MultiResponse multi(final RpcController rpcc, final MultiRequest request)<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      throws ServiceException {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>    try {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>      checkOpen();<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>    } catch (IOException ie) {<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>      throw new ServiceException(ie);<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>    }<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span><a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>    checkBatchSizeAndLogLargeSize(request);<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>    // rpc controller is how we bring in data via the back door;  it is unprotobuf'ed data.<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>    // It is also the conduit via which we pass back data.<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>    HBaseRpcController controller = (HBaseRpcController)rpcc;<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>    CellScanner cellScanner = controller != null ? controller.cellScanner(): null;<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>    if (controller != null) {<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>      controller.setCellScanner(null);<a name="line.2726"></a>
+<span class="sourceLineNo">2346</span><a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  /**<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>   * Stop the region server.<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>   *<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>   * @param controller the RPC controller<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>   * @param request the request<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>   * @throws ServiceException<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>   */<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>  @Override<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  public StopServerResponse stopServer(final RpcController controller,<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      final StopServerRequest request) throws ServiceException {<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    requestCount.increment();<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    String reason = request.getReason();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>    regionServer.stop(reason);<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    return StopServerResponse.newBuilder().build();<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>  @Override<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>  public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>      UpdateFavoredNodesRequest request) throws ServiceException {<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    List&lt;UpdateFavoredNodesRequest.RegionUpdateInfo&gt; openInfoList = request.getUpdateInfoList();<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    UpdateFavoredNodesResponse.Builder respBuilder = UpdateFavoredNodesResponse.newBuilder();<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    for (UpdateFavoredNodesRequest.RegionUpdateInfo regionUpdateInfo : openInfoList) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(regionUpdateInfo.getRegion());<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>      if (regionUpdateInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>        regionServer.updateRegionFavoredNodesMapping(hri.getEncodedName(),<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>          regionUpdateInfo.getFavoredNodesList());<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>    respBuilder.setResponse(openInfoList.size());<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    return respBuilder.build();<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>  }<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span><a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>  /**<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>   * Atomically bulk load several HFiles into an open region<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>   * @return true if successful, false is failed but recoverably (no action)<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>   * @throws ServiceException if failed unrecoverably<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>   */<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>  @Override<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>  public BulkLoadHFileResponse bulkLoadHFile(final RpcController controller,<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>      final BulkLoadHFileRequest request) throws ServiceException {<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>    try {<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      checkOpen();<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      requestCount.increment();<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      HRegion region = getRegion(request.getRegion());<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span>      final boolean spaceQuotaEnabled = QuotaUtil.isQuotaEnabled(getConfiguration());<a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>      long sizeToBeLoaded = -1;<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span><a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>      // Check to see if this bulk load would exceed the space quota for this table<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span>      if (spaceQuotaEnabled) {<a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>        ActivePolicyEnforcement activeSpaceQuotas = getSpaceQuotaManager().getActiveEnforcements();<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>        SpaceViolationPolicyEnforcement enforcement = activeSpaceQuotas.getPolicyEnforcement(<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>            region);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>        if (enforcement != null) {<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>          // Bulk loads must still be atomic. We must enact all or none.<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>          List&lt;String&gt; filePaths = new ArrayList&lt;&gt;(request.getFamilyPathCount());<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>          for (FamilyPath familyPath : request.getFamilyPathList()) {<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>            filePaths.add(familyPath.getPath());<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>          }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>          // Check if the batch of files exceeds the current quota<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>          sizeToBeLoaded = enforcement.computeBulkLoadSize(getFileSystem(filePaths), filePaths);<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>        }<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      }<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>      // secure bulk load<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>      Map&lt;byte[], List&lt;Path&gt;&gt; map =<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>        regionServer.secureBulkLoadManager.secureBulkLoadHFiles(region, request);<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>      BulkLoadHFileResponse.Builder builder = BulkLoadHFileResponse.newBuilder();<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>      builder.setLoaded(map != null);<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>      if (map != null) {<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>        // Treat any negative size as a flag to "ignore" updating the region size as that is<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>        // not possible to occur in real life (cannot bulk load a file with negative size)<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        if (spaceQuotaEnabled &amp;&amp; sizeToBeLoaded &gt; 0) {<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>          if (LOG.isTraceEnabled()) {<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>            LOG.trace("Incrementing space use of " + region.getRegionInfo() + " by "<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>                + sizeToBeLoaded + " bytes");<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>          }<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>          // Inform space quotas of the new files for this region<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>          getSpaceQuotaManager().getRegionSizeStore().incrementRegionSize(<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>              region.getRegionInfo(), sizeToBeLoaded);<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>        }<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>      }<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>      return builder.build();<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>    } catch (IOException ie) {<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>      throw new ServiceException(ie);<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>    } finally {<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>        regionServer.metricsRegionServer.updateBulkLoad(<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>            EnvironmentEdgeManager.currentTime() - start);<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>      }<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>    }<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>  @Override<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>  public PrepareBulkLoadResponse prepareBulkLoad(RpcController controller,<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>      PrepareBulkLoadRequest request) throws ServiceException {<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>    try {<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>      checkOpen();<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>      requestCount.increment();<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span><a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>      HRegion region = getRegion(request.getRegion());<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span><a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>      String bulkToken = regionServer.secureBulkLoadManager.prepareBulkLoad(region, request);<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>      PrepareBulkLoadResponse.Builder builder = PrepareBulkLoadResponse.newBuilder();<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>      builder.setBulkToken(bulkToken);<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>      return builder.build();<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>    } catch (IOException ie) {<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>      throw new ServiceException(ie);<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>    }<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>  }<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span><a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>  @Override<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>  public CleanupBulkLoadResponse cleanupBulkLoad(RpcController controller,<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>      CleanupBulkLoadRequest request) throws ServiceException {<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>    try {<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>      checkOpen();<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>      requestCount.increment();<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span><a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>      HRegion region = getRegion(request.getRegion());<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span><a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>      regionServer.secureBulkLoadManager.cleanupBulkLoad(region, request);<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>      CleanupBulkLoadResponse response = CleanupBulkLoadResponse.newBuilder().build();<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      return response;<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>    } catch (IOException ie) {<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>      throw new ServiceException(ie);<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><a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>  @Override<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>  public CoprocessorServiceResponse execService(final RpcController controller,<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>      final CoprocessorServiceRequest request) throws ServiceException {<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>    try {<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>      checkOpen();<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>      requestCount.increment();<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>      HRegion region = getRegion(request.getRegion());<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>      com.google.protobuf.Message result = execServiceOnRegion(region, request.getCall());<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>      CoprocessorServiceResponse.Builder builder = CoprocessorServiceResponse.newBuilder();<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>      builder.setRegion(RequestConverter.buildRegionSpecifier(<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>        RegionSpecifierType.REGION_NAME, region.getRegionInfo().getRegionName()));<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>      // TODO: COPIES!!!!!!<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>      builder.setValue(builder.getValueBuilder().setName(result.getClass().getName()).<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>        setValue(org.apache.hbase.thirdparty.com.google.protobuf.ByteString.<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>            copyFrom(result.toByteArray())));<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>      return builder.build();<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>    } catch (IOException ie) {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>      throw new ServiceException(ie);<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>    }<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>  private FileSystem getFileSystem(List&lt;String&gt; filePaths) throws IOException {<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    if (filePaths.isEmpty()) {<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>      // local hdfs<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>      return regionServer.getFileSystem();<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>    // source hdfs<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>    return new Path(filePaths.get(0)).getFileSystem(regionServer.getConfiguration());<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>  }<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span><a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>  private com.google.protobuf.Message execServiceOnRegion(HRegion region,<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>      final ClientProtos.CoprocessorServiceCall serviceCall) throws IOException {<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    // ignore the passed in controller (from the serialized call)<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>    ServerRpcController execController = new ServerRpcController();<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>    return region.execService(execController, serviceCall);<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span><a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>  private boolean shouldRejectRequestsFromClient(HRegion region) {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>    TableName table = region.getRegionInfo().getTable();<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>    ReplicationSourceService service = regionServer.getReplicationSourceService();<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>    return service != null &amp;&amp; service.getSyncReplicationPeerInfoProvider()<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>            .checkState(table, RejectRequestsFromClientStateChecker.get());<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>  }<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span><a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>  private void rejectIfInStandByState(HRegion region) throws DoNotRetryIOException {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>    if (shouldRejectRequestsFromClient(region)) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>      throw new DoNotRetryIOException(<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>        region.getRegionInfo().getRegionNameAsString() + " is in STANDBY state.");<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><a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>  /**<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>   * Get data from a table.<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>   *<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>   * @param controller the RPC controller<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>   * @param request the get request<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>   * @throws ServiceException<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>   */<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>  @Override<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>  public GetResponse get(final RpcController controller, final GetRequest request)<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>      throws ServiceException {<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>    OperationQuota quota = null;<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>    HRegion region = null;<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>    try {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>      checkOpen();<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      requestCount.increment();<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>      rpcGetRequestCount.increment();<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>      region = getRegion(request.getRegion());<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>      rejectIfInStandByState(region);<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span><a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>      GetResponse.Builder builder = GetResponse.newBuilder();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>      ClientProtos.Get get = request.getGet();<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>      // An asynchbase client, https://github.com/OpenTSDB/asynchbase, starts by trying to do<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>      // a get closest before. Throwing the UnknownProtocolException signals it that it needs<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>      // to switch and do hbase2 protocol (HBase servers do not tell clients what versions<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      // they are; its a problem for non-native clients like asynchbase. HBASE-20225.<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>      if (get.hasClosestRowBefore() &amp;&amp; get.getClosestRowBefore()) {<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>        throw new UnknownProtocolException("Is this a pre-hbase-1.0.0 or asynchbase client? " +<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>            "Client is invoking getClosestRowBefore removed in hbase-2.0.0 replaced by " +<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>            "reverse Scan.");<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>      }<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>      Boolean existence = null;<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>      Result r = null;<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>      RpcCallContext context = RpcServer.getCurrentCall().orElse(null);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>      quota = getRpcQuotaManager().checkQuota(region, OperationQuota.OperationType.GET);<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span><a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>      Get clientGet = ProtobufUtil.toGet(get);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>      if (get.getExistenceOnly() &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>        existence = region.getCoprocessorHost().preExists(clientGet);<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>      }<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>      if (existence == null) {<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>        if (context != null) {<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>          r = get(clientGet, (region), null, context);<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>        } else {<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          // for test purpose<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>          r = region.get(clientGet);<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>        }<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>        if (get.getExistenceOnly()) {<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>          boolean exists = r.getExists();<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>          if (region.getCoprocessorHost() != null) {<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>            exists = region.getCoprocessorHost().postExists(clientGet, exists);<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>          }<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>          existence = exists;<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>      if (existence != null) {<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>        ClientProtos.Result pbr =<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>            ProtobufUtil.toResult(existence, region.getRegionInfo().getReplicaId() != 0);<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>        builder.setResult(pbr);<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>      } else if (r != null) {<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>        ClientProtos.Result pbr;<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>        if (isClientCellBlockSupport(context) &amp;&amp; controller instanceof HBaseRpcController<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>            &amp;&amp; VersionInfoUtil.hasMinimumVersion(context.getClientVersionInfo(), 1, 3)) {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>          pbr = ProtobufUtil.toResultNoData(r);<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>          ((HBaseRpcController) controller).setCellScanner(CellUtil.createCellScanner(r<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>              .rawCells()));<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>          addSize(context, r, null);<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>        } else {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>          pbr = ProtobufUtil.toResult(r);<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>        }<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>        builder.setResult(pbr);<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>      }<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>      //r.cells is null when an table.exists(get) call<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>      if (r != null &amp;&amp; r.rawCells() != null) {<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>        quota.addGetResult(r);<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>      }<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      return builder.build();<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>    } catch (IOException ie) {<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>      throw new ServiceException(ie);<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>    } finally {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>      MetricsRegionServer mrs = regionServer.metricsRegionServer;<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>      if (mrs != null) {<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>        TableDescriptor td = region != null? region.getTableDescriptor(): null;<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>        if (td != null) {<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>          mrs.updateGet(td.getTableName(), EnvironmentEdgeManager.currentTime() - before);<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>        }<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>      }<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>      if (quota != null) {<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>        quota.close();<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>  }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span><a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>  private Result get(Get get, HRegion region, RegionScannersCloseCallBack closeCallBack,<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      RpcCallContext context) throws IOException {<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>    region.prepareGet(get);<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>    boolean stale = region.getRegionInfo().getReplicaId() != 0;<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span><a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>    // This method is almost the same as HRegion#get.<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>    // pre-get CP hook<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    if (region.getCoprocessorHost() != null) {<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>      if (region.getCoprocessorHost().preGet(get, results)) {<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>        region.metricsUpdateForGet(results, before);<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>        return Result<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>            .create(results, get.isCheckExistenceOnly() ? !results.isEmpty() : null, stale);<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>    Scan scan = new Scan(get);<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    if (scan.getLoadColumnFamiliesOnDemandValue() == null) {<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>      scan.setLoadColumnFamiliesOnDemand(region.isLoadingCfsOnDemandDefault());<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>    }<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    RegionScannerImpl scanner = null;<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    try {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>      scanner = region.getScanner(scan);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>      scanner.next(results);<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>    } finally {<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      if (scanner != null) {<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>        if (closeCallBack == null) {<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>          // If there is a context then the scanner can be added to the current<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>          // RpcCallContext. The rpc callback will take care of closing the<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>          // scanner, for eg in case<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>          // of get()<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>          context.setCallBack(scanner);<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>        } else {<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>          // The call is from multi() where the results from the get() are<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>          // aggregated and then send out to the<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>          // rpc. The rpccall back will close all such scanners created as part<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>          // of multi().<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>          closeCallBack.addScanner(scanner);<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>    }<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span><a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>    // post-get CP hook<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>    if (region.getCoprocessorHost() != null) {<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>      region.getCoprocessorHost().postGet(get, results);<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>    region.metricsUpdateForGet(results, before);<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span><a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>    return Result.create(results, get.isCheckExistenceOnly() ? !results.isEmpty() : null, stale);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>  }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span><a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>  private void checkBatchSizeAndLogLargeSize(MultiRequest request) {<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    int sum = 0;<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    String firstRegionName = null;<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>    for (RegionAction regionAction : request.getRegionActionList()) {<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>      if (sum == 0) {<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>        firstRegionName = Bytes.toStringBinary(regionAction.getRegion().getValue().toByteArray());<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>      }<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>      sum += regionAction.getActionCount();<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>    }<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>    if (sum &gt; rowSizeWarnThreshold) {<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>      ld.logBatchWarning(firstRegionName, sum, rowSizeWarnThreshold);<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><a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>  private void failRegionAction(MultiResponse.Builder responseBuilder,<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>      RegionActionResult.Builder regionActionResultBuilder, RegionAction regionAction,<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>      CellScanner cellScanner, Throwable error) {<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>    rpcServer.getMetrics().exception(error);<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>    regionActionResultBuilder.setException(ResponseConverter.buildException(error));<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>    responseBuilder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>    // All Mutations in this RegionAction not executed as we can not see the Region online here<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>    // in this RS. Will be retried from Client. Skipping all the Cells in CellScanner<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>    // corresponding to these Mutations.<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>    if (cellScanner != null) {<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>      skipCellsForMutations(regionAction.getActionList(), cellScanner);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>    }<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>  }<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span><a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>  private boolean isReplicationRequest(Action action) {<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>    // replication request can only be put or delete.<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    if (!action.hasMutation()) {<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>      return false;<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    }<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    MutationProto mutation = action.getMutation();<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>    MutationType type = mutation.getMutateType();<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>    if (type != MutationType.PUT &amp;&amp; type != MutationType.DELETE) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>      return false;<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>    }<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>    // replication will set a special attribute so we can make use of it to decide whether a request<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    // is for replication.<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>    return mutation.getAttributeList().stream().map(p -&gt; p.getName())<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>      .filter(n -&gt; n.equals(ReplicationUtils.REPLICATION_ATTR_NAME)).findAny().isPresent();<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>  }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span><a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>  /**<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>   * Execute multiple actions on a table: get, mutate, and/or execCoprocessor<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>   * @param rpcc the RPC controller<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>   * @param request the multi request<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>   * @throws ServiceException<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>   */<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>  @Override<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>  public MultiResponse multi(final RpcController rpcc, final MultiRequest request)<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>      throws ServiceException {<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>    try {<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>      checkOpen();<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>    } catch (IOException ie) {<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>      throw new ServiceException(ie);<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>    long nonceGroup = request.hasNonceGroup() ? request.getNonceGroup() : HConstants.NO_NONCE;<a name="line.2729"></a>
+<span class="sourceLineNo">2729</span>    checkBatchSizeAndLogLargeSize(request);<a name="line.2729"></a>
 <span class="sourceLineNo">2730</span><a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>    // this will contain all the cells that we need to return. It's created later, if needed.<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>    List&lt;CellScannable&gt; cellsToReturn = null;<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>    MultiResponse.Builder responseBuilder = MultiResponse.newBuilder();<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    RegionActionResult.Builder regionActionResultBuilder = RegionActionResult.newBuilder();<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>    Boolean processed = null;<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>    RegionScannersCloseCallBack closeCallBack = null;<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    RpcCallContext context = RpcServer.getCurrentCall().orElse(null);<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>    this.rpcMultiRequestCount.increment();<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>    this.requestCount.increment();<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>    Map&lt;RegionSpecifier, ClientProtos.RegionLoadStats&gt; regionStats = new HashMap&lt;&gt;(request<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      .getRegionActionCount());<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    ActivePolicyEnforcement spaceQuotaEnforcement = getSpaceQuotaManager().getActiveEnforcements();<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>    for (RegionAction regionAction : request.getRegionActionList()) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>      OperationQuota quota;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      HRegion region;<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>      regionActionResultBuilder.clear();<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      RegionSpecifier regionSpecifier = regionAction.getRegion();<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      try {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        region = getRegion(regionSpecifier);<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        quota = getRpcQuotaManager().checkQuota(region, regionAction.getActionList());<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      } catch (IOException e) {<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>        failRegionAction(responseBuilder, regionActionResultBuilder, regionAction, cellScanner, e);<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>        continue;  // For this region it's a failure.<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>      boolean rejectIfFromClient = shouldRejectRequestsFromClient(region);<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>      if (regionAction.hasAtomic() &amp;&amp; regionAction.getAtomic()) {<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        // We only allow replication in standby state and it will not set the atomic flag.<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>        if (rejectIfFromClient) {<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>          failRegionAction(responseBuilder, regionActionResultBuilder, regionAction, cellScanner,<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>            new DoNotRetryIOException(<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>              region.getRegionInfo().getRegionNameAsString() + " is in STANDBY state"));<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>          quota.close();<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>          continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>        }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>        // How does this call happen?  It may need some work to play well w/ the surroundings.<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>        // Need to return an item per Action along w/ Action index.  TODO.<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>        try {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>          if (request.hasCondition()) {<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>            Condition condition = request.getCondition();<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>            byte[] row = condition.getRow().toByteArray();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>            byte[] family = condition.getFamily().toByteArray();<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>            byte[] qualifier = condition.getQualifier().toByteArray();<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            CompareOperator op =<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>              CompareOperator.valueOf(condition.getCompareType().name());<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>            ByteArrayComparable comparator =<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>                ProtobufUtil.toComparator(condition.getComparator());<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>            TimeRange timeRange = condition.hasTimeRange() ?<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>              ProtobufUtil.toTimeRange(condition.getTimeRange()) :<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>              TimeRange.allTime();<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>            processed =<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>              checkAndRowMutate(region, regionAction.getActionList(), cellScanner, row, family,<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>                qualifier, op, comparator, timeRange, regionActionResultBuilder,<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>                spaceQuotaEnforcement);<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>          } else {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>            doAtomicBatchOp(regionActionResultBuilder, region, quota, regionAction.getActionList(),<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>              cellScanner, spaceQuotaEnforcement);<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>            processed = Boolean.TRUE;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>          }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>        } catch (IOException e) {<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>          rpcServer.getMetrics().exception(e);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>          // As it's atomic, we may expect it's a global failure.<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>          regionActionResultBuilder.setException(ResponseConverter.buildException(e));<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>        }<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>      } else {<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        if (rejectIfFromClient &amp;&amp; regionAction.getActionCount() &gt; 0 &amp;&amp;<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>          !isReplicationRequest(regionAction.getAction(0))) {<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>          // fail if it is not a replication request<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>          failRegionAction(responseBuilder, regionActionResultBuilder, regionAction, cellScanner,<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>            new DoNotRetryIOException(<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>              region.getRegionInfo().getRegionNameAsString() + " is in STANDBY state"));<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          quota.close();<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>          continue;<a name="line.2802"></a>
+<span class="sourceLineNo">2731</span>    // rpc controller is how we bring in data via the back door;  it is unprotobuf'ed data.<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>    // It is also the conduit via which we pass back data.<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>    HBaseRpcController controller = (HBaseRpcController)rpcc;<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>    CellScanner cellScanner = controller != null ? controller.cellScanner(): null;<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>    if (controller != null) {<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>      controller.setCellScanner(null);<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    }<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span><a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>    long nonceGroup = request.hasNonceGroup() ? request.getNonceGroup() : HConstants.NO_NONCE;<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span><a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>    // this will contain all the cells that we need to return. It's created later, if needed.<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>    List&lt;CellScannable&gt; cellsToReturn = null;<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>    MultiResponse.Builder responseBuilder = MultiResponse.newBuilder();<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>    RegionActionResult.Builder regionActionResultBuilder = RegionActionResult.newBuilder();<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>    Boolean processed = null;<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>    RegionScannersCloseCallBack closeCallBack = null;<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    RpcCallContext context = RpcServer.getCurrentCall().orElse(null);<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>    this.rpcMultiRequestCount.increment();<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>    this.requestCount.increment();<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    Map&lt;RegionSpecifier, ClientProtos.RegionLoadStats&gt; regionStats = new HashMap&lt;&gt;(request<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>      .getRegionActionCount());<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>    ActivePolicyEnforcement spaceQuotaEnforcement = getSpaceQuotaManager().getActiveEnforcements();<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>    for (RegionAction regionAction : request.getRegionActionList()) {<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      OperationQuota quota;<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>      HRegion region;<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>      regionActionResultBuilder.clear();<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>      RegionSpecifier regionSpecifier = regionAction.getRegion();<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>      try {<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>        region = getRegion(regionSpecifier);<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>        quota = getRpcQuotaManager().checkQuota(region, regionAction.getActionList());<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>      } catch (IOException e) {<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>        failRegionAction(responseBuilder, regionActionResultBuilder, regionAction, cellScanner, e);<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>        continue;  // For this region it's a failure.<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      boolean rejectIfFromClient = shouldRejectRequestsFromClient(region);<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>      if (regionAction.hasAtomic() &amp;&amp; regionAction.getAtomic()) {<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>        // We only allow replication in standby state and it will not set the atomic flag.<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>        if (rejectIfFromClient) {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>          failRegionAction(responseBuilder, regionActionResultBuilder, regionAction, cellScanner,<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>            new DoNotRetryIOException(<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>              region.getRegionInfo().getRegionNameAsString() + " is in STANDBY state"));<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>          quota.close();<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>          continue;<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>        }<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>        // How does this call happen?  It may need some work to play well w/ the surroundings.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        // Need to return an item per Action along w/ Action index.  TODO.<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>        try {<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          if (request.hasCondition()) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>            Condition condition = request.getCondition();<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            byte[] row = condition.getRow().toByteArray();<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>            byte[] family = condition.getFamily().toByteArray();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>            byte[] qualifier = condition.getQualifier().toByteArray();<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>            CompareOperator op =<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>              CompareOperator.valueOf(condition.getCompareType().name());<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            ByteArrayComparable comparator =<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>                ProtobufUtil.toComparator(condition.getComparator());<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>            TimeRange timeRange = condition.hasTimeRange() ?<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>              ProtobufUtil.toTimeRange(condition.getTimeRange()) :<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>              TimeRange.allTime();<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>            processed =<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>              checkAndRowMutate(region, regionAction.getActionList(), cellScanner, row, family,<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>                qualifier, op, comparator, timeRange, regionActionResultBuilder,<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>                spaceQuotaEnforcement);<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>          } else {<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>            doAtomicBatchOp(regionActionResultBuilder, region, quota, regionAction.getActionList(),<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>              cellScanner, spaceQuotaEnforcement);<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>            processed = Boolean.TRUE;<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>          }<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>        } catch (IOException e) {<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>          rpcServer.getMetrics().exception(e);<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>          // As it's atomic, we may expect it's a global failure.<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>          regionActionResultBuilder.setException(ResponseConverter.buildException(e));<a name="line.2802"></a>
 <span class="sourceLineNo">2803</span>        }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        // doNonAtomicRegionMutation manages the exception internally<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        if (context != null &amp;&amp; closeCallBack == null) {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          // An RpcCallBack that creates a list of scanners that needs to perform callBack<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>          // operation on completion of multiGets.<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          // Set this only once<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>          closeCallBack = new RegionScannersCloseCallBack();<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>          context.setCallBack(closeCallBack);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        }<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>        cellsToReturn = doNonAtomicRegionMutation(region, quota, regionAction, cellScanner,<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>            regionActionResultBuilder, cellsToReturn, nonceGroup, closeCallBack, context,<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>            spaceQuotaEnforcement);<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>      }<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      responseBuilder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      quota.close();<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      ClientProtos.RegionLoadStats regionLoadStats = region.getLoadStatistics();<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      if (regionLoadStats != null) {<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>        regionStats.put(regionSpecifier, regionLoadStats);<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>      }<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>    }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>    // Load the controller with the Cells to return.<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    if (cellsToReturn != null &amp;&amp; !cellsToReturn.isEmpty() &amp;&amp; controller != null) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      controller.setCellScanner(CellUtil.createCellScanner(cellsToReturn));<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>    if (processed != null) {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      responseBuilder.setProcessed(processed);<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>    }<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span><a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    MultiRegionLoadStats.Builder builder = MultiRegionLoadStats.newBuilder();<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>    for(Entry&lt;RegionSpecifier, ClientProtos.RegionLoadStats&gt; stat: regionStats.entrySet()){<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      builder.addRegion(stat.getKey());<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>      builder.addStat(stat.getValue());<a name="line.2835"></a>
+<span class="sourceLineNo">2804</span>      } else {<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>        if (rejectIfFromClient &amp;&amp; regionAction.getActionCount() &gt; 0 &amp;&amp;<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>          !isReplicationRequest(regionAction.getAction(0))) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>          // fail if it is not a replication request<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>          failRegionAction(responseBuilder, regionActionResultBuilder, regionAction, cellScanner,<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>            new DoNotRetryIOException(<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>              region.getRegionInfo().getRegionNameAsString() + " is in STANDBY state"));<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>          quota.close();<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>          continue;<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>        }<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>        // doNonAtomicRegionMutation manages the exception internally<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>        if (context != null &amp;&amp; closeCallBack == null) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>          // An RpcCallBack that creates a list of scanners that needs to perform callBack<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>          // operation on completion of multiGets.<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>          // Set this only once<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>          closeCallBack = new RegionScannersCloseCallBack();<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>          context.setCallBack(closeCallBack);<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>        }<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>        cellsToReturn = doNonAtomicRegionMutation(region, quota, regionAction, cellScanner,<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>            regionActionResultBuilder, cellsToReturn, nonceGroup, closeCallBack, context,<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>            spaceQuotaEnforcement);<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>      }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>      responseBuilder.addRegionActionResult(regionActionResultBuilder.build());<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>      quota.close();<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>      ClientProtos.RegionLoadStats regionLoadStats = region.getLoadStatistics();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      if (regionLoadStats != null) {<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>        regionStats.put(regionSpecifier, regionLoadStats);<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>      }<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    // Load the controller with the Cells to return.<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    if (cellsToReturn != null &amp;&amp; !cellsToReturn.isEmpty() &amp;&amp; controller != null) {<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>      controller.setCellScanner(CellUtil.createCellScanner(cellsToReturn));<a name="line.2835"></a>
 <span class="sourceLineNo">2836</span>    }<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>    responseBuilder.setRegionStatistics(builder);<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    return responseBuilder.build();<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>  private void skipCellsForMutations(List&lt;Action&gt; actions, CellScanner cellScanner) {<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>    if (cellScanner == null) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>      return;<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>    }<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>    for (Action action : actions) {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>      skipCellsForMutation(action, cellScanner);<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>    }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  }<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span><a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>  private void skipCellsForMutation(Action action, CellScanner cellScanner) {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    if (cellScanner == null) {<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>      return;<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>    }<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>    try {<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>      if (action.hasMutation()) {<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>        MutationProto m = action.getMutation();<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>        if (m.hasAssociatedCellCount()) {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>          for (int i = 0; i &lt; m.getAssociatedCellCount(); i++) {<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>            cellScanner.advance();<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>          }<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>        }<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      }<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    } catch (IOException e) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>      // No need to handle these Individual Muatation level issue. Any way this entire RegionAction<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      // marked as failed as we could not see the Region here. At client side the top level<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>      // RegionAction exception will be considered first.<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      LOG.error("Error while skipping Cells in CellScanner for invalid Region Mutations", e);<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><a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>  /**<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>   * Mutate data in a table.<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>   *<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>   * @param rpcc the RPC controller<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>   * @param request the mutate request<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>   */<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  @Override<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public MutateResponse mutate(final RpcController rpcc, final MutateRequest request)<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>      throws ServiceException {<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>    // rpc controller is how we bring in data via the back door;  it is unprotobuf'ed data.<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>    // It is also the conduit via which we pass back data.<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>    HBaseRpcController controller = (HBaseRpcController)rpcc;<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>    CellScanner cellScanner = controller != null ? controller.cellScanner() : null;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>    OperationQuota quota = null;<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>    RpcCallContext context = RpcServer.getCurrentCall().orElse(null);<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    ActivePolicyEnforcement spaceQuotaEnforcement = null;<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>    MutationType type = null;<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    HRegion region = null;<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>    // Clear scanner so we are not holding on to reference across call.<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>    if (controller != null) {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>      controller.setCellScanner(null);<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    }<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>    try {<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>      checkOpen();<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>      requestCount.increment();<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>      rpcMutateRequestCount.increment();<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>      region = getRegion(request.getRegion());<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>      rejectIfInStandByState(region);<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>      MutateResponse.Builder builder = MutateResponse.newBuilder();<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>      MutationProto mutation = request.getMutation();<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>      }<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>      long nonceGroup = request.hasNonceGroup() ? request.getNonceGroup() : HConstants.NO_NONCE;<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>      Result r = null;<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>      Boolean processed = null;<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>      type = mutation.getMutateType();<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span><a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>      quota = getRpcQuotaManager().checkQuota(region, OperationQuota.OperationType.MUTATE);<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>      spaceQuotaEnforcement = getSpaceQuotaManager().getActiveEnforcements();<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span><a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>      switch (type) {<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>        case APPEND:<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>          // TODO: this doesn't actually check anything.<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>          r = append(region, quota, mutation, cellScanner, nonceGroup, spaceQuotaEnforcement);<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>          break;<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>        case INCREMENT:<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>          // TODO: this doesn't actually check anything.<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>          r = increment(region, quota, mutation, cellScanner, nonceGroup, spaceQuotaEnforcement);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>          break;<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>        case PUT:<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>          Put put = ProtobufUtil.toPut(mutation, cellScanner);<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>          checkCellSizeLimit(region, put);<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>          // Throws an exception when violated<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>          spaceQuotaEnforcement.getPolicyEnforcement(region).check(put);<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>          quota.addMutation(put);<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>          if (request.hasCondition()) {<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>            Condition condition = request.getCondition();<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>            byte[] row = condition.getRow().toByteArray();<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>            byte[] family = condition.getFamily().toByteArray();<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>            byte[] qualifier = condition.getQualifier().toByteArray();<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>            CompareOperator compareOp =<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>              CompareOperator.valueOf(condition.getCompareType().name());<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>            ByteArrayComparable comparator = ProtobufUtil.toComparator(condition.getComparator());<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>            TimeRange timeRange = condition.hasTimeRange() ?<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>              ProtobufUtil.toTimeRange(condition.getTimeRange()) :<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>              TimeRange.allTime();<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>            if (region.getCoprocessorHost() != null) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>              processed = region.getCoprocessorHost().preCheckAndPut(row, family, qualifier,<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>                  compareOp, comparator, put);<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>            }<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>            if (processed == null) {<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>              boolean result = region.checkAndMutate(row, family,<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>                qualifier, compareOp, comparator, timeRange, put);<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>              if (region.getCoprocessorHost() != null) {<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>                result = region.getCoprocessorHost().postCheckAndPut(row, family,<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>                  qualifier, compareOp, comparator, put, result);<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>              }<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>              processed = result;<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>            }<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>          } else {<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>            region.put(put);<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>            processed = Boolean.TRUE;<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>          }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>          break;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>        case DELETE:<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>          Delete delete = ProtobufUtil.toDelete(mutation, cellScanner);<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>          checkCellSizeLimit(region, delete);<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>          spaceQuotaEnforcement.getPolicyEnforcement(region).check(delete);<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>          quota.addMutation(delete);<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>          if (request.hasCondition()) {<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>            Condition condition = request.getCondition();<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>            byte[] row = condition.getRow().toByteArray();<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>            byte[] family = condition.getFamily().toByteArray();<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>            byte[] qualifier = condition.getQualifier().toByteArray();<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>            CompareOperator op = CompareOperator.valueOf(condition.getCompareType().name());<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>            ByteArrayComparable comparator = ProtobufUtil.toComparator(condition.getComparator());<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>            TimeRange timeRange = condition.hasTimeRange() ?<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>              ProtobufUtil.toTimeRange(condition.getTimeRange()) :<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>              TimeRange.allTime();<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>            if (region.getCoprocessorHost() != null) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>              processed = region.getCoprocessorHost().preCheckAndDelete(row, family, qualifier, op,<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>                  comparator, delete);<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>            }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>            if (processed == null) {<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>              boolean result = region.checkAndMutate(row, family,<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>                qualifier, op, comparator, timeRange, delete);<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>              if (region.getCoprocessorHost() != null) {<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>                result = region.getCoprocessorHost().postCheckAndDelete(row, family,<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>                  qualifier, op, comparator, delete, result);<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>              }<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>              processed = result;<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>            }<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>          } else {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>            region.delete(delete);<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>            processed = Boolean.TRUE;<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 DoNotRetryIOException("Unsupported mutate type: " + type.name());<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>      }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>      if (processed != null) {<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>        builder.setProcessed(processed.booleanValue());<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      }<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>      boolean clientCellBlockSupported = isClientCellBlockSupport(context);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>      addResult(builder, r, controller, clientCellBlockSupported);<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>      if (clientCellBlockSupported) {<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>        addSize(context, r, null);<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>      }<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>      return builder.build();<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>    } catch (IOException ie) {<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>      regionServer.checkFileSystem();<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>      throw new ServiceException(ie);<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    } finally {<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>      if (quota != null) {<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>        quota.close();<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>      }<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>      // Update metrics<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>      if (regionServer.metricsRegionServer != null &amp;&amp; type != null) {<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>        long after = EnvironmentEdgeManager.currentTime();<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>        switch (type) {<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>        case DELETE:<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>          if (request.hasCondition()) {<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>            regionServer.metricsRegionServer.updateCheckAndDelete(after - before);<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>          } else {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>            regionServer.metricsRegionServer.updateDelete(<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>                region == null ? null : region.getRegionInfo().getTable(), after - before);<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>          }<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>          break;<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>        case PUT:<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>          if (request.hasCondition()) {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>            regionServer.metricsRegionServer.updateCheckAndPut(after - before);<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>          } else {<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>            regionServer.metricsRegionServer.updatePut(<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>                region == null ? null : region.getRegionInfo().getTable(),after - before);<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>          }<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>          break;<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>        default:<a name="line.3029"></a>
+<span class="sourceLineNo">2837</span><a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>    if (processed != null) {<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>      responseBuilder.setProcessed(processed);<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>    MultiRegionLoadStats.Builder builder = MultiRegionLoadStats.newBuilder();<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>    for(Entry&lt;RegionSpecifier, ClientProtos.RegionLoadStats&gt; stat: regionStats.entrySet()){<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>      builder.addRegion(stat.getKey());<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>      builder.addStat(stat.getValue());<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>    }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>    responseBuilder.setRegionStatistics(builder);<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    return responseBuilder.build();<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>  }<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span><a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>  private void skipCellsForMutations(List&lt;Action&gt; actions, CellScanner cellScanner) {<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>    if (cellScanner == null) {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>      return;<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>    }<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>    for (Action action : actions) {<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      skipCellsForMutation(action, cellScanner);<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    }<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>  }<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span><a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  private void skipCellsForMutation(Action action, CellScanner cellScanner) {<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>    if (cellScanner == null) {<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      return;<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    }<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>    try {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>      if (action.hasMutation()) {<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>        MutationProto m = action.getMutation();<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>        if (m.hasAssociatedCellCount()) {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>          for (int i = 0; i &lt; m.getAssociatedCellCount(); i++) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>            cellScanner.advance();<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>          }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>        }<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>    } catch (IOException e) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>      // No need to handle these Individual Muatation level issue. Any way this entire RegionAction<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>      // marked as failed as we could not see the Region here. At client side the top level<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>      // RegionAction exception will be considered first.<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>      LOG.error("Error while skipping Cells in CellScanner for invalid Region Mutations", e);<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>    }<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>  }<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span><a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>  /**<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>   * Mutate data in a table.<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>   *<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>   * @param rpcc the RPC controller<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>   * @param request the mutate request<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>   */<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  @Override<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>  public MutateResponse mutate(final RpcController rpcc, final MutateRequest request)<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>      throws ServiceException {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>    // rpc controller is how we bring in data via the back door;  it is unprotobuf'ed data.<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>    // It is also the conduit via which we pass back data.<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>    HBaseRpcController controller = (HBaseRpcController)rpcc;<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>    CellScanner cellScanner = controller != null ? controller.cellScanner() : null;<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>    OperationQuota quota = null;<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>    RpcCallContext context = RpcServer.getCurrentCall().orElse(null);<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>    ActivePolicyEnforcement spaceQuotaEnforcement = null;<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>    MutationType type = null;<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    HRegion region = null;<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    // Clear scanner so we are not holding on to reference across call.<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>    if (controller != null) {<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>      controller.setCellScanner(null);<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    }<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>    try {<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>      checkOpen();<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>      requestCount.increment();<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>      rpcMutateRequestCount.increment();<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>      region = getRegion(request.getRegion());<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>      rejectIfInStandByState(region);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>      MutateResponse.Builder builder = MutateResponse.newBuilder();<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>      MutationProto mutation = request.getMutation();<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>      if (!region.getRegionInfo().isMetaRegion()) {<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>        regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>      }<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>      long nonceGroup = request.hasNonceGroup() ? request.getNonceGroup() : HConstants.NO_NONCE;<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>      Result r = null;<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>      Boolean processed = null;<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>      type = mutation.getMutateType();<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span><a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>      quota = getRpcQuotaManager().checkQuota(region, OperationQuota.OperationType.MUTATE);<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>      spaceQuotaEnforcement = getSpaceQuotaManager().getActiveEnforcements();<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span><a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>      switch (type) {<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>        case APPEND:<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>          // TODO: this doesn't actually check anything.<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>          r = append(region, quota, mutation, cellScanner, nonceGroup, spaceQuotaEnforcement);<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>          break;<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>        case INCREMENT:<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>          // TODO: this doesn't actually check anything.<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>          r = increment(region, quota, mutation, cellScanner, nonceGroup, spaceQuotaEnforcement);<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>          break;<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>        case PUT:<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>          Put put = ProtobufUtil.toPut(mutation, cellScanner);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>          checkCellSizeLimit(region, put);<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>          // Throws an exception when violated<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>          spaceQuotaEnforcement.getPolicyEnforcement(region).check(put);<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>          quota.addMutation(put);<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>          if (request.hasCondition()) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>            Condition condition = request.getCondition();<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>            byte[] row = condition.getRow().toByteArray();<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>            byte[] family = condition.getFamily().toByteArray();<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>            byte[] qualifier = condition.getQualifier().toByteArray();<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>            CompareOperator compareOp =<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>              CompareOperator.valueOf(condition.getCompareType().name());<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>            ByteArrayComparable comparator = ProtobufUtil.toComparator(condition.getComparator());<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>            TimeRange timeRange = condition.hasTimeRange() ?<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>              ProtobufUtil.toTimeRange(condition.getTimeRange()) :<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>              TimeRange.allTime();<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>            if (region.getCoprocessorHost() != null) {<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>              processed = region.getCoprocessorHost().preCheckAndPut(row, family, qualifier,<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>                  compareOp, comparator, put);<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>            }<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>            if (processed == null) {<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>              boolean result = region.checkAndMutate(row, family,<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>                qualifier, compareOp, comparator, timeRange, put);<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>              if (region.getCoprocessorHost() != null) {<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>                result = region.getCoprocessorHost().postCheckAndPut(row, family,<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>                  qualifier, compareOp, comparator, put, result);<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>              }<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>              processed = result;<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>            }<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>          } else {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>            region.put(put);<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>            processed = Boolean.TRUE;<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>          }<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>          break;<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>        case DELETE:<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>          Delete delete = ProtobufUtil.toDelete(mutation, cellScanner);<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>          checkCellSizeLimit(region, delete);<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>          spaceQuotaEnforcement.getPolicyEnforcement(region).check(delete);<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>          quota.addMutation(delete);<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>          if (request.hasCondition()) {<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>            Condition condition = request.getCondition();<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>            byte[] row = condition.getRow().toByteArray();<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>            byte[] family = condition.getFamily().toByteArray();<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>            byte[] qualifier = condition.getQualifier().toByteArray();<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>            CompareOperator op = CompareOperator.valueOf(condition.getCompareType().name());<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>            ByteArrayComparable comparator = ProtobufUtil.toComparator(condition.getComparator());<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>            TimeRange timeRange = condition.hasTimeRange() ?<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>              ProtobufUtil.toTimeRange(condition.getTimeRange()) :<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>              TimeRange.allTime();<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>            if (region.getCoprocessorHost() != null) {<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>              processed = region.getCoprocessorHost().preCheckAndDelete(row, family, qualifier, op,<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>                  comparator, delete);<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>            }<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>            if (processed == null) {<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>              boolean result = region.checkAndMutate(row, family,<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>                qualifier, op, comparator, timeRange, delete);<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>              if (region.getCoprocessorHost() != null) {<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>                result = region.getCoprocessorHost().postCheckAndDelete(row, family,<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>                  qualifier, op, comparator, delete, result);<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>              }<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>              processed = result;<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>            }<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>          } else {<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>            region.delete(delete);<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>            processed = Boolean.TRUE;<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>          }<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>          break;<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>        default:<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>          throw new DoNotRetryIOException("Unsupported mutate type: " + type.name());<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>      }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>      if (processed != null) {<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>        builder.setProcessed(processed.booleanValue());<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>      }<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>      boolean clientCellBlockSupported = isClientCellBlockSupport(context);<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>      addResult(builder, r, controller, clientCellBlockSupported);<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>      if (clientCellBlockSupported) {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>        addSize(context, r, null);<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>      }<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>      return builder.build();<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>    } catch (IOException ie) {<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>      regionServer.checkFileSystem();<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>      throw new ServiceException(ie);<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>    } finally {<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>      if (quota != null) {<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>        quota.close();<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>      }<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>      // Update metrics<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>      if (regionServer.metricsRegionServer != null &amp;&amp; type != null) {<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>        long after = EnvironmentEdgeManager.currentTime();<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>        switch (type) {<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>        case DELETE:<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>          if (request.hasCondition()) {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>            regionServer.metricsRegionServer.updateCheckAndDelete(after - before);<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>          } else {<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>            regionServer.metricsRegionServer.updateDelete(<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>                region == null ? null : region.getRegionInfo().getTable(), after - before);<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>          }<a name="line.3029"></a>
 <span class="sourceLineNo">3030</span>          break;<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span><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>    }<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  }<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span><a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  // This is used to keep compatible with the old client implementation. Consider remove it if we<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  // decide to drop the support of the client that still sends close request to a region scanner<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  // which has already been exhausted.<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>  @Deprecated<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>  private static final IOException SCANNER_ALREADY_CLOSED = new IOException() {<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span><a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>    private static final long serialVersionUID = -4305297078988180130L;<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span><a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>    @Override<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>    public synchronized Throwable fillInStackTrace() {<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>      return this;<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><a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>  private RegionScannerHolder getRegionScanner(ScanRequest request) throws IOException {<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>    String scannerName = Long.toString(request.getScannerId());<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>    RegionScannerHolder rsh = scanners.get(scannerName);<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>    if (rsh == null) {<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>      // just ignore the next or close request if scanner does not exists.<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>      if (closedScanners.getIfPresent(scannerName) != null) {<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        throw SCANNER_ALREADY_CLOSED;<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>      } else {<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>        LOG.warn("Client tried to access missing scanner " + scannerName);<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>        throw new UnknownScannerException(<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>            "Unknown scanner '" + scannerName + "'. This can happen due to any of the following " +<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>                "reasons: a) Scanner id given is wrong, b) Scanner lease expired because of " +<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>                "long wait between consecutive client checkins, c) Server may be closing down, " +<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>                "d) RegionServer restart during upgrade.\nIf the issue is due to reason (b), a " +<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>                "possible fix would be increasing the value of" +<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>                "'hbase.client.scanner.timeout.period' configuration.");<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>      }<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    }<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>    rejectIfInStandByState(rsh.r);<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>    RegionInfo hri = rsh.s.getRegionInfo();<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>    // Yes, should be the same instance<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    if (regionServer.getOnlineRegion(hri.getRegionName()) != rsh.r) {<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>      String msg = "Region has changed on the scanner " + scannerName + ": regionName="<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>          + hri.getRegionNameAsString() + ", scannerRegionName=" + rsh.r;<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>      LOG.warn(msg + ", closing...");<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>      scanners.remove(scannerName);<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>      try {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>        rsh.s.close();<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>      } catch (IOException e) {<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>        LOG.warn("Getting exception closing " + scannerName, e);<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>      } finally {<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>        try {<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>          regionServer.leases.cancelLease(scannerName);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>        } catch (LeaseException e) {<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>          LOG.warn("Getting exception closing " + scannerName, e);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>        }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>      }<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>      throw new NotServingRegionException(msg);<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>    }<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>    return rsh;<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>  }<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span><a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>  private RegionScannerHolder newRegionScanner(ScanRequest request, ScanResponse.Builder builder)<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      throws IOException {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>    HRegion region = getRegion(request.getRegion());<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>    rejectIfInStandByState(region);<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>    ClientProtos.Scan protoScan = request.getScan();<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    boolean isLoadingCfsOnDemandSet = protoScan.hasLoadColumnFamiliesOnDemand();<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    Scan scan = ProtobufUtil.toScan(protoScan);<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>    // if the request doesn't set this, get the default region setting.<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    if (!isLoadingCfsOnDemandSet) {<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>      scan.setLoadColumnFamiliesOnDemand(region.isLoadingCfsOnDemandDefault());<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>    }<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span><a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    if (!scan.hasFamilies()) {<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>      // Adding all families to scanner<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>      for (byte[] family : region.getTableDescriptor().getColumnFamilyNames()) {<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>        scan.addFamily(family);<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>    if (region.getCoprocessorHost() != null) {<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>      // preScannerOpen is not allowed to return a RegionScanner. Only post hook can create a<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      // wrapper for the core created RegionScanner<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>      region.getCoprocessorHost().preScannerOpen(scan);<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    }<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>    RegionScannerImpl coreScanner = region.getScanner(scan);<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>    Shipper shipper = coreScanner;<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>    RegionScanner scanner = coreScanner;<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    if (region.getCoprocessorHost() != null) {<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>      scanner = region.getCoprocessorHost().postScannerOpen(scan, scanner);<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>    }<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>    long scannerId = scannerIdGenerator.generateNewScannerId();<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>    builder.setScannerId(scannerId);<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>    builder.setMvccReadPoint(scanner.getMvccReadPoint());<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    builder.setTtl(scannerLeaseTimeoutPeriod);<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>    String scannerName = String.valueOf(scannerId);<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>    return addScanner(scannerName, scanner, shipper, region, scan.isNeedCursorResult());<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>  }<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span><a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>  private void checkScanNextCallSeq(ScanRequest request, RegionScannerHolder rsh)<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>      throws OutOfOrderScannerNextException {<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>    // if nextCallSeq does not match throw Exception straight away. This needs to be<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>    // performed even before checking of Lease.<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>    // See HBASE-5974<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>    if (request.hasNextCallSeq()) {<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>      long callSeq = request.getNextCallSeq();<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>      if (!rsh.incNextCallSeq(callSeq)) {<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>        throw new OutOfOrderScannerNextException("Expected nextCallSeq: " + rsh.getNextCallSeq()<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>            + " But the nextCallSeq got from client: " + request.getNextCallSeq() + "; request="<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>            + TextFormat.shortDebugString(request));<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>      }<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><a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>  private void addScannerLeaseBack(Leases.Lease lease) {<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>    try {<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>      regionServer.leases.addLease(lease);<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>    } catch (LeaseStillHeldException e) {<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>      // should not happen as the scanner id is unique.<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>      throw new AssertionError(e);<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>    }<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>  }<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span><a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>  private long getTimeLimit(HBaseRpcController controller, boolean allowHeartbeatMessages) {<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>    // Set the time limit to be half of the more restrictive timeout value (one of the<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>    // timeout values must be positive). In the event that both values are positive, the<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    // more restrictive of the two is used to calculate the limit.<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>    if (allowHeartbeatMessages &amp;&amp; (scannerLeaseTimeoutPeriod &gt; 0 || rpcTimeout &gt; 0)) {<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>      long timeLimitDelta;<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      if (scannerLeaseTimeoutPeriod &gt; 0 &amp;&amp; rpcTimeout &gt; 0) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>        timeLimitDelta = Math.min(scannerLeaseTimeoutPeriod, rpcTimeout);<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>      } else {<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>        timeLimitDelta = scannerLeaseTimeoutPeriod &gt; 0 ? scannerLeaseTimeoutPeriod : rpcTimeout;<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>      }<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      if (controller != null &amp;&amp; controller.getCallTimeout() &gt; 0) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>        timeLimitDelta = Math.min(timeLimitDelta, controller.getCallTimeout());<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>      // Use half of whichever timeout value was more restrictive... But don't allow<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>      // the time limit to be less than the allowable minimum (could cause an<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>      // immediatate timeout before scanning any data).<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>      timeLimitDelta = Math.max(timeLimitDelta / 2, minimumScanTimeLimitDelta);<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>      // XXX: Can not use EnvironmentEdge here because TestIncrementTimeRange use a<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>      // ManualEnvironmentEdge. Consider using System.nanoTime instead.<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      return System.currentTimeMillis() + timeLimitDelta;<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    }<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    // Default value of timeLimit is negative to indicate no timeLimit should be<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>    // enforced.<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>    return -1L;<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>  private void checkLimitOfRows(int numOfCompleteRows, int limitOfRows, boolean moreRows,<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>      ScannerContext scannerContext, ScanResponse.Builder builder) {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>    if (numOfCompleteRows &gt;= limitOfRows) {<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>      if (LOG.isTraceEnabled()) {<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>        LOG.trace("Done scanning, limit of rows reached, moreRows: " + moreRows +<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>            " scannerContext: " + scannerContext);<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>      }<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>      builder.setMoreResults(false);<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><a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>  // return whether we have more results in region.<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>  private void scan(HBaseRpcController controller, ScanRequest request, RegionScannerHolder rsh,<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>      long maxQuotaResultSize, int maxResults, int limitOfRows, List&lt;Result&gt; results,<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>      ScanResponse.Builder builder, MutableObject&lt;Object&gt; lastBlock, RpcCallContext context)<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>      throws IOException {<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>    HRegion region = rsh.r;<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>    RegionScanner scanner = rsh.s;<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    long maxResultSize;<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    if (scanner.getMaxResultSize() &gt; 0) {<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>      maxResultSize = Math.min(scanner.getMaxResultSize(), maxQuotaResultSize);<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>    } else {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>      maxResultSize = maxQuotaResultSize;<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>    }<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>    // This is cells inside a row. Default size is 10 so if many versions or many cfs,<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>    // then we'll resize. Resizings show in profiler. Set it higher than 10. For now<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    // arbitrary 32. TODO: keep record of general size of results being returned.<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    List&lt;Cell&gt; values = new ArrayList&lt;&gt;(32);<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>    region.startRegionOperation(Operation.SCAN);<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>    try {<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>      int numOfResults = 0;<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      int numOfCompleteRows = 0;<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>      long before = EnvironmentEdgeManager.currentTime();<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>      synchronized (scanner) {<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        boolean stale = (region.getRegionInfo().getReplicaId() != 0);<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>        boolean clientHandlesPartials =<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>            request.hasClientHandlesPartials() &amp;&amp; request.getClientHandlesPartials();<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>        boolean clientHandlesHeartbeats =<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>            request.hasClientHandlesHeartbeats() &amp;&amp; request.getClientHandlesHeartbeats();<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span><a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>        // On the server side we must ensure that the correct ordering of partial results is<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>        // returned to the client to allow them to properly reconstruct the partial results.<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>        // If the coprocessor host is adding to the result list, we cannot guarantee the<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>        // correct ordering of partial results and so we prevent partial results from being<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>        // formed.<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>        boolean serverGuaranteesOrderOfPartials = results.isEmpty();<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>        boolean allowPartialResults = clientHandlesPartials &amp;&amp; serverGuaranteesOrderOfPartials;<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>        boolean moreRows = false;<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span><a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>        // Heartbeat messages occur when the processing of the ScanRequest is exceeds a<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>        // certain time threshold on the server. When the time threshold is exceeded, the<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>        // server stops the scan and sends back whatever Results it has accumulated within<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>        // that time period (may be empty). Since heartbeat messages have the potential to<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>        // create partial Results (in the event that the timeout occurs in the middle of a<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>        // row), we must only generate heartbeat messages when the client can handle both<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>        // heartbeats AND partials<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span>        boolean allowHeartbeatMessages = clientHandlesHeartbeats &amp;&amp; allowPartialResults;<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span><a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>        long timeLimit = getTimeLimit(controller, allowHeartbeatMessages);<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span><a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>        final LimitScope sizeScope =<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>            allowPartialResults ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>        final LimitScope timeScope =<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>            allowHeartbeatMessages ? LimitScope.BETWEEN_CELLS : LimitScope.BETWEEN_ROWS;<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span><a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>        boolean trackMetrics = request.hasTrackScanMetrics() &amp;&amp; request.getTrackScanMetrics();<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span><a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>        // Configure with limits for this RPC. Set keep progress true since size progress<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>        // towards size limit should be kept between calls to nextRaw<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>        ScannerContext.Builder contextBuilder = ScannerContext.newBuilder(true);<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>        // maxResultSize - either we can reach this much size for all cells(being read) data or sum<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>        // of heap size occupied by cells(being read). Cell data means its key and value parts.<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>        contextBuilder.setSizeLimit(sizeScope, maxResultSize, maxResultSize);<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>        contextBuilder.setBatchLimit(scanner.getBatch());<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>        contextBuilder.setTimeLimit(timeScope, timeLimit);<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>        contextBuilder.setTrackMetrics(trackMetrics);<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>        ScannerContext scannerContext = contextBuilder.build();<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>        boolean limitReached = false;<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>        while (numOfResults &lt; maxResults) {<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>          // Reset the batch progress to 0 before every call to RegionScanner#nextRaw. The<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>          // batch limit is a limit on the number of cells per Result. Thus, if progress is<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>          // being tracked (i.e. scannerContext.keepProgress() is true) then we need to<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>          // reset the batch progress between nextRaw invocations since we don't want the<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>          // batch progress from previous calls to affect future calls<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>          scannerContext.setBatchProgress(0);<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span><a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>          // Collect values to be returned here<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>          moreRows = scanner.nextRaw(values, scannerContext);<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span><a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>          if (!values.isEmpty()) {<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>            if (limitOfRows &gt; 0) {<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>              // First we need to check if the last result is partial and we have a row change. If<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>              // so then we need to increase the numOfCompleteRows.<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>              if (results.isEmpty()) {<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>                if (rsh.rowOfLastPartialResult != null &amp;&amp;<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>                    !CellUtil.matchingRows(values.get(0), rsh.rowOfLastPartialResult)) {<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>                  numOfCompleteRows++;<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>                  checkLimitOfRows(numOfCompleteRows, limitOfRows, moreRows, scannerContext,<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>                    builder);<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>                }<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>              } else {<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>                Result lastResult = results.get(results.size() - 1);<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>                if (lastResult.mayHaveMoreCellsInRow() &amp;&amp;<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>                    !CellUtil.matchingRows(values.get(0), lastResult.getRow())) {<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>                  numOfCompleteRows++;<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>                  checkLimitOfRows(numOfCompleteRows, limitOfRows, moreRows, scannerContext,<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>                    builder);<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>                }<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>              }<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>              if (builder.hasMoreResults() &amp;&amp; !builder.getMoreResults()) {<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>                break;<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>              }<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>            }<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>            boolean mayHaveMoreCellsInRow = scannerContext.mayHaveMoreCellsInRow();<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>            Result r = Result.create(values, null, stale, mayHaveMoreCellsInRow);<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>            lastBlock.setValue(addSize(context, r, lastBlock.getValue()));<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>            results.add(r);<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>            numOfResults++;<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>            if (!mayHaveMoreCellsInRow &amp;&amp; limitOfRows &gt; 0) {<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>              numOfCompleteRows++;<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>              checkLimitOfRows(numOfCompleteRows, limitOfRows, moreRows, scannerContext, builder);<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>              if (builder.hasMoreResults() &amp;&amp; !builder.getMoreResults()) {<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>                break;<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>              }<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>            }<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>          } else if (!moreRows &amp;&amp; !results.isEmpty()) {<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>            // No more cells for the scan here, we need to ensure that the mayHaveMoreCellsInRow of<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>            // last result is false. Otherwise it's possible that: the first nextRaw returned<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>            // because BATCH_LIMIT_REACHED (BTW it happen to exhaust all cells of the scan),so the<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>            // last result's mayHaveMoreCellsInRow will be true. while the following nextRaw will<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>            // return with moreRows=false, which means moreResultsInRegion would be false, it will<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>            // be a contradictory state (HBASE-21206).<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>            int lastIdx = results.size() - 1;<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>            Result r = results.get(lastIdx);<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>            if (r.mayHaveMoreCellsInRow()) {<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>              results.set(lastIdx, Result.create(r.rawCells(), r.getExists(), r.isStale(), false));<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>            }<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>          }<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>          boolean sizeLimitReached = scannerContext.checkSizeLimit(LimitScope.BETWEEN_ROWS);<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>          boolean timeLimitReached = scannerContext.checkTimeLimit(LimitScope.BETWEEN_ROWS);<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>          boolean resultsLimitReached = numOfResults &gt;= maxResults;<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>          limitReached = sizeLimitReached || timeLimitReached || resultsLimitReached;<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span><a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>          if (limitReached || !moreRows) {<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>            // We only want to mark a ScanResponse as a heartbeat message in the event that<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>            // there are more values to be read server side. If there aren't more values,<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>            // marking it as a heartbeat is wasteful because the client will need to issue<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>            // another ScanRequest only to realize that they already have all the values<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>            if (moreRows &amp;&amp; timeLimitReached) {<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>              // Heartbeat messages occur when the time limit has been reached.<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>              builder.setHeartbeatMessage(true);<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>              if (rsh.needCursor) {<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>                Cell cursorCell = scannerContext.getLastPeekedCell();<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>                if (cursorCell != null) {<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>                  builder.setCursor(ProtobufUtil.toCursor(cursorCell));<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>                }<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>              }<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>            }<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>            break;<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>          }<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>          values.clear();<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>        }<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        builder.setMoreResultsInRegion(moreRows);<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>        // Check to see if the client requested that we track metrics server side. If the<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>        // client requested metrics, retrieve the metrics from the scanner context.<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>        if (trackMetrics) {<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>          Map&lt;String, Long&gt; metrics = scannerContext.getMetrics().getMetricsMap();<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>          ScanMetrics.Builder metricBuilder = ScanMetrics.newBuilder();<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>          NameInt64Pair.Builder pairBuilder = NameInt64Pair.newBuilder();<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span><a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>          for (Entry&lt;String, Long&gt; entry : metrics.entrySet()) {<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>            pairBuilder.setName(entry.getKey());<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>            pairBuilder.setValue(entry.getValue());<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>            metricBuilder.addMetrics(pairBuilder.build());<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>          }<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span><a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>          builder.setScanMetrics(metricBuilder.build());<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>        }<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>      }<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>      long end = EnvironmentEdgeManager.currentTime();<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>      long responseCellSize = context != null ? context.getResponseCellSize() : 0;<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>      region.getMetrics().updateScanTime(end - before);<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>      if (regionServer.metricsRegionServer != null) {<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>        regionServer.metricsRegionServer.updateScanSize(<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>            region.getTableDescriptor().getTableName(), responseCellSize);<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>        regionServer.metricsRegionServer.updateScanTime(<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>            region.getTableDescriptor().getTableName(), end - before);<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>      }<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>    } finally {<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span>      region.closeRegionOperation();<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>    }<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>    // coprocessor postNext hook<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>    if (region.getCoprocessorHost() != null) {<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>      region.getCoprocessorHost().postScannerNext(scanner, results, maxResults, true);<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>    }<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>  }<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span><a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>  /**<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>   * Scan data in a table.<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>   *<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>   * @param controller the RPC controller<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>   * @param request the scan request<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>   * @throws ServiceException<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>   */<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>  @Override<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>  public ScanResponse scan(final RpcController controller, final ScanRequest request)<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>      throws ServiceException {<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>    if (controller != null &amp;&amp; !(controller instanceof HBaseRpcController)) {<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>      throw new UnsupportedOperationException(<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>          "We only do " + "HBaseRpcControllers! FIX IF A PROBLEM: " + controller);<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>    }<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>    if (!request.hasScannerId() &amp;&amp; !request.hasScan()) {<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>      throw new ServiceException(<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>          new DoNotRetryIOException("Missing required input: scannerId or scan"));<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>    }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span>    try {<a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>      checkOpen();<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>    } catch (IOException e) {<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>      if (request.hasScannerId()) {<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>        String scannerName = Long.toString(request.getScannerId());<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>        if (LOG.isDebugEnabled()) {<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>          LOG.debug(<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>            "Server shutting down and client tried to access missing scanner " + scannerName);<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>        }<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>        if (regionServer.leases != null) {<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>          try {<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>            regionServer.leases.cancelLease(scannerName);<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>          } catch (LeaseException le) {<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>            // No problem, ignore<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>            if (LOG.isTraceEnabled()) {<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>              LOG.trace("Un-able to cancel lease of scanner. It could already be closed.");<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>            }<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>          }<a name="line.3413"></a>
+<span class="sourceLineNo">3031</span>        case PUT:<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>          if (request.hasCondition()) {<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>            regionServer.metricsRegionServer.updateCheckAndPut(after - before);<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>          } else {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>            regionServer.metricsRegionServer.updatePut(<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>                region == null ? null : region.getRegionInfo().getTable(),after - before);<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>          }<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>          break;<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>        default:<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>          break;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span><a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>        }<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>      }<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>    }<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>  }<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span><a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>  // This is used to keep compatible with the old client implementation. Consider remove it if we<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  // decide to drop the support of the client that still sends close request to a region scanner<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>  // which has already been exhausted.<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>  @Deprecated<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  private static final IOException SCANNER_ALREADY_CLOSED = new IOException() {<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span><a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>    private static final long serialVersionUID = -4305297078988180130L;<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span><a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>    @Override<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>    public synchronized Throwable fillInStackTrace() {<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>      return this;<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>    }<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>  };<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span><a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>  private RegionScannerHolder getRegionScanner(ScanRequest request) throws IOException {<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>    String scannerName = Long.toString(request.getScannerId());<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>    RegionScannerHolder rsh = scanners.get(scannerName);<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    if (rsh == null) {<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>      // just ignore the next or close request if scanner does not exists.<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>      if (closedScanners.getIfPresent(scannerName) != null) {<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>        throw SCANNER_ALREADY_CLOSED;<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>      } else {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>        LOG.warn("Client tried to access missing scanner " + scannerName);<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>        throw new UnknownScannerException(<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>            "Unknown scanner '" + scannerName + "'. This can happen due to any of the following " +<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>                "reasons: a) Scanner id given is wrong, b) Scanner lease expired because of " +<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>                "long wait between consecutive client checkins, c) Server may be closing down, " +<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>                "d) RegionServer restart during upgrade.\nIf the issue is due to reason (b), a " +<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>                "possible fix would be increasing the value of" +<a name="line.3075"></a>
... 50401 lines suppressed ...